清除浮动方法解析

清除浮动方法解析

清除浮动带来的额外影响

如果对于浮动不熟悉的同学,可以看看介绍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

在父元素中设置overflow:hidden|auto|scroll可以解决父元素高度塌陷的问题。为什么可以通过overflow来解决父元素高度塌陷的问题?这里涉及到了另外一个知识点,也就是BFC(块级格式化上下文),先看解决方法。原理下篇文章分享。

父元素设置: overflow:hidden|auto;

下面是设置overflow前和overflow后的效果图


:after伪元素

在父元素上增加: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;
}

放到浏览器上,父元素高度正常显示。

要理解伪元素解决父元素高度塌陷的方案,需要知道额外的一些知识。

浮动
  • 当某个元素发生浮动(left || right)时,该元素会脱离普通文档流。
  • 当某个元素发生浮动,并且DOM后面的元素没有文本内容时,此时浮动元素会覆盖掉紧跟其后的元素。
  • 当某个元素发生浮动,并且DOM后面的元素具有文本内容时,此时浮动元素同样会覆盖掉紧跟其后的元素,但是文字环绕在float元素周围显示,而不是被覆盖。

什么意思呢?其实仔细思考还是挺好理解的。这里放上一段代码解释前三点。

//HTML与上面的相同,将div换成了span,class换成了float-inline。
//CSS
.float-inline {
    float:left;
    width:100px;
    height:100px;
    background:pink;
}

相应的效果如下。

此时,可以设置宽高说明了内联元素span的行内框变成了块框。同时,在浮动元素同级的下一个元素是具有文本内容的,此时文字就会环绕在float元素的周围。因为浮动元素的存在,父元素高度塌陷了。

伪元素

伪元素,顾名思义是一个在某个元素之后添加内容。

  • 伪元素内容的添加必须放在content属性里面。
  • 伪元素是行内元素,不过可以通过display改变伪元素的框的类型。

ok,到这里。我们就已经掌握了理解:after伪元素清除浮动所需要的知识了。放上解决方案。按顺序剖析。

.clearfix: { zoom:1 } //触发IE的haslayout.
.clearfix:after {
    content: ‘.‘;
    display: block;
    clear: both;
    height: 0;
    visibility: hidden;
}
  • 设置伪元素的内容为‘.‘,content的内容放什么都可以。
  • 设置height:0;
  • 设置visibility:hidden。这里是要让content隐藏掉。
  • 设置clear:both。 清除伪元素的两侧都不允许出现浮动。
  • 最重要的是设置display属性为block,并且只能是block,不能是inline-block。前面也说过,伪元素是行内元素,行内元素是无法设置宽高的。设置display:block,此时元素可以设置宽高,将height:0,此时元素不占据任何高度。如果只设置了前四个属性,而没有改变伪元素的display,将会没有效果。

这里介绍了三种清除浮动带来的额外影响的三种方法,这里所说的额外影响指的是浮动元素给兄弟元素和父元素带来的影响。这里做一个小小的总结

  • 添加空div和:after伪元素的有一个共同的思想:就是使用clear属性。clear属性会给清除元素(即设置了clear属性的元素)的上外边距之上增加清除空间,而元素本身外边距并不改变。并且会使清除元素的上外边距的边界刚好在浮动元素的下外边距边界之下。所以才能达到清除浮动带来额外影响的效果。
  • 父元素使用overflow不为visible,也就是设置overflow:hidden|auto,此时也可以达到清除浮动的效果。这里涉及到BFC的概念,下一篇文章分享。

- 此文章转载-转载自:http://www.cnblogs.com/Uncle-Keith/p/6082667.html

时间: 2024-12-25 22:51:28

清除浮动方法解析的相关文章

DIV+CSS清除浮动方法

