溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

css中什么是父元素高度塌陷

發(fā)布時(shí)間:2020-09-15 13:44:51 來(lái)源:億速云 閱讀:213 作者:小新 欄目:web開(kāi)發(fā)

這篇文章將為大家詳細(xì)講解有關(guān)css中什么是父元素高度塌陷,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

首先得回答什么是父元素高度塌陷:

在文檔流中,父元素的高度默認(rèn)是被子元素?fù)伍_(kāi)的,也就是子元素多高,父元素就多高。但是當(dāng)子元素設(shè)置浮動(dòng)之后,子元素會(huì)完全脫離文檔流,此時(shí)將會(huì)導(dǎo)致子元素?zé)o法撐起父元素的高度,導(dǎo)致父元素的高度塌陷。

一下是舉例說(shuō)明:

  <p class="box1">
        <p class="box2"></p>
    </p>
<style type="text/css">     
        .box1{
            border: 10px red solid;
            }

        .box2{
            background-color: yellow;
            width: 100px;
            height: 100px;
            float: left;
            
           }
    </style>

css中什么是父元素高度塌陷

清除浮動(dòng)詳解

清除浮動(dòng)主要是為了解決由于浮動(dòng)元素脫離文流導(dǎo)致的元素重疊或者父元素高度坍塌的問(wèn)題,而這兩個(gè)問(wèn)題分別對(duì)應(yīng)了需要清除浮動(dòng)的兩種種情況:清除前面兄弟元素浮動(dòng)和閉合子元素浮動(dòng)(解決父元素高度坍塌)。

清除前面兄弟元素浮動(dòng)

清除前面兄弟元素浮動(dòng)很簡(jiǎn)單,只需要在不想受到浮動(dòng)元素影響的元素上使用 clear:both 即可, HTML & CSS 代碼如下:

<p class="fl">我是左浮動(dòng)元素</p>
<p class="fr">我是右浮動(dòng)元素</p>
<p class="cb">我不受浮動(dòng)元素的影響</p>
.fl {
    float: left;
}
.fr {
    float: right;
}
.cb {
    clear: both;
}

在 CSS2 以前,clear 的原理為自動(dòng)增加元素的上外邊距(margin-top)值,使之最后落在浮動(dòng)元素的下面。在 CSS2.1 中引入了一個(gè)清除區(qū)域(clearance)——在元素上外邊距之上增加的額外間距,使之最后落在浮動(dòng)元素的下面。所以如果需要設(shè)置浮動(dòng)元素與 clear 元素的間距,得設(shè)置浮動(dòng)的元素的 margin-bottom,而不是 clear 元素的 margin-top。

demo 可見(jiàn):clear 清除浮動(dòng)

閉合子元素浮動(dòng)

我們知道,在計(jì)算頁(yè)面排版的時(shí)候,如果沒(méi)有設(shè)置父元素的高度,那么該父元素的高度是由他的子元素高度撐開(kāi)的。但是如果子元素是設(shè)置了浮動(dòng),脫離了文檔流,那么父元素計(jì)算高度的時(shí)候就會(huì)忽略該子元素,甚至當(dāng)所有子元素都是浮動(dòng)的時(shí)候,就會(huì)出現(xiàn)父元素高度為 0 的情況,這就是所謂的父元素高度坍塌問(wèn)題。為了能讓父元素正確包裹子元素的高度,不發(fā)生坍塌,我們需要閉合子元素的浮動(dòng)。

一般我們有兩種辦法可以用來(lái)閉合子元素浮動(dòng):

  • 給最后一個(gè)元素設(shè)置 clear: both

  • 給父元素新建一個(gè) BFC(塊格式化上下文)

clear:both

由于我們最后一個(gè)元素使用 clear:both,所以該元素就能不受浮動(dòng)元素影響出現(xiàn)在父元素的最底部,而父元素計(jì)算高度的時(shí)候需要考慮到這個(gè)正常元素的位置,所以高度自然包裹到了最底部,也就沒(méi)有了坍塌。

對(duì)于這個(gè)方法,以前我們是利用新增一個(gè)空元素(<b><span><p> 等)來(lái)實(shí)現(xiàn)的,如下:

<p class="container">
    <p class="box"></p>
    <span class="clear-box"></span>
</p>
.box {
    float: left;
}
.clear-box {
    clear: both;
}

雖然這種辦法比較直觀,但是不是很優(yōu)雅,因?yàn)樵黾恿艘粋€(gè)無(wú)用的空白標(biāo)簽,比較冗余而且不方便后期維護(hù)(一般不太建議使用該辦法)。所以后期有了通過(guò)父元素的偽元素(::after)實(shí)現(xiàn)的著名 clearfix 方法,代碼如下:

<p class="container clearfix">
    <p class="box"></p>
</p>
.clearfix::after {
    content:"";
    display:table;
    clear: both;
}

上面方法給父元素增加一個(gè)專門用于處理閉合子元素浮動(dòng)的 clearfix 類名,該類使用 ::after 偽元素類選擇器增加一個(gè)內(nèi)容為空的結(jié)構(gòu)來(lái)清除浮動(dòng),可能你們比較疑惑的是為什么要設(shè)置 display:table 屬性,這其實(shí)涉及到一個(gè)比較復(fù)雜的進(jìn)化過(guò)程,具體可以參考資料——clearfix浮動(dòng)進(jìn)化史

新建 BFC

該方法的原理是:父元素在新建一個(gè) BFC 時(shí),其高度計(jì)算時(shí)會(huì)把浮動(dòng)子元素的包進(jìn)來(lái)。

下面我們以實(shí)例為證:如下圖我們的圖片為浮動(dòng),父元素 article 的高度就出現(xiàn)了坍塌(沒(méi)有包括圖片),而根元素 HTML (默認(rèn)情況下我們的根元素 HTML 就是一個(gè) BFC)的高度則包括了圖片的高度。

css中什么是父元素高度塌陷

css中什么是父元素高度塌陷

既然新建一個(gè) BFC 可以解決父元素高度坍陷問(wèn)題,那就好辦了,下面這些都可以創(chuàng)建一個(gè) BFC :

  • 根元素或其它包含它的元素

  • 浮動(dòng) (元素的 float 不是 none)

  • 絕對(duì)定位的元素 (元素具有 position 為 absolute 或 fixed)

  • 內(nèi)聯(lián)塊 inline-blocks (元素具有 display: inline-block)

  • 表格單元格 (元素具有 display: table-cell,HTML表格單元格默認(rèn)屬性)

  • 表格標(biāo)題 (元素具有 display: table-caption, HTML表格標(biāo)題默認(rèn)屬性)

  • 塊元素具有overflow ,且值不是 visible

  • display: flow-root

雖然有這么多方法可用,可我們常用的就是 overflow: hidden,代碼如下:

<p class="container">
    <p class="box"></p>
</p>
.container {
    overflow: hidden;
}
.box {
    float: left;
}

關(guān)于css中什么是父元素高度塌陷就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI