有兩個div父盒子, 內部子元素是浮動的: css
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style> * { padding:0px; margin: 0px; } .box, .box2 { width: 1000px; border: 2px solid red; } .box p, .box2 p { width: 100px; height: 50px; background-color:pink; float: left; margin-right: 10px; } </style>
</head>
<body>
<div class="box">
<p></p>
<p></p>
</div>
<div class="box2">
<p></p>
<p></p>
</div>
</body>
</html>
複製代碼
添加父元素高度, 值等於子元素高度 缺點: 若是浮動的子元素大小改變, 父元素不能自適應html
.box, .box2 {
width: 1000px;
height: 50px;
border: 2px solid red;
clear: both;
}
複製代碼
clear屬性的屬性值:瀏覽器
屬性值 | 解釋 |
---|---|
left | 清除前面左浮動帶來的影響 |
right | 清除前面右浮動帶來的影響 |
both | 清除前面左右浮動帶來的影響 |
.box, .box2 {
width: 1000px;
/* 方法一: 設置父元素高度 */
/* height: 50px; */
border: 2px solid red;
clear: both;
}
複製代碼
缺點: 若是兩個父元素間設置了margin, 會塌陷markdown
在兩個父盒子之間添加一個div, 爲div設置clear屬性 ui
css:spa
.cl {
clear: both;
}
複製代碼
<body>
<div class="box">
<p></p>
<p></p>
</div>
<div class="cl"></div>
<div class="box2">
<p></p>
<p></p>
</div>
</body>
複製代碼
優勢: 能夠用div的height模仿margin的高度 缺點: 父盒子高度不能自適應3d
在父元素內部,全部的浮動子元素後面添加一個空的 code
.cl {
clear: both;
}
複製代碼
<body>
<div class="box">
<p></p>
<p></p>
<div class="cl"></div>
</div>
<!-- 方法三: 外牆法 -->
<!-- <div class="cl"></div> -->
<div class="box2">
<p></p>
<p></p>
<div class="cl"></div>
</div>
</body>
複製代碼
優勢: 能夠解決全部問題, margin不會塌陷, 父盒子高度能夠自適應orm
.box, .box2 {
width: 1000px;
/* 方法一: 設置父元素高度 */
/* height: 50px; */
border: 2px solid red;
/* 方法二: 父元素設置clear:both */
/* clear: both; */
margin: 10px;
}
複製代碼
缺點: 使用html的代碼解決css的問題, 形成結構冗餘htm
本質是使用僞類方法利用css代碼書寫一堵內牆。
僞類選擇器:經過選中的標籤添加僞類,去選中標籤的某個狀態或位置。 :after:這個僞類表示選中的是某個標籤內部的最後的位置。
書寫方法:前面必須加普通的選擇器,後面連續書寫僞類名稱。 將僞類添加給一個選中父盒子的選擇器後面,通常給須要清除浮動的父盒子設置一 個clearfix的類名。
.clearfix:after {
content: "1";
display: block;
height: 0px; /*不讓文字1撐高位置*/
clear: both;
visibility: hidden; /*隱藏屬性, 與overflow: hidden的區別在於它不會讓出位置*/
}
複製代碼
<body>
<div class="box clearfix">
<p></p>
<p></p>
<!-- 內牆法 -->
<!-- <div class="cl"></div> -->
</div>
<!-- 方法三: 外牆法 -->
<!-- <div class="cl"></div> -->
<div class="box2 clearfix">
<p></p>
<p></p>
<!-- 內牆法 -->
<!-- <div class="cl"></div> -->
</div>
</body>
複製代碼
能夠解決全部問題
給內部有浮動子元素的父元素添加溢出隱藏 overflow: hidden; 屬性,能夠 解決浮動的全部問題.
overflow屬性:
高度自適應緣由: 一個元素沒有設置高度,同時設置了溢出隱藏,瀏覽器在加載盒子尺寸時,遇到溢出隱藏瀏覽器會強制性去檢索內部的子元素的高度,不論子元素是標準流仍是浮動,都會將最高的高度做爲父盒子高度加載。
浮動不影響後面的元素: 父元素有了高度後,能夠管理住內部全部的浮動元素,不會 延伸到後面標籤中影響貼邊。
.box, .box2 {
width: 1000px;
/* 方法一: 設置父元素高度 */
/* height: 50px; */
border: 2px solid red;
/* 方法二: 父元素設置clear:both */
/* clear: both; */
overflow: hidden;
}
複製代碼