CSS3 - 清除浮动

一、 目的

通过本文,让大家可以明白清除浮动的原理和几种方法,最后得出一种本文认为最好用的方法。


二、 内容简介

1、 引入,还原浮动本来的意义
2、 说明,实际开发中常用浮动来做什么
3、 提问,为什么要清除浮动
4、 回答,如何清除浮动以及常用的几种方法
5、 结论,得出本文认为最好用的方法
复制代码

三、 正文

1、 浮动本来的意义 浮动的意义原本仅是用来让文字环绕在图片周围而已。

通过上图可以看到,设置图片左浮动可以将图片从正常文档流中抽取出来,后面的元素会忽略浮动元素原来的位置,所以可以看到以块元素显示的span标签插入到了图片下面,但是,我们发现文字却不会嵌入到图片下面,因为这就是浮动最纯粹的意义--让文字环绕在图片周围(关于为什么文字不会插入浮动元素下面在网上也有一些讨论,大家可以去搜索一下,本文在此就不做更详细的解释了)。

PS: 如果想让文字也插入到浮动元素下面,可以通过设置绝对定位来实现。

// html代码
  <section>
    <div class="origin1">
      ![img](http://upload-images.jianshu.io/upload_images/2944582-8c9f0eba7dce2e55.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
      <span>想象我是一大段文字</span>
    </div>
    <div class="float1">
      ![img](http://upload-images.jianshu.io/upload_images/2944582-8c9f0eba7dce2e55.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
      <span>想象我是一大段文字</span>      
    </div>
  </section>
复制代码
// css代码
.origin1 span {
  display: block;
  width: 250px;
  height: 120px;
  background-color: #78f182;  
}

.float1 img{
  float: left;
}

.float1 span {
  display: block;
  width: 250px;
  height: 120px;
  background-color: #78f182;
}
复制代码

2、 浮动经常被用来做什么 因为浮动可以让块状元素并排显示,所以经常用来做导航栏,内容分块栏等布局。

// html代码
  <section class="section2">
    <ul>
      <li><a href="#">产品中心</a></li>
      <li><a href="#">服务中心</a></li>
      <li><a href="#">新闻中心</a></li>
      <li><a href="#">客户见证</a></li>
      <li><a href="#">招贤纳士</a></li>
    </ul>
  </section>
复制代码
// css代码
.section2 li{
  list-style: none;
  float: left;
  padding: 20px;
  height: 20px;
  background-color: #1249c3;
  border-right: 1px solid #a0a2a2;
}

.section2 li a {
  color: #fff;
}
复制代码

3、 为什么要清除浮动

通过上图可以看到,当三个板块左浮动以后,因为它们脱离了正常文档流,所以它们的父元素ul在不设置高度的情况下,无法被子元素撑开(能够看到背景色是因为我设置了ul的padding为10px),所以当你在后边新增元素的时候,自然会排在ul后边,也就是插入到了3个浮动的板块下面。 这并不是我们想要的,这就是要清除浮动的原因。

// html代码
    <ul>
      <li><p>互动板块 li</p></li>
      <li><p>学习板块 li</p></li>
      <li><p>留言板块 li</p></li>
      我是本应该包裹在3个板块外面的父元素ul
    </ul>

    <div class="new">我是跟在ul后面的新div</div>
复制代码
// css代码
ul {
  padding: 20px;
  background-color: #b7db05;
}

ul li {
  width: 200px;
  height: 200px;
  background-color: #e3e3e3;
  margin-right: 20px;
  text-align: center;
  float: left;
}

.new {
  height: 50px;
  background-color: #1be751;
}
复制代码

4、 如何清除浮动 (1) 在最后一个浮动的 li 元素后边新增一个空的块状元素div,并设置clear:both以清除所有浮动。

// html代码
    <ul>
      <li><p>互动板块 li</p></li>
      <li><p>学习板块 li</p></li>
      <li><p>留言板块 li</p></li>
      我是本应该包裹在3个板块外面的父元素ul
      <div style="clear:both;"></div>        // 新增代码
    </ul>

    <div class="new">我是跟在ul后面的新div</div>
复制代码

效果: ul后边的div元素确实可以在浮动元素下边排列,并且设置margin、padding等也是针对浮动元素的下边框。 缺点: 多出了一个冗余标签,并没有任何结构意义。

(2) 设置父元素ul的overflow: hidden或者overflow: auto。

// css代码
ul {
  padding: 20px;
  background-color: #e7a5b8;
  overflow: hidden;
}
复制代码

效果: 对于ul后面的元素来说,它们可以在浮动元素下边依次排列了。 缺点: 采用这种overflow方法时可能会对采用定位position的元素产生影响,因为在ul的范围内,超出的部分将会被隐藏,所以如果定位元素处在ul超出的范围内,那么会被隐藏。

(3) 采用伪类方法,在最后一个浮动元素的后边,添加clear:both。

// css代码
ul:after {
  content: "";
  clear: both;
  display: block;
}
复制代码

效果: 很好的清除了浮动带来的影响,并且没有附加作用,也没有新增无语义的标签。 缺点: 暂时还没发现。


####四、 结论 综上所述,本文认为最好用的方法是采用after伪类来清除浮动带来的影响,欢迎大家前来讨论。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jacklin攻城狮

翻译_iOS视图编程指南(View Programming Guide for iOS)之视图和窗口体系

前些日子,我发布一个苹果官方文档的翻译,之后就有不少同学朋友问我:翻译苹果官方文档能做什么,开发过程用到的时候很少,浪费时间,还又没什么用。今天,刚好有时间,就...

10640
来自专栏刘望舒

Android绘制优化(二)布局优化

前言 我们知道一个界面的测量和绘制是通过递归来完成的,减少布局的层数就会减少测量和绘制的时间,从而性能就会得到提升。当然这只是布局优化的一方面,那么如何来进行布...

29380
来自专栏向治洪

React 动画框架简介

由于 React 加持了虚拟 DOM 等诸多特性,所以在 React 上实现常规的动画效果有一些特别之处。本文不会深入探讨 React 对动画的处理逻辑,只会简...

32970
来自专栏Guangdong Qi

iOS开发常用之网络

16110
来自专栏hightopo

原 荐 拓扑图弹力布局呈现Flickr图片搜

19340
来自专栏水击三千

Arcgis for Silverlight学习(一)

1.地图的加载 arcgis server for silverlight 通过控件map实现地图的浏览功能。map控件的使用方法如下: <esri:Map x...

37480
来自专栏黄Java的地盘

动态生成DOM元素的高度及行数获取与计算方法

在开发IM的项目过程中,经常会有出现一些需要计算DOM高度,然后超出若干行隐藏等需求。很多时候,需要计算高度的DOM元素都是动态生成的,我们无法在数据渲染前获取...

25820
来自专栏程序员的知识天地

前端学习之CSS(二)

(内联样式)Inline style > (内部样式)Internal style sheet >(外部样式)External style sheet > 浏览...

9120
来自专栏计算机编程

【页面效果优化 1】下划线与水波纹

28240
来自专栏HTML5学堂

hasLayout IE浏览器bug的来源

HTML5学堂:IE6浏览器曾经“坑”了一代又一代的前端工程师,了解浏览器兼容问题的同时,抱着“理科思维”的我们,必然会去思考为何IE6会这么“坑”,所以,我们...

31040

扫码关注云+社区

领取腾讯云代金券