整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

CSS中清除浮动的几种方法,快来学习一下吧

首先我们通过一张图来解释下元素浮动是什么样的状态。

元素浮动情况

上图的html部分代码为:

html代码

css部分代码为:

css代码

通过上面的图片可以看出,当内部的div设置float后,外部的元素的就会受到以下影响:

  • 背景不能显示

  • 边框不能被撑开

  • margin和padding设置的值不能正确显示

元素浮动的坏处

如果不清除元素浮动的话,浮动层后面的非浮动层内容就有可能被覆盖,造成页面的排版混乱。

例如在上面的例子中再加一个非浮动的div,就会发现该div被前面的三个浮动div覆盖住。

因为浮动,后面的div被覆盖

既然会出现这种情况,我们就应该设法清除掉元素的浮动。

方法1-父级元素设定定高

我们可以给父级元素.outer设置为定高,这样就可以不影响后面的非浮动元素。.outer的样式为:

设置定高

达到的效果为

清楚浮动之后

虽然这种方法可以清楚浮动,但是对父元素设置定高会有很多的限制,如果内层div的高度变化,则需要手动修改外层div的高度,相对来说有点麻烦,因此这种方法并不推荐。

方法2-添加新元素,设置clear:both

在父元素内部的末尾处添加一个新的div,并设置其clear: both;属性。

添加一个新的div

该新增div的css属性为:

新增div的css属性

利用该方法同样可以达到清楚浮动的效果,但是由于会新增DOM元素,这种方法也不推荐。

方法3-父级元素使用overflow:hidden属性

在父级元素上使用overflow:hidden属性,准确来说只要不给overflow属性设置为visible都可以清除元素浮动。

设置overflow: hidden

使用这种方法可以少写很多css样式代码,同时不会新增DOM元素,因此推荐使用这种方式。

方法4-对父元素使用伪元素

通过对父元素使用:after伪元素,同样可以达到清除浮动的效果。

伪元素清楚浮动

以上方法在伪元素中,通过设置clear与overflow属性来实现。方法4在实际的项目中使用的频率最高,因此极大的推荐使用方法4来清除元素浮动。

其他方法

看到网上有的资料介绍,通过设置父元素为浮动,或者设置父元素为absolute定位,这两种方法只是能显示父元素而已,但父元素同样会覆盖到后面的非浮动元素,因此这两种方法严格意义来说并不算清除浮动的方法。

总结

今天这篇文章主要介绍了几种通过CSS来清除元素浮动的方法,你掌握了吗?

天这篇文章给大家介绍3种CSS清除浮动的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

首先,这里就不讲为什么我们要清楚浮动,反正不清除浮动事多多。

下面我就讲3种常用清除浮动的方法,够用了。

1、在浮动元素后面加一个空的div,并为它清除浮动

html代码:

<div class="wrap">   <div class="float">浮动</div>   <div class="clear"></div>   <div class="nofloat">不想被浮动影响</div></div>

css代码:

