CSS盒模型
当你的浏览器展现一个元素时,这个元素会占据一定的空间。
CSS 框模型 (Box Model) 规定了元素框处理元素内容(content)、内边距(padding)、边框(border) 和 外边距(margin) 的方式。
CSS盒模型分为标准盒模型和IE盒模型两种。
标准模型

从上图可以看出,标准模型中width和height只包含content。
IE模型

从上图可以看出,IE模型中width和height是包括border、padding、content。
如何设置盒模型
通过CSS中box-sizing
这个属性
-
content-box
:默认值,标准盒模型 -
border-box
: IE盒模型 -
inherit
: 从父元素继承
如何获取盒模型对应的宽和高
通过JS获取盒模型对应的宽和高,有以下几种方法:
为了方便书写,以下用dom来表示获取的HTML的节点。
- dom.style.width/height
这种方式只能取到dom元素内联样式所设置的宽高,也就是说如果该节点的样式是在style标签中或外联的CSS文件中设置的话,通过这种方法是获取不到dom的宽高的。
- dom.currentStyle.width/height
这种方式获取的是页面渲染完成后的结果,就是说不管是哪种方式设置的样式,都能获取到。但是只有IE浏览器支持。
- window.getComputedStyle(dom).width/height
这种方式的原理和2是一样的,这个可以兼容更多的浏览器,通用性好一些。
- dom.getBoundingClientRect().width/height
这种方式是根据元素在视窗中的绝对位置来获取宽高的
- dom.offsetWidth/offsetHeight
最常用的,也是兼容最好的。
边距重叠
普通文档流中框的垂直外边距会发生外边距合并,合并后的外边距高度是外边距中较高的那个边距值。具体可以参考css 外边距合并
解决边距重叠
通过使用BFC可以解决边距重叠问题
BFC问题具体看另一篇文章BFC详解
网友评论