overflow:hidden——溢出,坍塌,清除浮動

overflow:hidden是overflow屬性的一個神奇用法,它可以幫助我們隱藏溢出的元素,清除浮動和解除坍塌。
下面的代碼將作為基本演示代碼:
CSS樣式:

.container{
    background-color: black;
}
.div1{
    background-color: aqua;
    width: 100px;
    height: 100px;
}
.div2{
    background-color: red;
    width: 100px;
    height: 100px;
}

html內(nèi)容:

<div class="container">
    <div class="div1"></div>
    <div class="div2"></div>
</div>

程序運(yùn)行效果:


1.使用overflow:hidden隱藏溢出

當(dāng)父div擁有固定的高度時,比如height:500px,我們使用overflow:hidden來隱藏溢出。
當(dāng)使用div+css布局時,會出現(xiàn)很多的div嵌套——父div內(nèi)嵌套一個或多個的子div,默認(rèn)情況下,父div的高度是auto——它可以被子div任意的撐大。然而父div也可以有固定的高度(或?qū)挾?,比如height:500px,那么如果子div的高度超過了這個值,在默認(rèn)情況下,子div會超出父div的束縛,這就是溢出。我們可以通過設(shè)置父div的CSS屬性——overflow來對子div進(jìn)行控制。這里使用overflow:hidden來隱藏子元素溢出的部分。

2.使用overflow:hidden清除浮動

當(dāng)父元素的高h(yuǎn)eight:auto時,我們使用overflow:hidden清除浮動
當(dāng)我們?yōu)閐iv1和div2加上一個屬性:float:left后,我們會發(fā)現(xiàn):背景色為黑色父div消失了,這是因?yàn)椋?浮動的元素脫離文檔元素, 不占據(jù)空間。 不浮動的元素會直接無視掉這個元素:父div無視了自己的兩個孩子,其高度為0(因?yàn)槲覀儧]有設(shè)置父div的高度),所以父div沒有顯現(xiàn)。



想讓父div“寬容的”接受自己的兩個孩子有兩個辦法:

  1. 第一個就是讓父親也浮動起來,我們試著給父div添加一個CSS屬性:float:right,會發(fā)現(xiàn)兩個顏色塊出現(xiàn)在了屏幕的右邊,依然沒有父div的身影,然而通過開發(fā)人員工具不難看出父div已經(jīng)包容子div 。


    這是因?yàn)楦拥膁iv已經(jīng)失去了其“獨(dú)霸一行”的能力,我們需要手動為父div設(shè)置一個寬度,比如width:500px,之后可以看到:

    (2)第二種就是為父親添加overflow:hidden屬性用以清除浮動

    .container{
    background-color: black;
    overflow:hidden;
    }

這時的效果如圖所示:

這里寫圖片描述
總結(jié): (1)(2)一個使用了都浮動的戰(zhàn)略,一個使用了清除浮動的戰(zhàn)略使父div寬容的接受了子div,兩者的區(qū)別在于都浮動需要額外設(shè)定父div的寬度,因?yàn)楦悠饋淼膁iv失去了div獨(dú)占一行的特性,而清除浮動的父div仍然霸道。

3.解除坍塌

可以使用overflow:hidden解除margin坍塌,當(dāng)然了,坍塌是不分父div的高度是否固定的 首先要知道什么叫做坍塌: 我們?yōu)閐iv1添加一個屬性:margin-top:50px,我們想象中效果是這樣的:

但實(shí)際上是這樣的(這是開發(fā)人員工具下的效果):
可以看出,div1的上端距離瀏覽器的頂部有50px而不是對它的父div,更可怕的是它甚至向下頂了它的父div,這就是坍塌。這里多說一句:這種坍塌只針對于父親的第一個兒子,div2設(shè)置margin-top:50px則不會有任何不妥。 (1)我們可以為父div添加overflow:hidden解決這個問題:

.container{
    background-color: black;
    overflow: hidden;
}

效果如圖所示:

(2)會思考的讀者一定會考慮浮動能不能解決這個煩人的問題,這里為了排除overflow:hidden對未定高度的父div的影響,我們?yōu)楦竏iv設(shè)置一個高度:

.container{
    background-color: black;
    height: 200px;
}

我們?yōu)樗凶觗iv添加一個浮動屬性(比如float:left),顯而易見,只要是浮動的子div就會完全避免坍塌的問題(PS:無論父div是否浮動):

總結(jié) 可以使用overflow:hidden來解除坍塌,浮動的div根本不用考慮坍塌。

4.總結(jié)

overflow:hidden的用法在溢出和清除浮動上主要針對父div是否有固定的高度加以區(qū)分。它還額外肩負(fù)了解除坍塌的重任。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,190評論 1 92
  • 浮動 CSS允許浮動任何元素。 浮動元素 首先,會以某種方式將浮動元素從文檔的正常流中刪除,不過它還是會影響布局。...
    exialym閱讀 1,315評論 0 6
  • relative:生成相對定位的元素,通過top,bottom,left,right的位置相對于其正常位置進(jìn)行定位...
    zx9426閱讀 1,081評論 0 2
  • 建議在PC端閱讀本文面向?qū)ο螅簩?biāo)題中的概念基本不了解或僅僅聽說過名字的人。如果已有一定了解請直接拉到最下看推薦閱...
    粉腸w閱讀 652評論 0 0
  • CSS里浮動float是個概念比較曖昧的屬性,擼主最早對浮動float的認(rèn)識是基于布局的,認(rèn)為float元素就是用...
    張歆琳閱讀 40,233評論 23 152

友情鏈接更多精彩內(nèi)容