.wrap{  width:500px;  height:400px;  border:1px solid red;  margin:0 auto;}.float{  width:200px;  height:200px;  background:#ccc;  float:left;}.nofloat{    width:300px;    height:150px;    background:red;}

现在虽然加了一个空的div,但是并没有给它清除浮动,所以目前的效果就是第三个子元素.nofloat还是收到浮动的影响。

OK,现在给.clear加上清除浮动:

.clear{    clear:both;}

刷新一下效果就出来了:

PS:这种情况比较适合元素之间是垂直排列布局的,为了不受彼此浮动的影响。

2、利用BFC特性清除浮动

html代码:

<div class="wrap">   <div class="float">浮动</div>   <div class="nofloat">不想被浮动影响</div></div>

css代码:

.wrap{  width:500px;  border:1px solid red;  margin:0 auto;  overflow:hidden;}.float{  width:200px;  height:200px;  background:#ccc;  float:left;}.nofloat{    width:300px;    height:150px;    background:red;    overflow:hidden;}

效果是这样的:

这里父容器是没有设置固定高度的,本来第一个子元素浮动之后,父元素的高度会塌陷到跟第二个子元素一样高,但由于这里分别给第二个子元素和父元素都设置了overflow:hidden ,所以它们都生成了一个新的BFC区域,根据上文提供的BFC布局规则可以得知:BFC区域不会与float box 重叠;计算BFC高度时浮动元素的高度也参与计算。

所以就得到清除浮动的效果。说得比较绕,但其实清除浮动得根据自己开发中的实际情况合理使用。

3、使用:after伪元素,给浮动元素的父元素清除浮动

html代码:

<div class="wrap">   <div class="float">浮动</div></div>

css代码:

.wrap{  width:500px;  border:1px solid red;  margin:0 auto;}.float{  width:200px;  height:200px;  background:#ccc;  float:left;}

此时子元素浮动了,脱离了文档流,所以父元素高度酒塌陷了:

可以看到父元素的边框挤在一起了。

OK,现在给父元素添加一个clearfix类:

<div class="wrap clearfix">   <div class="float">浮动</div></div>
.clearfix{    *zoom:1;}.clearfix:after{    content:'clear';    display:block;    height:0;    clear:both;    overflow:hidden;    visibility:hidden;}

现在刷新后的效果就是:

这种方法和BFC清除浮动个人用的比较多,实际开发中,其实这两种就够用了。

好的,清除浮动我也就简单地提到这里!

以上就是CSS清除浮动的几种方法的详细内容。如果有什么错误的话,欢迎留言指正。

动的目的:把多个盒子放在一行上

清除浮动的目的:解决父盒子高度为0的问题

清除浮动,也称闭合浮动

注:本文不兼容IE6

未清除浮动实现情况:

图1

清除后:

图2

原代码:

复制代码

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>清除浮动</title>

<style type="text/css">

.content{

width:960px;

margin:100px auto;

border: 1px solid #ccc;

}

.left{

width:400px;

height: 200px;

background-color: green;

float: left;

}

.right{

width: 400px;

height: 200px;

background-color: red;

float: right;

}

</style>

</head>

<body>

<div class="content">

<div class="left"></div>

<div class="right"></div>

</div>

</body>

</html>

复制代码

具体方法:

1.额外标签法

在含浮动标签后加兄弟盒子清除浮动

例:

复制代码

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>清除浮动</title>

<style type="text/css">

.content{

width:960px;

margin:100px auto;

border: 1px solid #ccc;

}

.left{

width:400px;

height: 200px;

background-color: green;

float: left;

}

.right{

width: 400px;

height: 200px;

background-color: red;

float: right;

}

.clearbox{

clear:both;

}

</style>

</head>

<body>

<div class="content">

<div class="left"></div>

<div class="right"></div>

<div class="clearbox"></div>

</div>

</body>

</html>

复制代码

缺点:添加了许多空div

2.给父盒子overflow:hidden

触发bfc模式(该名词不懂请谷歌/百度,初学者可暂时略过),直接清除浮动

复制代码

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>清除浮动</title>

<style type="text/css">

.content{

width:960px;

margin:100px auto;

border: 1px solid #ccc;

overflow: hidden;

}

.left{

width:400px;

height: 200px;

background-color: green;

float: left;

}

.right{

width: 400px;

height: 200px;

background-color: red;

float: right;

}

.clearbox{

clear:both;

}

</style>

</head>

<body>

<div class="content">

<div class="left"></div>

<div class="right"></div>

</div>

</body>

</html>

复制代码

缺点:不可与position属性配合使用

3.伪元素法

给父元素定义伪类:after(此处使用的是公共类clearfix)

复制代码

.clearfix:after{

content:"";/*内容为空*/

visibility:hidden;/*将元素隐藏,但是在网页中该占的位置还是占着*/

display:block;/*变成块级元素*/

height:0;

clear:both;/*清除浮动*/

}

复制代码

具体代码:

复制代码

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>清除浮动</title>

<style type="text/css">

.clearfix:after{

content:"";/*内容为空*/

visibility:hidden;/*将元素隐藏,但是在网页中该占的位置还是占着*/

display:block;/*变成块级元素*/

height:0;

clear:both;/*清除浮动*/

}

.content{

width:960px;

margin:100px auto;

border: 1px solid #ccc;

}

.left{

width:400px;

height: 200px;

background-color: green;

float: left;

}

.right{

width: 400px;

height: 200px;

background-color: red;

float: right;

}

.clearbox{

clear:both;

}

</style>

</head>

<body>

<div class="content clearfix">

<div class="left"></div>

<div class="right"></div>

</div>

</body>

</html>

复制代码

缺点:IE8以上和非IE浏览器才支持

4.双伪元素法

给父类加上伪类:before和:after

复制代码

.clearfix:before,.clearfix:after{

content:"";

display:table;

}

.clearfix:after{

clear:both;

}

复制代码

具体代码:

复制代码

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>清除浮动</title>

<style type="text/css">

.clearfix:before,.clearfix:after{

content:"";

display:table;

}

.clearfix:after{

clear:both;

}

.content{

width:960px;

margin:100px auto;

border: 1px solid #ccc;

}

.left{

width:400px;

height: 200px;

background-color: green;

float: left;

}

.right{

width: 400px;

height: 200px;

background-color: red;

float: right;

}

.clearbox{

clear:both;

}

</style>

</head>

<body>

<div class="content clearfix">

<div class="left"></div>

<div class="right"></div>

</div>

</body>

</html>

复制代码

附:

对于上述4种方法,优先推荐方法3和4,当然1和2也可,可根据具体情况使用。

还有几种乱七八糟的清除浮动方法,但是缺点多,故不提起.

最后你觉得我们的文章对你有帮助,欢迎关注我,可以私信我:久伴,领取学习资料,在评论下方可以关注我的学习群,你可以随时在上面向我们提问,把你在学习前端过程中所遇到的问题发给我们。我们每天都会按时回复大家的每一个问题,希望久伴可以伴随你从入门到专家。