
获得徽章 0
css清除浮动方法小结
一下方法是针对子元素浮动,导致父元素高度塌陷的问题
首先要明确一点,子元素浮动会导致两个塌陷,一个是父元素内部的塌陷,就是其他子元素占用了浮动子元素的位置。另外一个塌陷是因为父元素没有设置高度,导致父元素同级的元素占用了父元素的位置。
①给父元素加上{overflow: hidden;*zoom:1};这种方法会解决父元素高度塌陷问题。也就是说和父元素同级的元素不会受父元素内子元素的影响。但是父元素内部的子元素直接还是会受某个子元素浮动的影响。
②.father::after{content: '';display: block;clear: both;}这种方法解决的问题与方法一解决的问题是一样的
③如果要解决父元素内部的子元素高度塌陷的问题,那么可以在浮动的子元素后面加上一个div 设置这个div的样式clear:both;这样其余的子元素就不会占用浮动的子元素的原来的位置。
一下方法是针对子元素浮动,导致父元素高度塌陷的问题
首先要明确一点,子元素浮动会导致两个塌陷,一个是父元素内部的塌陷,就是其他子元素占用了浮动子元素的位置。另外一个塌陷是因为父元素没有设置高度,导致父元素同级的元素占用了父元素的位置。
①给父元素加上{overflow: hidden;*zoom:1};这种方法会解决父元素高度塌陷问题。也就是说和父元素同级的元素不会受父元素内子元素的影响。但是父元素内部的子元素直接还是会受某个子元素浮动的影响。
②.father::after{content: '';display: block;clear: both;}这种方法解决的问题与方法一解决的问题是一样的
③如果要解决父元素内部的子元素高度塌陷的问题,那么可以在浮动的子元素后面加上一个div 设置这个div的样式clear:both;这样其余的子元素就不会占用浮动的子元素的原来的位置。
展开
评论
点赞
css盲点总结
①当我们对父元素设置display: flex;时,子元素如果不指定高度那么默认就是父元素的高度
如果对子元素设置align-items: center;height:100px;那么子元素就为100px 在父元素内垂直居中
②当我们在父元素没有用flex布局的时候,子元素的高度默认是0,宽度默认是父元素的100%
③flex布局:
设置在容器上的属性:flex-direction + flex-wrap = flex-flow justify-content align-items align-content(针对多行)
设置在项目上的属性:order flex-grow + flex-shrink + flex-basis = flex(默认0 1 auto);auto(1 1 auto)等分放大缩小;none(0 0 auto)不放大不缩小
①当我们对父元素设置display: flex;时,子元素如果不指定高度那么默认就是父元素的高度
如果对子元素设置align-items: center;height:100px;那么子元素就为100px 在父元素内垂直居中
②当我们在父元素没有用flex布局的时候,子元素的高度默认是0,宽度默认是父元素的100%
③flex布局:
设置在容器上的属性:flex-direction + flex-wrap = flex-flow justify-content align-items align-content(针对多行)
设置在项目上的属性:order flex-grow + flex-shrink + flex-basis = flex(默认0 1 auto);auto(1 1 auto)等分放大缩小;none(0 0 auto)不放大不缩小
展开
评论
点赞
JS用原型模拟类的继承
function Student(props) {
this.name = props.name || 'Unnamed';
}
Student.prototype.hello = function () {
console.log('Hello, ' + this.name + '!');
}
function PrimaryStudent(props) {
// 调用Student构造函数,绑定this变量:
Student.call(this, props);
this.grade = props.grade || 1;
}
//原型类比于类,类之间的继承,类比于原型之间的继承
PrimaryStudent.prototype = Object.create(Student.prototype)
let ps = new PrimaryStudent({name:'zh',grade:100})
console.log(ps.name)
ps.hello()
function Student(props) {
this.name = props.name || 'Unnamed';
}
Student.prototype.hello = function () {
console.log('Hello, ' + this.name + '!');
}
function PrimaryStudent(props) {
// 调用Student构造函数,绑定this变量:
Student.call(this, props);
this.grade = props.grade || 1;
}
//原型类比于类,类之间的继承,类比于原型之间的继承
PrimaryStudent.prototype = Object.create(Student.prototype)
let ps = new PrimaryStudent({name:'zh',grade:100})
console.log(ps.name)
ps.hello()
展开
评论
点赞
赞了这篇文章
一个算法,大家可以帮我分析一下时间复杂度吗?
leetcode官方给出的时间复杂度是O(n),但是我寻思每次的pop和push操作不是也得用时间吗,而且push和pop的时间复杂度应该不是常数吧,因为数组的插入和删除应该是挺慢的吧,所以为啥时间复杂度就是O(n)呢?
leetcode官方给出的时间复杂度是O(n),但是我寻思每次的pop和push操作不是也得用时间吗,而且push和pop的时间复杂度应该不是常数吧,因为数组的插入和删除应该是挺慢的吧,所以为啥时间复杂度就是O(n)呢?
2
1
如何判断一个链表里面有没有环?
第一种思路就是给遍历过的每个节点加一个标记,这样一直向下访问,如果遇到了某个节点有自己的标记,那么就说明这个节点访问过了。
第二种思路就是传说中的快慢指针,如果有环那么快慢指针必相遇,这其实就有点类似高中时候学过了追及相遇问题。
快慢指针我在大一的时候听学长说过,现在大二都结束了,终于自己体会了一把,哈哈哈哈。
下面是快慢指针的JS代码,对应leetcode的141题!
//快慢指针
var hasCycle = function(head) {
while(head==null||head.next==null) return false;
let quickPoint = head;
let slowPoint = head;
quickPoint = quickPoint.next.next
slowPoint = slowPoint.next
// if(quickPoint == null) return false;
while(quickPoint!=null){
if(quickPoint == slowPoint){
return true;
}
if(quickPoint.next!=null){
quickPoint = quickPoint.next.next
slowPoint = slowPoint.next
}else{
return false;
}
}
return false;
};
第一种思路就是给遍历过的每个节点加一个标记,这样一直向下访问,如果遇到了某个节点有自己的标记,那么就说明这个节点访问过了。
第二种思路就是传说中的快慢指针,如果有环那么快慢指针必相遇,这其实就有点类似高中时候学过了追及相遇问题。
快慢指针我在大一的时候听学长说过,现在大二都结束了,终于自己体会了一把,哈哈哈哈。
下面是快慢指针的JS代码,对应leetcode的141题!
//快慢指针
var hasCycle = function(head) {
while(head==null||head.next==null) return false;
let quickPoint = head;
let slowPoint = head;
quickPoint = quickPoint.next.next
slowPoint = slowPoint.next
// if(quickPoint == null) return false;
while(quickPoint!=null){
if(quickPoint == slowPoint){
return true;
}
if(quickPoint.next!=null){
quickPoint = quickPoint.next.next
slowPoint = slowPoint.next
}else{
return false;
}
}
return false;
};
展开
2
点赞
我的小程序终于上线了,欢迎大家体验。主打功能是任务添加与提醒,和学习情况统计。这是第一版,UI设计不完善,用户体验有待优化,可能还会有我没有发现的bug。大家可以提意见,或者说想要添加什么功能,我会在之后的迭代中不断完善。
7
点赞
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
* leetcode 第1题 两数之和
*这道题用两层循环时间复杂度比较高,但是容易想到。
我这里用的是map集合,主要是因为知道map的键,来查找值的话是很快的。
当我们遍历到一个数的时候,就把这个数放到map中,然后遍历下一个数的时候
首先通过target减去当前的这个数 得到的还是一个数,然后我们把这个数看成是map的
键 去map中找,如果找到了那么就完事了,如果没有找到,就把当前循环到的数当成键加入
到map中。这样我们通过一次循环就可以找到两数之和为目标值的数。
这个题目关键是:知道map在已知键的情况下,查询是很快的。
*/
var twoSum = function(nums, target) {
let map = new Map()
for(let i=0;i<nums.length;i++){
if(map.get(target-nums[i])!=undefined&&map.get(target-nums[i])!=i){
let arr=[]
arr.push(i)
arr.push(map.get(target-nums[i]))
return arr;
}
map.set(nums[i],i)
}
};
let res = twoSum([3,3],6)
console.log(res)
* @param {number[]} nums
* @param {number} target
* @return {number[]}
* leetcode 第1题 两数之和
*这道题用两层循环时间复杂度比较高,但是容易想到。
我这里用的是map集合,主要是因为知道map的键,来查找值的话是很快的。
当我们遍历到一个数的时候,就把这个数放到map中,然后遍历下一个数的时候
首先通过target减去当前的这个数 得到的还是一个数,然后我们把这个数看成是map的
键 去map中找,如果找到了那么就完事了,如果没有找到,就把当前循环到的数当成键加入
到map中。这样我们通过一次循环就可以找到两数之和为目标值的数。
这个题目关键是:知道map在已知键的情况下,查询是很快的。
*/
var twoSum = function(nums, target) {
let map = new Map()
for(let i=0;i<nums.length;i++){
if(map.get(target-nums[i])!=undefined&&map.get(target-nums[i])!=i){
let arr=[]
arr.push(i)
arr.push(map.get(target-nums[i]))
return arr;
}
map.set(nums[i],i)
}
};
let res = twoSum([3,3],6)
console.log(res)
展开
评论
1
module.exports和require是一对他们是nodejs的模块化的常用方式
export/export default 和import是一对,他们是ES里面的内容,是前端规范化的内容
export/export default 和import是一对,他们是ES里面的内容,是前端规范化的内容
评论
1
今天的HTML小知识:
iframe标签用于将一个网页呈现在当前网页中,src属性是要呈现的网页的链接,name属性可以用来作为a标签的target属性的值,表示a标签链接到的网页在这个iframe中打开。
锚点是怎么实现的?
在页面中埋下一个锚点:
<a name="001"></a>
在页面中添加超链接,点击超链接就会跳转到这个锚点:
<a href="#001">点我到锚点</a>
iframe标签用于将一个网页呈现在当前网页中,src属性是要呈现的网页的链接,name属性可以用来作为a标签的target属性的值,表示a标签链接到的网页在这个iframe中打开。
锚点是怎么实现的?
在页面中埋下一个锚点:
<a name="001"></a>
在页面中添加超链接,点击超链接就会跳转到这个锚点:
<a href="#001">点我到锚点</a>
展开
评论
点赞
//一个经典的promise和定时器执行顺序的题目,之前遇到过,再次记录一下
//promise的then是微任务,定时器是宏任务,微任务优先
setTimeout(()=>console.log("d"), 0)//一个异步操作
var r = new Promise(function(resolve, reject){
resolve()
});
r.then(() => {
var begin = Date.now();
while(Date.now() - begin < 1000);//阻塞主线程
console.log("c1")
new Promise(function(resolve, reject){
resolve()
}).then(() => console.log("c2"))
});
//promise的then是微任务,定时器是宏任务,微任务优先
setTimeout(()=>console.log("d"), 0)//一个异步操作
var r = new Promise(function(resolve, reject){
resolve()
});
r.then(() => {
var begin = Date.now();
while(Date.now() - begin < 1000);//阻塞主线程
console.log("c1")
new Promise(function(resolve, reject){
resolve()
}).then(() => console.log("c2"))
});
展开
评论
点赞
赞了这篇文章
今天开发小程序遇到一个问题,大家有么有好的解决方法。问题是这样的:我的小程序有一个每日打卡功能,用户每天都可以打卡一次,而且每天只能打卡一次,打卡过了之后今天的打卡状态就设置为已打卡,然后过了凌晨0点,就需要再次将打卡状态设置为未打卡。我应该怎么做到让小程序自动更改打卡状态?我想到的一个方法就是监听每天 的凌晨0点,到了这个时间就将打卡状态设施为未打卡,因为新的一天开始了,但是这样就会有一个监听器一直运行,感觉不是很好。大家有么有好的方法。
展开
14
点赞
今天参加互联网+复赛,路演比较失败,大概总结一下几点,给大家避坑
1.ppt要图文并茂,不能用太多的专业术语,因为评委老师并不懂你所研究的领域。ppt一定要简介,不能放太多文字,应该脱稿,自己将要讲解的文字在脑海中想好。
2.互联网+是偏向商业化的比赛,所以要侧重商业化,而不是项目的研发过程,建议严格按照商业计划书的目录来讲解。
3.用具体数据说话,不可模糊。例如提升了多少百分比要说清楚。
4.一定要做充分的调研报告,市场上有没有同类产品。
5.有专利或者论文,或者注册了公司一定要说清楚。
我被问到的问题有:如何把大量的用户数据变现,如何得到学校的支持,在对其他学校不了解的情况下怎么在其他高校推广,其他高校为何会接受你的产品。
这次的复赛不算成功,但是也学习到了很多。
1.ppt要图文并茂,不能用太多的专业术语,因为评委老师并不懂你所研究的领域。ppt一定要简介,不能放太多文字,应该脱稿,自己将要讲解的文字在脑海中想好。
2.互联网+是偏向商业化的比赛,所以要侧重商业化,而不是项目的研发过程,建议严格按照商业计划书的目录来讲解。
3.用具体数据说话,不可模糊。例如提升了多少百分比要说清楚。
4.一定要做充分的调研报告,市场上有没有同类产品。
5.有专利或者论文,或者注册了公司一定要说清楚。
我被问到的问题有:如何把大量的用户数据变现,如何得到学校的支持,在对其他学校不了解的情况下怎么在其他高校推广,其他高校为何会接受你的产品。
这次的复赛不算成功,但是也学习到了很多。
展开
评论
2