页面中的每一个元素均可以当作一个盒子,盒子里面能够装其余盒子,层层嵌套。html 标签就是最外面的大盒子。每一个盒子由内向外分别是 content, padding, border, margin 。css
盒模型有两种,标准盒模型 和 IE盒模型 。主要区别是它们的 width 和 height 不一样html
盒子宽高是 content(内容) 的宽高
盒子宽高是 border + padding + content 的宽高
浏览器默认使用标准盒模型,在 ie8+ 中 能够经过设置 box-sizing
样式属性改变盒模型
<br/>box-sizing
:浏览器
content-box
---> 标准盒模型(默认)border-box
---> IE 盒模型如下 domElement 是表示 HTML 元素的伪代码
domElement.style.width/height
只能获取内联样式中的宽高
domElement.currentStyle.width/height
获取的是浏览中渲染完成后元素的宽高,只有 IE 浏览器支持
window.getComputedStyle(domElement).width/height
和方式2同样,但能够兼容更多浏览器
domElement.offsetWidth/offsetHeight
无论使用的什么盒模型,获取的都是 IE盒模型 的宽高
相邻元素在竖直方向上的外边距在相遇时会发生合并,合并后的外边距的高度等于两个外边距中较大的那个值。
Block Formatting Context (块级格式化上下文)
BFC 能够简单地理解为某个元素的一个 CSS 属性,只不过这个属性不能被开发者显式的修改,拥有这个属性的元素对内部元素和外部元素会表现出一些特性,这就是BFC。dom
float
的值不为 none
(浮动元素)overflow
的值不为 visible
display
的值为 inline-block
、table-caption
、 table-cell
、flex
、inline-flex
positon
的值为 absolute
或 fixed
<html>
(根元素)margin
决定 。同一个BFC中的两个相邻的 box 仍是会产生外边距重叠问题float + BFC 两栏布局:布局
<div class="parent"> <div class="left">left</div> <div class="right">right</div> </div> <style> .left { float: left; width: 100px; background-color: blue; } .right { overflow: hidden; // 触发 BFC background-color: green; } </style>
阅读原文
<br/>
参考文章:
关于CSS-BFC深刻理解
css 盒子模型理解post