PS:內容比較基礎,目的只是覆蓋面試知識點,大佬能夠
history.back(-1)
css
頁面上顯示的每一個元素(包括內聯元素)均可以看做一個盒子,即盒模型( box model )web
盒模型由 4 部分組成,從內到外分別是:content padding border margin
面試
W3C 標準盒模型一個元素的寬度(高度以此類推)應該這樣計算:瀏覽器
1ui 2spa 3code |
一個元素的寬度 = contentblog 盒子總寬度 = margin-left + border-left + padding-left + width + padding-right + border-right + margin-rightip |
而IE 怪異盒模型一個元素的寬度(高度以此類推)倒是這樣計算的:ci
1 2 3 |
一個元素的寬度 = content + padding + border 盒子總寬度 = margin-left + width + margin-right |
box-sizing
1 2 3 4 5 |
// W3C 標準盒模型(瀏覽器默認) box-sizing: content-box; // IE 怪異盒模型 box-sizing: border-box; |
當咱們設置 box-sizing: border-box;
時,border
和 padding
就被包含在了寬高以內,和 IE 盒模型是同樣的。
因此,爲了不你同一份 css 在不一樣瀏覽器下表現不一樣,最好加上:
1 2 3 4 5 |
*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
<style> * { margin: 0; padding: 0; } #box { width: 100px; height: 100px; padding: 50px; border: 5px solid red; margin: 50px; } </style> <div id="box" style=""></div> <script> let box = document.getElementById('box') // 只能取到內聯樣式的寬高 console.log('style:' + box.style.width) // 100px // 內聯樣式和外聯樣式的寬高都能取到,但只有 IE 支持 console.log('currentStyle:' + box.currentStyle.width) // 100px // 內聯樣式和外聯樣式的寬高都能取到,幾乎全部主流瀏覽器都支持 console.log('getComputedStyle:' + getComputedStyle(box).width) // 100px // 內聯樣式和外聯樣式的寬高都能取到,幾乎全部主流瀏覽器都支持,取到的是盒子總寬度 console.log('getBoundingClientRect:' + box.getBoundingClientRect().width) // 210 </script> |
BFC
BFC:塊級元素格式化上下文
IFC:內聯元素格式化上下文(面試不常考)
在 BFC 的垂直方向上,邊距會發生重疊
BFC 區域不會與 浮動區域重疊
BFC 在頁面上是一個獨立的容器,與其餘元素互不影響
計算 BFC 高度時,浮動元素也會參與計算
float
值不爲 none
,只要設置了浮動,當前元素就建立了一個 BFC
position
值不爲static
,只要設置了定位,當前元素就建立了一個 BFC
display
值不爲默認,只要設置了display,當前元素就建立了一個 BFC
overflow
值不爲 visible
,只要設置了overflow,當前元素就建立了一個 BFC
1 |
overflow: hidden; |
解決邊距重疊問題
當元素都設置了 margin
邊距時,margin
將取最大值。爲了避免讓邊距重疊,能夠給子元素加一個父元素,並設置該父元素爲 BFC
1 2 3 4 5 6 7 8 9 |
<div class="box" id="box"> <p>Lorem ipsum dolor sit.</p> <div style="overflow: hidden;"> <p>Lorem ipsum dolor sit.</p> </div> <p>Lorem ipsum dolor sit.</p> </div> |
侵佔浮動元素的位置
設置非浮動元素爲 BFC 便可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<style> .one { float: left; width: 100px; height: 100px; background-color: pink; } .two { height: 200px; background-color: red; /* 設置 BFC */ overflow: hidden; } </style> <div class="one"></div> <div class="two"></div> |
清除浮動
BFC 原理第 4 條:計算 BFC 高度時,浮動元素也會參與計算
固然,清除浮動還有其餘最佳實踐,這裏只是分析場景。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<style> .one { background-color: pink; /* 設置 BFC */ overflow: hidden; } .two { float: left; } </style> <div class="one"> <div class="two">hello world</div> </div> |