浮動塌陷和margin塌陷

浮動塌陷

使用float浮動的時候,父元素的高度變成0。

    <style>
        * {
            margin: 0;
            padding: 0;
        }

        ul li {
            list-style: none;
            width: 200px;
            height: 200px;
            background-color: turquoise;
            float: left;
            margin: 0 20px;
        }

        p {
            text-align: center;
        }

        .red{
            width: 800px;
            height: 50px;
            background-color: red;
        }
    </style>

    <ul>
        <li></li>
        <li></li>
        <li></li>
    </ul>
    <div class="red"></div>

效果如下:


image.png

ul沒有定義高度,繼承了li的高度,但是浮動會導致ul的高度為0,因此下面的盒子就自動上去了。

解決方案

  • 給父元素設置高度
ul{
  hieght:200px
}
  • 給父元素加一個沒用的子元素 給這個子元素設置清除浮動的屬性clear;both
 <ul>
        <li></li>
        <li></li>
        <li></li>
        <div style="clear:both"><div>
    </ul>

  • 給父元素設置overflow溢出隱藏
ul{
  overflow:hidden;
}
  • 使用after偽類選擇器 :
ul:after{ 
   content:'';
   clear:both; 
   display:block;   
   visibility:hidden; 
}

效果圖


image.png

margin塌陷

發生在兩個盒子嵌套的時候,父盒子和子盒子同時設置margin的時候會出現實際的magin取的是兩個margin的最大值

    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .father{
            margin-top:150px;
            width: 500px;
            height: 200px;
            background-color: green;
        }

        .son{
            margin-top: 70px;
            width: 200px;
            height: 500px;
            background-color: red;
        }
       
    </style>

    <div class="father">
        <div class="son">

        </div>
    </div>
image.png

此時父盒子上邊距是兩者中的最大值也就是150px,而盒子沒有撐開父盒子,綠色的子元素設置的margin失效了

解決方案

  • 給父元素一個邊框border(如果你要邊框就給個邊框,不需要邊框就給一個透明色的邊框)
      .father{
            margin-top:150px;
            width: 500px;
            height: 200px;
            background-color: green;
            border: 1px solid rgba(0, 0, 0, 0);
            box-sizing: border-box;
        }

      .son{
            margin-top: 70px;
            width: 200px;
            height: 500px;
            background-color: red;
        }
  • 給父元素增加
overflow: hidden
  • 給父元素設置
display:fixed;
  • 給父元素添加
display: table;
  • 給子元素的前面添加一個兄弟元素屬性為:
content:'';
overflow:hidden;

效果圖

image.png
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、CSS入門 1、css選擇器 選擇器的作用是“用于確定(選定)要進行樣式設定的標簽(元素)”。 有若干種形式的...
    寵辱不驚丶歲月靜好閱讀 1,618評論 0 6
  • 什么是盒子? CSS處理網頁時,它認為每個元素都包含在一 個不可見的盒子里。 我們只需要將相應的盒子擺放到網頁中相...
    咻咻咻滴趙大妞閱讀 938評論 0 0
  • 概述: CSS 規則由兩個主要的部分構成:選擇器,以及一條或多條聲明: 一、注釋: CSS注釋以 "/*" 開始,...
    進入web前端閱讀 2,031評論 0 8
  • CSS 是什么 css(Cascading Style Sheets),層疊樣式表,選擇器{屬性:值;屬性:值}h...
    崔敏嫣閱讀 1,508評論 0 5
  • 概述 在網易云課堂學習李南江老師的《從零玩轉HTML5前端+跨平臺開發》時,所整理的筆記。筆記內容為根據個人需求所...
    墨荀閱讀 2,367評論 0 7