美文网首页
清除浮动的方法

清除浮动的方法

作者: 燃烧吧_小宇宙 | 来源:发表于2016-03-18 10:45 被阅读22次

元素设置为float:left或者float:right之后,会脱离文档流,简单来讲,就是该元素的位置不属于该元素了。所以会造成浮动元素之后的元素替代占有该元素的位置。同样,也会造成父级元素高度不能自适应为子元素的高度。所以通常来讲,清除浮动的方式有以下几种,
1、设置父级元素overflow:hidden 触发BFC使父级元素自适应为子元素的高度。
2、在浮动元素之后增加一个没有实际作用的元素代替实际的元素替代浮动元素之后的元素受到浮动的影响,简单来讲,就是李代桃僵,借尸还魂。
3、clearfix方式

第三种实际是第二种的升级版,代码说明:
*** 未清除浮动: ***

<!doctype html>
<html lang="en">
<head> 
<meta charset="UTF-8">
 <title>clear float</title>
 <style> 
*{
   margin: 0;
   padding: 0;
   list-style-type: none;
} 
.fl{
   float: left;
} 
.parent{
   width: 300px;
   background-color:#00f;
} 
.children{
     width:100px;
     height:100px;
} 
.green{
      background-color:#0f0;
} 
.red{
       background-color:#f00;
} 
.others{
       width:240px;
       height:40px;
       background-color:#ccc;
} 
</style>
</head>
<body>
 <div class="parent">
 <div class="children green fl"> 子级元素1 </div>
 <div class="children red fl">子级元素2</div>
 </div> 
<div class="others">其他元素</div>
</body>
</html>

结果如下:

Paste_Image.png

很明显:父级元素未显示为蓝色,因为没有设置高度,也没有自适应为内容的高度,子元素1和子元素2浮动造成了自身脱离了文档流,其他元素受到影响,占据了浮动元素的位置。

overflow:hidden方式触发BFC

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>clear float</title>
 <style>
 *{
      margin: 0;
      padding: 0;
      list-style-type: none;
} 
.fl{
    float: left;
} 
.parent{
     width: 300px;
     background-color:#00f;
     overflow:hidden;
}
 .children{
     width:100px;
     height:100px;
}
 .green{
     background-color:#0f0;
} 
.red{
     background-color:#f00;
} 
.others{
      width:240px;
      height:40px;
      background-color:#ccc;
} 
</style>
</head>
<body>
 <div class="parent">
 <div class="children green fl"> 子级元素1 </div>
 <div class="children red fl">子级元素2</div>
 </div>
 <div class="others">其他元素</div>
</body>
</html>
Paste_Image.png

设置父元素overflow:hidden 触发了BFC,父级高度自适应为内容高度,其他元素没有受到浮动的影响。

增加空元素清除浮动方式

<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>clear float</title>
 <style>
 *{
    margin: 0;
    padding: 0;
   list-style-type: none;
}
 .fl{
     float: left;
}
 .parent{
     width: 300px;
     background-color:#00f;
} 
.children{
    width:100px;
    height:100px;
} 
.green{
     background-color:#0f0;
}
 .red{
     background-color:#f00;
} 
.others{
     width:240px;
     height:40px;
     background-color:#ccc;
} 
.clear{
    clear:both;
}
 </style>
</head>
<body>
 <div class="parent">
 <div class="children green fl"> 子级元素1 </div>
 <div class="children red fl">子级元素2</div>
 <div class="clear"></div>
 </div>
 <div class="others">其他元素</div>
</body>
</html>

相比最初的代码,新增了一个空元素<div class="clear"></div>给.clear设置了clear:both,代替其他元素受到浮动的影响,也就是李代桃僵。
效果如下:

Paste_Image.png
:after 方式为空元素的升级版
<!doctype html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>clear float</title>
 <style>
 *{
   margin: 0;
  padding: 0;
  list-style-type: none;
}
 .fl{
     float: left;
}
 .parent{ 
      width: 300px;
     background-color:#00f;
} 
.children{
       width:100px;
       height:100px;
} 
.green{
        background-color:#0f0;
}
 .red{
      background-color:#f00;
}
 .others{
       width:240px;
       height:40px;
       background-color:#ccc;
} 
.clearfix:after {
       content: "";
       display: block;
       height: 0; 
       visibility: hidden;
      clear: both; 
}
 .clearfix {
       *zoom: 1;
 }
 </style>
</head>
<body>
 <div class="parent clearfix">
 <div class="children green fl"> 子级元素1 </div>
 <div class="children red fl">子级元素2</div>
 </div>
 <div class="others">其他元素</div>
</body>
</html>

效果如下:

Paste_Image.png
和第二种方式一样,也是利用空元素替代接受浮动的影响,只不过是利用伪类:after 生成空元素clearfix:after生成了一个‘ ’空元素,该元素宽高均为0,等同于第二种方式中的"<div class="clear"></div>",生成的元素在子级元素2之后。然后该元素同样有属性clear:both,同样的原理,清除了浮动的影响。*zoom: 1;是在IE6 7下触发hasLayout布局,清除浮动造成的影响。同样,由于清除垂直外边距合并也有用空元素的方式,让空元素代替和上面的元素发生合并,由于空元素margin-top为0,所以清除了合并的影响,也同样如此,利用伪类:before也可以在元素内部第一个位置生成空元素,清除掉collapse造成的影响。

转载于知乎,借鉴于知乎

相关文章

  • (17.03.27)清除浮动

    清除浮动的方法: clear:both/left/right;清除浮动;两边/左边/右边

  • 前端面试积累2-清除浮动

    1.清除浮动的方法 方法一:对父级设置适合的CSS高度(不推荐) 方法二:clear:both 清除浮动 (常用)...

  • 完美clearfix

    clearfix 清除浮动分为两种: 清除自身浮动 清除父级浮动 这里不讲空标签的方法,因为空标签还要额外添加新的...

  • web前端入门到实战:css基础-float浮动

    float实现文字环绕图片效果: 清除浮动的方法一: 在浮动元素后面使用一个空元素 清除浮动的方法二: 给容器添加...

  • web前端入门到实战:css基础-float浮动

    float实现文字环绕图片效果: 清除浮动的方法一: 在浮动元素后面使用一个空元素 清除浮动的方法二: 给容器添加...

  • css问题收集 2018-07-19

    一、 父元素高度无法撑开 原因:1.子元素浮动 解决:清除浮动 清除浮动方法: .clearfix:after{c...

  • 关于清除浮动的方法

    刚学习了浮动,这里整理一下清除浮动的方法。 一、伪元素 伪元素清除浮动是伪元素的用途之一,这是清除浮动的一个相对比...

  • css清除浮动的三种方法

    摘要:css清除浮动float的三种方法总结,为什么要清除浮动?浮动会有哪些影响? 一.先看现象(display:...

  • css3复习

    清除浮动: 方法:clear清除浮动(添加空div法)在浮动元素下方添加空div,并给该元素写css样式: ...

  • 前端必须知道的CSS原理

    清除浮动原理 一说到清除浮动,作为前端开发者都不陌生,使用最普遍的方法就是下面这段代码了 清除浮动的关键: cle...

网友评论

      本文标题:清除浮动的方法

      本文链接:https://www.haomeiwen.com/subject/iemclttx.html