高度塌陷
(此為從學習視頻中摘抄,如有雷同,純屬巧合)
高度塌陷
在文檔流中,父元素的高度默認是被子元素撐開的,
也就是子元素多高,父元素就多高
但是當為子元素設置浮動以后,子元素會完全脫離文檔流,
此時將會導致子元素無法撐起父元素的高度,導致父元素的高度塌陷
由于父元素的高度塌陷了,則父元素下的所有元素都會向上移動,這樣將會導致頁面布局混亂
所以在開發中,一定要避免出現高度塌陷的問題
我們可以將父元素的高度寫死,以避免塌陷的問題出現,
但是一旦高度寫死,父元素的高度將不能自動適應子元素的高度,所以這種方案不推薦使用
解決高度塌陷1
根據w3c的標準,在頁面中元素都有一個隱含的屬性叫做Block Formatting Context
簡稱BFC,該屬性可以設置打開或者關閉,默認是關閉的。
當開啟元素的BFC以后,元素將會具有如下的特性:
1.父元素的外邊距不會和子元素重疊
2.開啟BFC的元素不會被浮動元素所覆蓋
3.開啟BFC的元素可以包含浮動的子元素
如何開啟元素的BFC
1.設置元素浮動
-使用這種方式開啟,雖然可以撐開父元素,但是會導致父元素的寬度丟失
而且使用這種方式也會導致下邊的元素上移,不能解決問題
2.設置元素絕對定位
3.設置元素為inline-block
可以解決問題,但是會導致寬度丟失,不推薦使用這種方式
4.將元素的overflow設置為一個非visible的值
推薦方式:將overflow設置為hidden是副作用最小的開啟BFC的方式
例:overflow: hidden;
但是在IE6及以下的瀏覽器并不支持BFC,所以使用這種方式不能兼容IE6
在IE6中雖然沒有BFC,但是具有一個隱含屬性叫hasLayout
該屬性的作用和BFC類似,所以在IE6瀏覽器可以通過開hasLayout來解決該問題
開啟方式很多,直接使用一種副作用最小的:
直接將元素的zoom設置為1即可
zoom表示放大的意思,后邊跟著一個數值,寫幾就將元素放大幾倍
zoom:1 表示不放大元素,但是通過該樣式可以開啟hasLayout
zoom這個樣式,只在IE中支持,其他瀏覽器都不支持
例:zoom: 1;
在IE6中,如果為元素指定了一個寬度,則會默認開啟hasLayout
清除浮動
由于受到box1浮動的影響,box2整體向上移動100px
我們有時希望清除掉其他元素浮動對當前元素產生的影響,這時可以使用clear來完成功能
clear可以用來清除其他浮動元素對當前元素的影響
可選值:
none,默認值,不清除浮動
left,清除左側浮動元素對當前元素的影響
right,清除右側浮動元素對當前元素的影響
both,清除兩側浮動元素對當前元素的影響
??????????清除對他影響最大的那個元素的浮動
清除box1浮動對box2產生的影響,在box2中設置
清除浮動以后,元素會回到其他元素浮動之前的位置
例:clear: left;
解決高度塌陷2
可以直接在高度塌陷的父元素的最后,添加一個空白的div
由于這個div并沒有浮動,所以他是可以撐開父元素的高度的,
然后在對其進行清除浮動,這樣可以通過這個空白的div來撐開父元素的高度
基本沒有副作用
使用這種方式,雖然可以解決問題,但是會在頁面中添加多余的結構
例:
通過after偽類,選中box1的后邊
可以通過after偽類向元素的最后添加一個空白的塊元素,然后對其清除浮動,
這樣做和添加一個div的原理一樣,可以達到一個相同的效果,
而且不會在頁面中添加多余的div,這是我們最推薦使用的方式,而且沒有副作用
例:
總結
- 上一篇: 这5个“减压”小妙招,在你负重前行的路上
- 下一篇: 基于VLC的本地视频播放器