CSS浮动
浮动
概念
- 在最初,浮动是用来实现文字环绕图片效果的,现在浮动是主流的页面布局方式之一。
浮动后特点
- 1, 脱离文档流。
- 2, 不管浮动前是什么元素,浮动后:默认宽与高都是被内容撑开(尽可能小),而且可以设宽高。
- 3, 不会独占一行,可以与其他元素共用一行。
- 4, 不会 margin 合并,也不会 margin 塌陷,能够完美的设置四个方向的 margin 和 padding 。
- 5, 不会像行内块一样被当做文本处理(没有行内块的空白问题)。
产生的影响
产生的影响
-
对兄弟元素的影响: 后面的兄弟元素,会占据浮动元素之前的位置,在浮动元素的下面;对前面的兄弟无影响。
- 解释: 我浮到上面, 后面的元素顶上我之前占据的位置
-
对父元素的影响: 不能撑起父元素的高度,导致父元素高度塌陷;但父元素的宽度依然束缚浮动的元素。
-
[[CSS之浮动后塌陷示例代码]]

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>04_浮动后的影响</title> <style> .outer { width: 500px; background-color: gray; border: 1px solid black; } .box { width: 100px; height: 100px; background-color: skyblue; border: 1px solid black; margin: 10px; } .box1,.box2,.box3 { float: left; } </style> </head> <body> <div class="outer"> <div class="box box1">1</div> <div class="box box2">2</div> <div class="box box3">3</div> </div> <!-- <div style="background-color:orange">Lorem ipsum dolor sit amet consectetur adipisicing elit. Assumenda expedita rem similique at laboriosam, magnam, ipsam inventore odit odio ipsum ex ad beatae quia, consequuntur quam dolore modi atque? Doloribus libero eos ut consequatur, assumenda amet quidem est quae doloremque maxime id cumque explicabo aliquam. Quas, explicabo illo neque rem dolores impedit aspernatur suscipit vel, dolore incidunt totam aliquam laborum! Fuga in rerum repudiandae suscipit, labore optio iste ratione nobis velit dolorem laborum doloribus perferendis porro enim, sequi, delectus nulla quam? Recusandae quidem nobis voluptatum quam quaerat itaque aliquam reiciendis molestias ratione nesciunt exercitationem quisquam laborum sit error magnam optio atque, debitis tempore. Quibusdam repellendus perspiciatis id consequuntur saepe suscipit enim temporibus, ipsa minima dolores laudantium inventore recusandae nam. Quo harum sunt reprehenderit nisi? Error quia quibusdam possimus tempore incidunt. Doloribus vitae quis nisi quod, aperiam molestias id quibusdam voluptate recusandae iure tempore hic doloremque similique corrupti expedita non odit a natus. Eius, harum iste, dolor omnis, saepe dolore illo aliquid impedit officia explicabo itaque dicta eos exercitationem at tempora perspiciatis voluptate ad eaque mollitia maiores obcaecati numquam. Veniam ex facere fugit ullam est velit officiis a autem perferendis ratione aliquid dolor voluptate magnam, illo alias sequi totam, ab nemo?</div> --> </body> </html>
解决
-
方案一: 给父元素指定高度。
-
方案二: 给父元素也设置浮动,带来其他影响。
-
方案三: 给父元素设置 overflow:hidden 。
-
方案四: 在所有浮动元素的最后面,添加一个块级元素,并给该块级元素设置 clear:both 。
-
方案五: 给浮动元素的父元素,设置伪元素,通过伪元素清除浮动,原理与方案四相同。推荐使用
- 解释:
::after表示创建一个元素, 即浮动元素所在的父元素创建一个伪元素用于清除浮动, 参考: https://developer.mozilla.org/zh-CN/docs/Web/CSS/::after
.parent::after { content: ""; display: block; clear:both; } - 解释:
-
[[CSS之解决浮动塌陷问题示例代码]]
outer::after后的元素状态

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>05_解决浮动后的影响</title> <style> .outer { width: 500px; background-color: gray; border: 1px solid black; /* 第一种解决方案 */ /* height: 122px; */ /* 第二种解决方案 */ /* float: left; */ /* 第三种解决方案 */ /* overflow: scroll; */ } .box { width: 100px; height: 100px; background-color: skyblue; border: 1px solid black; margin: 10px; } .box1,.box2,.box3,.box4 { float: left; } .mofa { /* 第四种解决方案 */ clear: both; } /* 第五种解决方案 */ .outer::after { content: ''; display: block; clear: both; } </style> </head> <body> <div class="outer"> <div class="box box1">1</div> <div class="box box2">2</div> <div class="box box3">3</div> <div class="box box4">4</div> <!-- <div class="mofa"></div> --> </div> <div style="background-color:orange">Lorem ipsum dolor sit amet consectetur adipisicing elit. Assumenda expedita rem similique at laboriosam, magnam, ipsam inventore odit odio ipsum ex ad beatae quia, consequuntur quam dolore modi atque? Doloribus libero eos ut consequatur, assumenda amet quidem est quae doloremque maxime id cumque explicabo aliquam. Quas, explicabo illo neque rem dolores impedit aspernatur suscipit vel, dolore incidunt totam aliquam laborum! Fuga in rerum repudiandae suscipit, labore optio iste ratione nobis velit dolorem laborum doloribus perferendis porro enim, sequi, delectus nulla quam? Recusandae quidem nobis voluptatum quam quaerat itaque aliquam reiciendis molestias ratione nesciunt exercitationem quisquam laborum sit error magnam optio atque, debitis tempore. Quibusdam repellendus perspiciatis id consequuntur saepe suscipit enim temporibus, ipsa minima dolores laudantium inventore recusandae nam. Quo harum sunt reprehenderit nisi? Error quia quibusdam possimus tempore incidunt. Doloribus vitae quis nisi quod, aperiam molestias id quibusdam voluptate recusandae iure tempore hic doloremque similique corrupti expedita non odit a natus. Eius, harum iste, dolor omnis, saepe dolore illo aliquid impedit officia explicabo itaque dicta eos exercitationem at tempora perspiciatis voluptate ad eaque mollitia maiores obcaecati numquam. Veniam ex facere fugit ullam est velit officiis a autem perferendis ratione aliquid dolor voluptate magnam, illo alias sequi totam, ab nemo?</div> </body> </html>
浮动相关属性
| float | 设置浮动 | left : 设置左浮动 right : 设置右浮动 none :不浮动,默认值 |
|---|---|---|
| clear | 清除浮动 | left :清除前面左浮动的影响 right :清除前面右浮动的影响 both :清除前面左右浮动的影响 |