CSS高度塌陷

  • 高度塌陷問題

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

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>高度塌陷</title>
<style type="text/css">     
 .box1{
    border: 10px red solid;
}

.box2{
    background-color: yellow;
    width: 100px;
    height: 100px;
    float: left;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
</div>
</body>
</html>

解決高度塌陷

  • 方法

根據(jù)W3C的標準,在頁面中元素都一個隱含的屬性叫做Block Formatting Context(塊的格式化環(huán)境)簡稱BFC,該屬性可以設(shè)置打開或者關(guān)閉,默認是關(guān)閉的

當(dāng)開啟元素的BFC以后,元素將會具有如下的特性:

1.父元素的垂直外邊距不會和子元素重疊
2.開啟BFC的元素不會被浮動元素所覆蓋
3.開啟BFC的元素可以包含浮動的子元素

如何開啟元素的BFC

1.設(shè)置元素浮動

  • 使用這種方式開啟,雖然可以撐開父元素,但是會導(dǎo)致父元素的寬度丟失,而且使用這種方式也會導(dǎo)致下邊的元素上移,不能解決問題
    2.設(shè)置元素絕對定位
    3.設(shè)置元素為inline-block
  • 可以解決問題,但是會導(dǎo)致寬度丟失,不推薦使用這種方式
    4.將元素的overflow設(shè)置為一個非visible的值
    推薦方式:將overflow設(shè)置為hidden是副作用最小的開啟BFC的方式
<!DOCTYPE html>
<html lang="en">
 <head>
 <meta charset="UTF-8">
 <title>高度塌陷</title>
 <style type="text/css">
.box1{
    border: 10px red solid;

    overflow: hidden;
    zoom: 1;
}
.box2{
    width: 100px;
    height: 100px;
    background-color: blue;
    float: left;
}
.box3{
    height: 100px;
    background-color: yellow;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
</div>
<div class="box3"></div>
</body>
</html>

方法二

可以直接在高度塌陷的父元素的最后,添加一個空白的div,由于這個div并沒有浮動,所以他是可以撐開父元素的高度的
然后再對其進行清除浮動,這樣可以通過這個空白的div來撐開父元素的高度,基本沒有副作用
使用這種方式雖然可以解決問題,但是會在頁面中添加多余的結(jié)構(gòu)

  <!DOCTYPE html>
  <html lang="en">
  <head>
<meta charset="UTF-8">
<title>解決高度塌陷方法2</title>
<style type="text/css">
.box1{
    border: 1px solid red;
}
.box2{
    width: 100px;
    height: 100px;
    background-color: blue;
    float: left;
}
.clear{
    clear: both;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2"></div>
<div class="clear"></div>
</div>
</body>
</html>

方法三

可以通過after偽類向元素的最后添加一個空白的塊元素,然后對其清除浮動,
這樣做和添加一個div的原理一樣,可以達到一個相同的效果,
而且不會在頁面中添加多余的div,這是我們最推薦使用的方式,幾乎沒有副作用

  <!DOCTYPE html>
  <html lang="en">
      <head>
      <meta charset="UTF-8">
      <title>解決高度塌陷方法3</title>
      <style type="text/css">
    .box1{
        border: 1px solid red;
    }
    .box2{
        width: 100px;
        height: 100px;
        background-color: blue;
        float: left;
    }
    .clearfix:after{
        content: "";
        display: block;
        clear: both;
    }
    .clearfix{
        zoom: 1;
    }
</style>
</head>
<body>
  <div class="box1 clearfix">
    <div class="box2"></div>
  </div>
</body>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標簽?zāi)J的外補...
    _Yfling閱讀 14,162評論 1 92
  • 高度塌陷問題: 在文檔流中,父元素的高度默認是被子元素撐開的,也就是子元素多高,父元素就多高。但是當(dāng)子元素設(shè)置浮動...
    青_a2c4閱讀 246評論 0 1
  • 1. 前言 前端圈有個“?!保涸诿嬖嚂r,問個css的position屬性能刷掉一半人,其中不乏工作四五年的同學(xué)。在...
    YjWorld閱讀 4,919評論 5 15
  • 今天百度了一下網(wǎng)上關(guān)于解決高度塌陷的問題,也來做個匯總吧! 首先,應(yīng)該解釋一下什么是高度塌陷吧~,那么什么是高度塌...
    cloudstate閱讀 1,269評論 0 0
  • 以前上班時,老板是個很有大愛的人。她經(jīng)常給我們培訓(xùn),無論是技術(shù)還是心態(tài),都孜孜不倦。 然后,就戲劇化了。 有的人表...
    蘇醒護膚老師閱讀 980評論 0 0

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