- 为什么css样式初始化,目的是为了什么
- js继承
- 常见布局的方法
- rem,px,em的区别
- typeof去判断数据类型返回值有哪些
- 快排和冒泡的原理
- 清除浮动的方法
- 定时器setTimeout的运行机制
- get和post的请求区别
- 浮动元素有什么特性
1. 为什么css
样式初始化,目的是为了什么
- 之所以要进行
css
样式初始化是因为不同浏览器对标签对默认样式值不同 - 如果不进行初始化会导致页面在不同浏览器上的显示差异
附上各网站初始化代码:
- 最简单的初始化样式
* { padding: 0; margin: 0; }
- 淘宝样式初始化
body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }
h1, h2, h3, h4, h5, h6{ font-size:100%; }
address, cite, dfn, em, var { font-style:normal; }
code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
small{ font-size:12px; }
ul, ol { list-style:none; }
a { text-decoration:none; }
a:hover { text-decoration:underline; }
sup { vertical-align:text-top; }
sub{ vertical-align:text-bottom; }
legend { color:#000; }
fieldset, img { border:0; }
button, input, select, textarea { font-size:100%; }
table { border-collapse:collapse; border-spacing:0; }
- 腾讯QQ官网样式初始化
body,ol,ul,h1,h2,h3,h4,h5,h6,p,th,td,dl,dd,form,fieldset,legend,input,textarea,select{margin:0;padding:0}
body{font:12px"宋体","Arial Narrow",HELVETICA;background:#fff;-webkit-text-size-adjust:100%;}
a{color:#2d374b;text-decoration:none}
a:hover{color:#cd0200;text-decoration:underline}
5 em{font-style:normal}
li{list-style:none}
img{border:0;vertical-align:middle}
table{border-collapse:collapse;border-spacing:0}
p{word-wrap:break-word}
- 新浪官网样式初始化
body,ul,ol,li,p,h1,h2,h3,h4,h5,h6,form,fieldset,table,td,img,div{margin:0;padding:0;border:0;}
body{background:#fff;color:#333;font-size:12px; margin-top:5px;font-family:"SimSun","宋体","Arial Narrow";}
ul,ol{list-style-type:none;}
select,input,img,select{vertical-align:middle;}
a{text-decoration:none;}
a:link{color:#009;}
a:visited{color:#800080;}
a:hover,a:active,a:focus{color:#c00;text-decoration:underline;}
2. JS
继承(点击查看答案)>>
3. 常见布局的方法(点击查看答案) >>
4. rem
,px
,em
的区别
- 首先它们都是计量单位,表示尺寸
-
px
(Pixel)像素。相对长度单位。
像素px是相对于显示屏分辨率而言的。使用px可以准确的定位网页元素,但是,不同显示器网页的显示效果可能会有差异,比较难兼容。(⚠️IE无法调整用px
作为单位的字体大小。) -
em
相对长度单位。
相对父元素的属性而计算。示例: 如果父元素的font-size:16px
,那2em =2*16px = 32px;
所有未经调整的浏览器都符合:1em=16px
。 -
rem
相对长度单位。
rem
是CSS3新增的一个单位。rem
是相对于HTML
根元素的font-size
值而言的.\
px
,em
,rem
转换工具:http://pxtoem.com/
5. typeof去判断数据类型返回值有哪些
typeof
返回的数据类型一共有6种,分别是:
object
undefined
string
number
boolean
function
⚠️null
和Array
返回object
使用一个未定义的变量会报错,但是typeof
检测一个为定义变量数据类型不会报错,返回undefined
console.log(a); // error: a is not defined
typeof a ; // "undefined"
6. 快排和冒泡的原理
-
快排 -> 快速排序 是所有排序算法中最快的一个,其时间复杂度O(n log n)
基本思想:首先在列表中找一个值作为基准值 -> 数据围绕基准值进行 -> 将列表中小于基准值的元素移到数组的左边,大于基准值的元素移到数组的右边 -
冒泡排序
基本思想: 比较所有相邻元素,如果前一个比后面一个大,两者交换位置。最后比较大的值的元素就会一步一步的移动到后面正确的位置。较小的元素就像冒泡一样出现在数组前面位置。
7. 清除浮动的方法
清除浮动的本质: 主要是为了解决父级元素由于子级元素浮动引起的内部高度为0的问题。
常用的4种方法:
- 在最后一个浮动元素后面新加一个额外的标签,给其设置属性
clear:both
示例:
<div class="father">
<div class="floatA"></div>
<div class="floatB"></div>
<div class="otherClear"></div>
</div>
.floatA {
float: left;
}
.floatB {
float: left;
}
.otherClear {
clear: both;
}
⚠️不推荐使用,因为添加无意义标签
- 给父级元素添加伪类元素
after
(推荐使用)
和第一种方法类似,但是不用添加多余标签
但是:ie6-7不支持伪元素:after,使用zoom:1触发hasLayout.
示例:
<div class="father">
<div class="floatA"></div>
<div class="floatB"></div>
</div>
.father:after{
clear: both;
}
.father {
*zoom: 1;/*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
}
-
父级元素设置
overflow:hidden
(不推荐使用)
优点: 代码简洁
缺点:当内容过多的时候,不会自动换行的元素内容被隐藏,无法显示溢出元素 -
使用
before
和after
双伪元素清除浮动
示例:
<div class="fahter clearfix">
<div class="big">big</div>
<div class="small">small</div>
</div>
<div class="footer"></div>
.clearfix:after,.clearfix:before{
content: "";
display: table;
}
.clearfix:after{
clear: both;
}
.clearfix{
*zoom: 1;
}
8.定时器setTimeout
的运行机制
setTimeout()
函数是用来指定某个函数或者某段代码在指定时间段后执行。
返回: 这个函数会返回一个整数,表示定时器timer的编号,可用于清除定时器。
补充:
setInterval()
函数指定某个函数或者某个代码每隔一定时间段执行一次。
返回: 同样会返回一个定时器编号timer,用于清除定时器。
setTimeout()
与setInterval()
的运行机制是将本次的代码移出本次执行等到下一轮Event Loop
时,检测是否到了指定时间,如果到了就执行,如果没到就等下次Event Loop
时重新判断。
⚠️思考根据上述描述,如果setTimeout
指定时间t执行一段代码,那么这段代码一定是t毫秒时之后执行吗?
理解setTimeout运行机制,必须弄清楚以下名词:
- JS单线程
- 任务队列
- 同步任务
- 异步任务
- 宏任务
- 微任务
9. get
和post
的请求区别
get
用于获取信息,且无副作用,可缓存post
用于修改服务器上的数据,有副作用,不可缓存
报文上的区别:
get
请求参数放在URL
中post
请求参数放在body
中
数据上区别:
get
请求传递的参数有长度限制(URL
最大长度微2048字符),只允许ASCII
字符post
参数无长度限制,且无类型限制
安全性上区别:
get
安全性较差,因为发送数据是URL
的一部分,在发送密码或其他敏感信息时不能用get
请求post
较安全因为参数不会被保存在浏览器历史或web
服务器日志中
10. 浮动元素有什么特性
- 脱离文档流
- 浮动元素后面如果不是块级元素,后面的元素将会和它并排(除非设置元素宽度,或者放不下时会自动换行)
- 浮动元素的上一个元素如果没有浮动,浮动只会在当前行浮动。当浮动元素遇到浮动元素将同行浮动
- 元素设置了position:absolute或position:fixed时浮动会被忽略
- 浮动会引起父元素高度塌陷
- 浮动元素会被后一个元素的margin-top影响