一.为什么要清除浮动? 1>父元素在未定义高的情况下,由于子元素全部浮动脱离文本流,而造成父元素高的塌陷(正常情况下,父元素的高是由未浮动的子元素撑起来) 2>因为部分子元素的而浮动,脱离文本流而造成其他元素的布局错乱. 二.常见的几种清除浮动方法 1>给没有浮动的子元素的CSS添加 clear: both;或新增加一个空的子元素,并且给其的CSS添加 clear: both;这样可以利用清除左右浮动的子元素重新撑起父元素的高,从而达到清除浮动的效果.(关键字:未浮动子元素添加clear

CSS清除浮动方法集合

CSS清除浮动方法集合 一.浮动产生原因   -   TOP 一般浮动是什么情况呢?一般是一个盒子里使用了CSS float浮动属性,导致父级对象盒子不能被撑开,这样CSS float浮动就产生了. 浮动产生样式效果截图 本来两个黑色对象盒子是在红色盒子内,因为对两个黑色盒子使用了float浮动,所以两个黑色盒子产生了浮动,导致红色盒子不能撑开,这样浮动就产生了. 简单地说,浮动是因为使用了float:left或float:right或两者都是有了而产生的浮动. 二.浮动产生负作用   -   

六种清除浮动方法,强力推荐after清除浮动

清除浮动的六种方法 1.给父级也加浮动   float:left .box{ width:300px;margin:0 auto;border:10px solid #000; float:left;} .div{ width:200px;height:200px;background:red;float:left;} <div class="box">  <div class="div"></div> </div>

overflow:hidden清除浮动原理解析及清除浮动常用方法总结

最近在看<CSS Mastery>这本书,里面有用overflow:hidden来清理浮动的方法.但是一直想不明白为什么能够实现清除浮动,查阅了网络上的解释,下面来总结一下. 一.首先来想想 我们大家理解的overflow:hidden是超出该元素的部分进行隐藏.这个时候就需要明确一点,该元素的高度是怎么定义的.当一个div中的两个元素浮动之后,此时div的高度就会塌陷,此时div的高度为0.那是不是意味着就要将浮动元素隐藏起来,如果是真的隐藏就是反布局常识的.所以这中间肯定有我们现在还不知道

html5中清除浮动方法

方法一: 在所属的父级元素下再加一个子元素.class命名 clear css属性中.clear{ clear:both;} 案例: <div class="footer"> <div class="01"></div> <div class="02"></div> <div class="03"></div> <div class=&q

CSS常用清除浮动方法总结

1.对父元素使用overflow:hidden;zoom:1,或者是overflow:auto;zoom:1. 兼容性问题:该处使用zoom:1是为了兼容ie6,但是实际上,用height:1%;代替zoom:1;更好,因为它可以通过W3C. 该方法缺点:内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素. 2.在浮动元素后面添加新的元素,再使用clear:both.缺点:无意义的空标签,不利于语义化. 3.给浮动元素的父元素使用:after伪元素.如下: .outer{z

总结清除浮动方法大全(7种)

1)添加额外标签 这是在学校老师就告诉我们的 一种方法,通过在浮动元素末尾添加一个空的标签例如 <div style="clear:both"></div>,其他标签br等亦可. 再如: <div class="warp" id="float1"> <h2>1)添加额外标签</h2> <div class="main left">.main{float:l

CSS清除浮动方法

HTML结构 1 <div class="wrap"> 2 <div class="div1">1</div> 3 <div class="div2">2</div> 4 <div class="div3">3</div> 5 </div> CSS样式 1 .wrap{margin:10px;padding20px;border:5

css清除浮动方法小结

清除浮动其实主要解决的就是高度塌陷问题,具体在此不再赘述~~~那些年我们一起清除过的浮动(大佬博客,写的挺不错) 方法小结:1. 1)添加额外标签 这是在学校老师就告诉我们的 一种方法,通过在浮动元素末尾添加一个空的标签例如 <div style=”clear:both”></div>,其他标签br等亦可. <div class="main left">.main{float:left;}</div> <div class=&quo