頁面中的每一個元素均可以當作一個盒子,盒子裏面能夠裝其餘盒子,層層嵌套。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