前端面试题总结三
一 以下哪些属性脱离了文档流
A. static B. relative C. absolute D. fixed E. float
答案是: B.D.E
- static:无特殊定位,对象遵循正常文档流。top,right,bottom,left等属性不会被应用。
- relative:对象遵循正常文档流,但将依据top,right,bottom,left等属性在正常文档流中偏移位置。而其层叠通过z-index属性定义。
- absolute:对象脱离正常文档流,使用top,right,bottom,left等属性进行绝对定位。而其层叠通过z-index属性定义。
- fixed:对象脱离正常文档流,使用top,right,bottom,left等属性以窗口为参考点进行定位,当出现滚动条时,对象不会随着滚动。而其层叠通过z-index属性定义。
-
可以说是float是部分脱离文档流,而absolute是完全脱离文档流。也就是说,使用float属性时,其他元素会无视这个float元素,但是其他元素内的文本依然会为这个元素让出位置,环绕在周围(感觉类似于word文字环绕功能),所以称为部分无视。而使用absolute脱离文档流的元素,其他盒子无论是本身还是盒子内的文本都会无视这个元素,也就是完全脱离文档流。
二 以下的输出结果
function fn(){
var a=b=5
}
fn()
console.log(a,b)
答案是:报错Uncaught ReferenceError: a is not defined
如果改为如下输出结果是什么呢
function fn(){
a=b=5
}
fn()
alert(a)
alert(b)
答案是:5,5
因为没有声明默认变量a和b是全局的
var a
function fn(){
a=b=5
}
fn()
alert(a)
alert(b)
答案是:5,5
第一个a的输出是5很正常,但是为什么b的输出也是5呢,因为赋值是从右往左进行的,也就是说这一行先执行b=1,这时候b就是全局变量了,没有被var过。然后是var a = b;
a被声明了,是局部变量。或者说var a=b=1;计算优先级 创建全局变量b=1,再在函数中定义一个变量a,a=b
三 以下的输出顺序
console.log(‘one’)
setTimeout(function(){
console.log(‘two’)
},0)
console.log(‘three’)
答案是:one three two
四 css常见的水平居中问题
这个答案就不做介绍了,方法太多了,有知道宽高的,有不知道宽高的,如用translate等,还有flex布局方法的table布局方法的等等