如果对于浮动不熟悉的同学,可以看看介绍float的文章。传送门:CSS float
我们知道,在一个父元素内如果遇到某个浮动元素,此时父元素的高度会发生塌陷。针对父元素高度塌陷的问题,现在已经有了很多的解决方案。针对每一个方案,我们来进行深度的剖析。
这种方法比较容易,但是要注意的是这个空元素必须是一个块级元素,不能是行内元素或者是行内块元素。缺点就是多了一些没有意义的标签。代码如下。
//HTML
<div class="content">
<div class="float">
</div>
<div class="clearfix"></div>
//用于清除浮动的元素必须是块级元素
</div>
//CSS
.content {
background:pink;
}
.clearfix {
clear: both;
}
.float {
width: 50px;
height: 50px;
float: left;
background: tan;
}
之所以可以使用clear属性清除浮动带来的额外影响,还要回归clear属性的本质。
clear属性规定元素的哪一侧不允许其他浮动元素。
本质:在CSS2.1中,clear属性会给清除元素(即设置了clear属性的元素)的上外边距之上添加清除空间,而元素本身的外边距并不改变。再说的详细一些,也就是给元素设置clear:left|right|both
时,会使清除元素的上外边距边界刚好在该边上浮动元素的下外边距边界之下。
在父元素中设置overflow:hidden|auto|scroll
可以解决父元素高度塌陷的问题。为什么可以通过overflow来解决父元素高度塌陷的问题?这里涉及到了另外一个知识点,也就是BFC(块级格式化上下文),先看解决方法。原理下篇文章分享。
父元素设置: overflow:hidden|auto;
下面是设置overflow前和overflow后的效果图
在父元素上增加:after伪元素,可以解决父元素高度塌陷的问题。
//HTML
<div class="content">
<div class="float">
</div>
<p>会给覆盖吗?</p>
</div>
//CSS
.content {
background: tan;
&:after {
content: ‘.‘;
display: block;
clear: both;
height: 0;
visibility: hidden;
}
}
.float {
width: 100px;
height: 100px;
float: left;
background: olive;
}
放到浏览器上,父元素高度正常显示。
要理解伪元素解决父元素高度塌陷的方案,需要知道额外的一些知识。
什么意思呢?其实仔细思考还是挺好理解的。这里放上一段代码解释前三点。
//HTML与上面的相同,将div换成了span,class换成了float-inline。
//CSS
.float-inline {
float:left;
width:100px;
height:100px;
background:pink;
}
相应的效果如下。
此时,可以设置宽高说明了内联元素span的行内框变成了块框。同时,在浮动元素同级的下一个元素是具有文本内容的,此时文字就会环绕在float元素的周围。因为浮动元素的存在,父元素高度塌陷了。
伪元素,顾名思义是一个在某个元素之后添加内容。
ok,到这里。我们就已经掌握了理解:after伪元素清除浮动所需要的知识了。放上解决方案。按顺序剖析。
.clearfix: { zoom:1 } //触发IE的haslayout.
.clearfix:after {
content: ‘.‘;
display: block;
clear: both;
height: 0;
visibility: hidden;
}
这里介绍了三种清除浮动带来的额外影响的三种方法,这里所说的额外影响指的是浮动元素给兄弟元素和父元素带来的影响。这里做一个小小的总结:
overflow:hidden|auto
,此时也可以达到清除浮动的效果。这里涉及到BFC的概念,下一篇文章分享。- 此文章转载-转载自:http://www.cnblogs.com/Uncle-Keith/p/6082667.html
原文:http://www.cnblogs.com/nield-bky/p/6091273.html