在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外面而影响(甚至破坏)布局的现象。这个现象叫浮动溢出,为了防止这个现象的出现而进行的CSS处理,就叫CSS清除浮动。
清除浮动的本质:主要是为了解决父级元素因为子级浮动引起的内部高度为0的问题。
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| <style> .container { background-color: gray; border: solid 1px black; } .container .content { background-color: darksalmon; float: left; margin-left: 10px; } .container p { background-color: aquamarine; float: right; } .clear { clear:both; } </style> <body> <div class="container"> <div class="content">left</div> <div class="content">left</div> <p>right</p> </div> </body>
|

容器没有包含浮动元素
方法
使用带clear属性的块级元素(不推荐)
在浮动元素后面添加一个带clear属性的块级元素
优点:简单,代码少,浏览器支持好
缺点:如果页面浮动布局多,则需要很多空标签
1 2 3 4 5 6 7 8 9 10 11 12 13
| <style> .clear{ clear:both; } </style> <body> <div class="container"> <div class="content">left</div> <div class="content">left</div> <p>right</p> <div class="clear"></div> </div> </body>
|

使用CSS的overflow属性(不推荐)
给浮动元素的容器添加overflow属性
优点:不存在结构和语义化问题,代码量极少
缺点:多个嵌套后,firefox某些情况会造成内容全选;
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <style> .container { background-color: gray; border: solid 1px black; overflow:hidden; } </style> <body> <div class="container"> <div class="content">left</div> <div class="content">left</div> <p>right</p> </div> </body>
|
使用CSS的:after伪元素(推荐使用)
给浮动元素的容器添加一个class,然后给这个class添加一个:after伪元素实现元素末尾添加一个隐藏的块级元素清理浮动。
优点:兼容性好
缺点:ie6-7不支持伪元素:after
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <style> .clearfix:after{ content: ""; display: block; height: 0; clear: both; visibility: hidden; } </style> <body> <div class="container clearfix"> <div class="content">left</div> <div class="content">left</div> <p>right</p> </div> </body>
|
使用before和after双伪元素清除浮动(推荐使用)
**给浮动元素的容器添加一个class,然后给这个class添加一个:after伪元素实现元素末尾添加一个隐藏的块级元素清理浮动。
**
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <style> .clearfix:after.clearfix:before{ content: ""; display: table; } .clearfix:after{ clear: both; } </style> <body> <div class="container clearfix"> <div class="content">left</div> <div class="content">left</div> <p>right</p> </div> </body>
|
容器浮动(不推荐)
**让浮动元素的容器也浮动起来
优点:代码少
缺点:会导致整个页面大部分都处于浮动状态,容易出现问题 **
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| <style> .container { background-color: gray; border: solid 1px black; float:left; } </style> <body> <div class="container clearfix"> <div class="content">left</div> <div class="content">left</div> <p>right</p> </div> </body>
|

因为没给容器设置宽度