一、谈一谈你对CSS盒模型的认识
专业的面试,一定会问 CSS 盒模型。对于这个题目,我们要回答一下几个方面:
(1)基本概念:content、padding、margin。
(2)标准盒模型、IE盒模型的区别。不要漏说了IE盒模型,通过这个问题,可以筛选一部分人。
(3)CSS如何设置这两种模型(即:如何设置某个盒子为其中一个模型)?如果回答了上面的第二条,还会继续追问这一条。
(4)JS如何设置、获取盒模型对应的宽和高?这一步,已经有很多人答不上来了。
(5)实例题:根据盒模型解释边距重叠。前四个方面是逐渐递增,第五个方面,却鲜有人知。
(6)BFC(边距重叠解决方案)或IFC。如果能回答第五条,就会引出第六条。BFC是面试频率较高的。
总结:以上几点,从上到下,知识点逐渐递增,知识面从理论、CSS、JS,又回到CSS理论。
二、接下来,我们把上面的六条,依次讲解
问题(1)content就是内容区域,padding是内边距,margin是外边距,width和height则要根据是什么模型决定
问题(2)标准盒模型和IE盒子模型
CSS盒模型和IE盒模型的区别:
在 标准盒子模型中,width 和 height 指的是内容区域的宽度和高度。增加内边距、边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸。
IE盒子模型中,width 和 height 指的是内容区域+border+padding的宽度和高度。
问题(3)CSS如何设置这两种模型:
设置当前盒子为 标准盒模型(默认): box-sizing: content-box;
设置当前盒子为 IE盒模型 : box-sizing: border-box;
问题(4)JS如何设置、获取盒模型对应的宽和高
方式一:通过DOM节点的 style 样式获取:
(1)element.style.width/height;
<div id="div1" style="width: 100px">111</div>
<div id="div2">222</div>
<script>
var oDiv1 = document.getElementById("div1");
console.log(oDiv1.style.width ) ;
</script>
缺点:通过这种方式,只能获取行内样式,不能获取内嵌的样式和外链的样式。
方式二(通用型)
// window.getComputedStyle(element).width/height;
<div id="div1" >111</div>
<div id="div2">222</div>
<script>
var oDiv1 = document.getElementById("div1");
console.log( window.getComputedStyle(oDiv1).width ) ;
</script>
这种方式能兼容 Chrome、火狐。是通用型方式。
方式三(IE独有的):
//element.currentStyle.width/height;
var oDiv1 = document.getElementById("div1");
console.log( oDiv1.currentStyle.width);
和方式二相同,但这种方式只有IE独有。获取到的是运行完之后的宽高(三种css样式都可以获取)。
方式四:
// element.getBoundingClientRect().width/height;
var oDiv1 = document.getElementById("div1");
console.log(oDiv1.getBoundingClientRect().width);
这种方式获得到的宽度是内容content+padding+border
此 api 的作用是:获取一个元素的绝对位置。绝对位置是视窗 viewport 左上角的绝对位置。
此 api 可以拿到四个属性:left、top、width、height。
上面的四种方式,要求能说出来区别,以及哪个的通用型更强。
问题(5)margin塌陷/margin重叠:
网友评论