css清除浮动的方法

首先来看个栗子:
css代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
.main {width:300px;height:auto;padding:10px;background:#ccc;}
.main .left {width:100px;height:50px;background:red;float:left;}
.main .right {width:100px;height:50px;background:blue;float:left;}
.footer {width:300px;height:20px;background:green;}
</style>
</head>
<body>
<div class="main">
<div class="left"></div>
<div class="right"></div>
<div class="clear"></div>
</div>
<div id="footer"></div>
</body>
</html>

结果如果所示:


解决这种问题有几种方法:

  1. 在父级添加 overflow:hidden
    优点:不存在结构和语义化问题,代码量极少
    缺点:内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素
  2. 父元素也设置浮动(加个float:left/right)
    优点:不存在结构和语义化问题,代码量极少
    缺点:使得与父元素相邻的元素的布局会受到影响,不可能一直浮动到body,不推荐使用
  3. 父元素设置 display:table
    优点:结构语义化完全正确,代码量极少
    缺点:盒模型属性已经改变,由此造成的一系列问题,得不偿失,不推荐使用
  4. 使用 :after 伪元素
    优点:需要注意的是 :after 是伪元素,不是伪类(某些CSS手册里面称之为“伪对象”),很多清除浮动大全之类的文章都称之为伪类,不过csser要严谨一点,这是一种态度。由于IE6-7不支持:after,使用 zoom:1 触发 hasLayout。
    缺点:兼容性不是很好。
  5. 在浮动的元素后面添加空标签 <div class="clear"></div> 清除浮动
    优点:简单明了
    缺点:无意义的空标签,不利于语义化

个人比较偏向于:after的方式(苹果网站就是采用此种方式)

参考
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,816评论 1 92
  • 前言 摘要: 浮动的元素可以向左或向右移动,直到它的外边缘碰到父容器或另一个浮动元素为止。由于浮动元素不在文档的普...
    zouyang0921阅读 397评论 0 2
  • BFC CSS中的BFC BFC:block formatting context块级格式化上下文; BFC 与清...
    小人物的秘密花园阅读 624评论 0 0
  • 各种纯css图标 CSS3可以实现很多漂亮的图形,我收集了32种图形,在下面列出。直接用CSS3画出这些图形,要比...
    剑残阅读 9,715评论 0 8
  • 无意看到个新闻,就是说张智霖和袁咏仪这对恩爱的老夫妻花数百万买车买包包享受生活,却唯独租房过了20年!这对随时...
    妖媚儿阅读 270评论 0 0