解決高度塌陷問題

在文檔流中,父元素的高度默認是被子元素撐開的
當爲子元素設置浮動後,子元素會完全脫離文檔流
此時會導致子元素無法撐起父元素的高度,導致父元素的高度塌陷
由於父元素的高度塌陷了,則父元素下的所有元素都會向上移動, 導致頁面佈局混亂
所以在開發中需要避免出現高度塌陷的問題

如何開啓元素的BFC
1.設置元素浮動
-使用這種方式開啓,雖然可以撐開父元素,但是會導致父元素的寬度丟失,
而且使用這種方式也會導致下邊的元素上移,不能解決
2.設置元素絕對定位
3.設置元素爲inline-block
-可以解決問題,但是會導致寬度丟失,不推薦使用
4.將元素的overflow設置爲一個非visible的值

.box1{
            /* 爲box1設置一個邊框 */
            border: 10px red solid;     
            /* 
            zoom只在IE中支持,其他瀏覽器不支持
            
             */
            zoom: 1;
            overflow:hidden;
            
        }
        .box2{
            width: 100px;
            height: 100px;
            background-color: blue; 
            float: left;  
        }

clear可以用來清除其他元素浮動對當前元素的影響
可選值:
none,默認值,不清除浮動
left,清除左側元素對當前元素的影響
right,清除右側
both,清除兩側元素對當前元素的影響
清除對他影響對最大的那個元素的浮動

解決高度塌陷方案二:
可以直接在高度塌陷的父元素的最後,添加一個空白的div
由於這個div沒有浮動,所以是可以撐開父元素的高度的
然後再進行清除浮動,可以通過這個空白的div來撐開父元素的高度
基本沒有副作用
這種方式雖然可以解決問題,但是會在頁面中添加多餘的結構

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></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>

最優解決方法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
    <style type="text/css">
        .box1{
            border: 1px solid red;
        }    
        .box2{
            width: 100px;
            height: 100px;
            background-color: blue;
            float: left;
        }
        /* 
        可以通過after僞類向元素的最後添加一個空白的塊元素,然後對其清除浮動           
         */
        .clearfix:after{
            /* 添加一個內容 */
            content: "";
            /* 轉換爲一個塊元素 */
            display: block;
            /* 清除兩側浮動 */
            clear: both;
        }
        /* 在IE6中不支持after僞類
        所以在IE6中還需要使用haslayout來處理 */
        .clearfix{
            zoom: 1;
        }
    </style>
</head>
<body>
    <div class="box1 clearfix">
        <div class="box2"></div>
        <div class="clear"></div>
    </div>
</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章