美文网首页
css 清除浮动

css 清除浮动

作者: fuheideMayuyu | 来源:发表于2018-10-16 17:26 被阅读0次

什么是浮动?

原理: 在css中使用float:left和float:right,使元素脱离文档流。同时显示为类似display:inline-block的形式(可以定义宽高,但是又不会换行)。最大的好处就是相比与之前的table布局,更具有灵活性。

不清除浮动会产生什么后果?

后果:父元素高度塌陷(子元素浮动之后,没有元素去撑开父元素)

清除浮动的方法有哪些?

  1. 父级元素定高度
<div class="div1"> 
    <div class="left">Left</div> 
    <div class="right">Right</div> 
</div>
<div class="div2">div2</div>
.div1{
  background:#000080;
  border:1px solid red;
  height:40px;
   }
.div2{
  background:#800080;
  border:1px solid red;
  height:100px;
  margin-top:10px
  }
.left{
  float:left;
  width:20%;
  height:40px;
  background:#DDD
  }
.right{
  float:left;
  width:30%;
  display:inline;
  margin-left:12px;
  height:40px;
  background:#DDD
  }

原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。
优点:简单、代码少,容易掌握
缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一致时,会产生问题。
建议: 定高布局时可以考虑

2.添加额外的标签

<div class="div1"> 
    <div class="left">Left</div> 
    <div class="right">Right</div> 
    <div class="clearfloat"></div>
</div>
<div class="div2">div2</div>
.div1{
  background:#000080;
  border:1px solid red;
  }
.div2{
  background:#800080;
  border:1px solid red;
  height:100px;margin-top:10px}
.left{
  float:left;
  width:20%;
  height:40px;
  background:#DDD
  }
.right{
  float:left;
  width:30%;
  margin-left:12px;
  display:inline;
  height:40px;
  background:#DDD
  }
.clearfloat{
  clear:both
  }

原理:在父元素底部添加一个空的div子元素,利用css提供的clear:both清除浮动,让父级div能自动获取到高度。
优点:简单、代码少,浏览器支持好,不容易出现怪问题。
缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空的div,代码语义化变差。
建议: 不推荐使用,但此方法是以前主要使用的一种清除浮动的方法

3.父元素设置overflow:hidden(触发BFC)
通过设置父元素overflow:hidden;在IE6中还需要触发hasLayout,例如:zoom:1;

<div class="div1"> 
    <div class="left">Left</div> 
    <div class="right">Right</div> 
</div>
<div class="div2">div2</div>
.div1{
  background:#000080;
  border:1px solid red;
  overflow:hidden;
  zoom:1
  }
.div2{
  background:#800080;
  border:1px solid red;
  height:100px;
  margin-top:10px
  }
.left{
  float:left;
  width:20%;
  height:40px;
  background:#DDD
  }
.right{
  float:left;
  width:30%;
  margin-left:12px;
  display:inline;
  height:40px;
  background:#DDD
  }

优点:不存在结构和语义化问题,代码量极少。
缺点:内容增多的时候容易造成不会自动换行导致内容被隐藏,无法显示需要溢出的内容。

  1. 父元素设置overflow: auto;
    代码如上
    优点:不存在结构和语义化问题,代码量少。
    缺点:多个嵌套后,Firefox某些情况会造成内容全选;IE中mouseover造成宽度改变时会出现最外层模块有滚动条,Firefox早期版本会无骨产生focus等。

  2. 父元素也浮动

<div class="div1"> 
    <div class="left">Left</div> 
    <div class="right">Right</div> 
</div>
<div class="div2">div2</div>
.div1{
  background:#000080;
  border:1px solid red;
  width:100%;
  float:left
  }
.div2{
  background:#800080;
  border:1px solid red;
  height:100px;
  margin-top:10px
  }
.left{
  float:left;
  width:20%;
  height:40px;
  background:#DDD
  }
.right{
  float:left;
  width:30%;
  margin-left:12px;
  display:inline;
  height:40px;
  background:#DDD
  }

优点不存在结构和语义化问题,代码量极少。
缺点:父元素还有父元素,不可能一直浮动到body,不推荐使用。

6.父元素设置display: table

<div class="div1"> 
    <div class="left">Left</div> 
    <div class="right">Right</div> 
</div>
<div class="div2">div2</div>
.div1{
  background:#000080;
  border:1px solid red;
  width:100%;
  display:table;
  }
.div2{
  background:#800080;
  border:1px solid red;
  height:100px;
  margin-top:10px
  }
.left{
  float:left;
  width:20%;
  height:40px;
  background:#DDD
  }
.right{
  float:left;
  width:30%;
  margin-left:12px;
  display:inline;
  height:40px;
  background:#DDD
  }

原理:将div属性变成表格。
优点:结构语义化完全正确,代码量极少
缺点:盒模型属性已经改变,由此造成的一系列问题,不推荐使用。
建议:了解即可。

  1. 使用:after伪元素
<div class="div1 clearfloat"> 
    <div class="left">Left</div> 
    <div class="right">Right</div> 
</div>
<div class="div2">div2</div>
.div1{
  background:#000080;
  border:1px solid red;
  }
.div2{
  background:#800080;
  border:1px solid red;
  height:100px;
  margin-top:10px
  }
.left{
  float:left;
  width:20%;
  height:200px;
  background:#DDD
  }
.right{
  float:left;
  width:30%;
  margin-left:12px;
  display:inline;
  height:80px;
  background:#DDD
  }  
.clearfloat:after{ 
  display:block;
  clear:both;
  content:"";
  visibility:hidden;
  height:0
  }
.clearfloat{
  zoom:1
  }

优点: 结构和语义化完全正确。
缺点:复用方式不当会造成代码量增加。

清除浮动的原理不外乎两条:要么触发BFC要么使用clear属性。

相关文章

  • CSS浮动续

    CSS清除浮动案例 CSS版心居中显示案例 清除浮动的四种用法: 1. 使用空标记清除浮动,隔墙法,增加标签 2....

  • CSS clear both清除浮动

    原文地址:CSS clear both清除浮动 DIV+CSS clear both清除产生浮动我们知道有时使用了...

  • 清除浮动

    一、清除浮动 or 闭合浮动 ? 清除浮动:清除对应的单词是 clear,对应CSS中的属性是 clear:lef...

  • 一篇文章带你了解CSS clear both清除浮动

    一、前言 CSS clear both清除产生浮动 ,使用了css float浮动会产生css浮动,这个时候就需要...

  • CSS 中的浮动

    浮动的定义: 元素脱离文档流 举栗子: 修改 CSS 代码,清除浮动: 浮动的影响: 父元素高度塌陷 清除浮动: ...

  • CSS浮动.清除浮动

    给父级元素设置高度 在底部添加一个空元素,清除浮动 父级div定义 overflow:hidden或者auto 为...

  • css浮动 清除浮动

    float : left | right | none 设计之初的作用是做文字环绕 p标签段落双标签块级 i...

  • Test10

    引用文章: 那些年我们一起清除过的浮动 CSS浮动float详解 Clear Float CSS float浮动的...

  • 经常写却记不住的前端代码

    CSS透明 清除浮动影响 响应式 css 文字处理

  • css3复习

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

网友评论

      本文标题:css 清除浮动

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