在前两天的一个面试中考官问我web中清除浮动的一些css常用方法,我很轻松的答出了:

1.overflow:hidden

2.clear:both

3.floatfix类

然后问题就来了,考官接着问'为什么overflow:hidden'可以清除浮动?这下就把我问住了。写了这么多年css只是单纯的解决问题,但是从来没想过为什么。

看来是需要反省和认真总结一下以前的这些细节问题了,只要不明白的就要加一个'为什么?'

clear:both

这三种方法里最好理解的就是clear:both

    <style>
#con{border: 2px dashed #ccc;padding:5px;}
div.c{width: 100px;height: 100px;background-color: green;margin-right:5px; _display: inline; float: left;color: #fff;}
</style>
<div id="con">
<div class="c">内容一</div>
<div class="c">内容二</div>
<div class="c">内容三</div>
<div style="clear:both"></div>
</div>

原理就是在父元素最后面添加一个非浮动的空div由于有clear:both属性用来清除浮动,父元素会把它包围起来,顺带手把float:left的div也一起包裹起来,高度不再塌陷。

这种方法不再流行的主要原因就是改变了结构添加了无用的内容。

overflow:hidden

写这篇文章的起因就是它overflow:hidden,到底为什么加入这个属性就可以清除浮动呢?我上网查了一下,文章还是挺多的'block format content'下面简称BFC,相关文章可以自己搜一下挺多的。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<style>
#con{border: 2px dashed #ccc;padding:5px;overflow: hidden;}
#con div.c{width: 100px;height: 100px;background-color: green;margin-right:5px; _display: inline; float: left;color: #fff;}
</style>
</head>
<body> <div id="con">
<div class="c">内容一</div>
<div class="c">内容二</div>
<div class="c">内容三</div>
</div>
</body>
</html>

添加这个属性就使父级容器形成了BFC,它有三个特性:

1.BFC会阻止垂直外边距(margin-top、margin-bottom)折叠

2.BFC不会重叠浮动元素

3.BFC可以包含浮动

父级形成了BFC之后说'清除浮动'有点不太恰当,应该改为'包含浮动'。形成BFC的一些方法:

  • float为 left|right
  • overflow为 hidden|auto|scroll
  • display为 table-cell|table-caption|inline-block
  • position为 absolute|fixed

当然父级BFC也不是一个很好的解决方法,比如:

1.父级设置float:left会改变宽度,父级也会悬浮

2.父级设置overflow:hidden会影响绝对定位的定位的子元素显示问题

3.ie6兼容性

.floatfix

最后说现在大家都在用的floatfix类

.floatfix{*zoom:1;}
.floatfix:after{content:"";display:table;clear:both;}

.floatfix:after挺好理解的,就是在元素后面添加一个清除浮动的元素等同于<div style="clear:both"></div>,只不过这是用css来添加的。

但是IE6、7不支持a以外的伪类,所以我们再用*zoom:1用来兼容IE6、7。

在IE6、7内有个hasLayout的概念,很多bug都是由hasLayout导致的,当元素的hasLayout属性值为false的时候,元素的尺寸和位置由最近拥有布局的祖先元素控制。当元素的hasLayout属性值为true的时候会达到和BFC类似的效果,元素负责本身及其子元素的尺寸设置和定位。我们可以利用这点儿在IE6、7下完成清浮动,先看看怎么使元素hasLayout为true

  • position: absolute
  • float: left|right
  • display: inline-block
  • width: 除 “auto” 外的任意值
  • height: 除 “auto” 外的任意值
  • zoom: 除 “normal” 外的任意值
  • writing-mode: tb-rl

在IE7中使用overflow: hidden|scroll|auto 也可以使hasLayout为true

最后总结

现在我们已经知道父级div什么情况可以形成BFC,ie6、7的hasLayout属性值什么时候可以形成true,那么在项目的不同应用中就可以使用不同的方法来清除浮动了。

关于css清除元素浮动的方法总结(overflow clear floatfix)的更多相关文章

  1. Web前端面试指导(十九):CSS样式-如何清除元素浮动?

    题目点评 本题属于比较常问的题目,也是在网页设计中经常遇到的问题,面试官希望通过这样的面试题来了解你对网页设计的基本功底,如果这样的题目答不出来,必会让面试官大失所望,面试成功的概率是非常小的. 答题 ...

  2. css之元素浮动

    什么时候用浮动——块级元素一行显示就使用浮动 浮动的特点——让元素脱标不占位置 什么时候清除浮动——父元素没有设置高度:父元素中所有的子元素都设置浮动 清除浮动的方法(掌握): 1.额外标签清除浮动 ...

  3. CSS清除float浮动

    一.浮动产生原因   -   TOP 一般浮动是什么情况呢?一般是一个盒子里使用了CSS float浮动属性,导致父级对象盒子不能被撑开,这样CSS float浮动就产生了. 本来两个黑色对象盒子是在 ...

  4. div标签清除float浮动样式方法

    方法一. 这个方法来源于positioniseverything ,通过after伪类实现,完全兼容当前主流浏览器. 1 <style type="text/css"> ...

  5. CSS中元素各种居中方法(思维导图)

    前言 用思维导图的方式简单总结一下各种元素的居中方法,如下图: 补充一下: table自带功能 100% 高度的 afrer before 加上 inline block优化 div 装成 table ...

  6. css中子元素浮动,无法自动撑开父元素的解决办法

    <div> <div style="float:left;">left</div> <div style="float:righ ...

  7. CSS设置元素居中的方法

    1.margin:0 auto; 2.body{text-align:center;} 3.position:absolute; left:50%; margin-left:-(宽/2);

  8. cssy元素居中的方法有哪些?

    css的元素居中 各位小伙伴们在努力写网页的时候有没有遇到过这样的一个问题呢? 在写的时候发现他不居中,可是要分分钟逼死强迫症的啊! 别急,我来啦 哈哈哈 今天就带来三种css的元素居中的方法 第一种 ...

  9. CSS清除浮动使父级元素展开的三个方法

    点评:一个没有设置高度的容器div内如果存在浮动元素(即使用了属性float:left或者float:right),那么该父级元素会无法展开,下面举个例子为大家详细介绍下,希望对大家有所帮助 一个没有 ...

随机推荐

  1. 常见的meta标签属性

    meta标签是网页元标签.可以定义一些网站的功能. 1. name属性 name属性的通用格式如下: <meta name="xxx" content="xxxx, ...

  2. ashx 图片上传路径URL

    ashx 图片上传   为了方便多出调用图片上传方法       首先我们将图片上传方法抽离出来 创建ashx 一个新的方法 using System; using System.Collection ...

  3. (尚015)Vue过滤器(对显示的数据进行格式化)

    现在日期为:当前时间-1970年1月1日0时0分0秒的时间差 日期格式化:百度搜索moment 1.test015.html <!DOCTYPE html><html lang=&q ...

  4. cube.js 学习(六)cube.js segments 说明

    segments 是你需要查询的数据的子集,实际上filter 也可以做类似的事情,但是,目前这个设计估计是为了更好的数据 查询吧,同时在操作界面上我们也可以看出来 参考格式 segments: { ...

  5. iframe标签在PC端的使用

    随着前端框架的崛起 各种组件化 模块化开发 然而我发现在PC端要考虑兼容 ~~~~ 自己琢磨着 在PC端怎么吧一个页面做成一个公共的部分  发现有个iframe标签可以在页面中嵌套 虽然iframe可 ...

  6. P1453 城市环路

    题目背景 一座城市,往往会被人们划分为几个区域,例如住宅区.商业区.工业区等等.B市就被分为了以下的两个区域——城市中心和城市郊区.在着这两个区域的中间是一条围绕B市的环路,环路之内便是B市中心. 题 ...

  7. 反手来个K8S入门到跑路

    layout: post title: 反手来个K8S入门到跑路 category: linux date: 2019-06-09 tags: linux k8s 反手来个K8S入门到跑路 前言 放假 ...

  8. Requests库的主要方法:requests.request为requests.get和requests.post两个的汇总,只是需要传方法

    1. requests.request(method,url,**kwargs) method:请求方式,对应get/put/post等七种 :拟获取页面的url链接 :控制访问参数,共13个 met ...

  9. NoSql数据库Redis系列(4)——Redis数据持久化(AOF)

    上一篇文章我们介绍了Redis的RDB持久化,RDB 持久化存在一个缺点是一定时间内做一次备份,如果redis意外down掉的话,就会丢失最后一次快照后的所有修改(数据有丢失).对于数据完整性要求很严 ...

  10. 2019软工实践_Alpha(2/6)

    队名:955 组长博客:https://www.cnblogs.com/cclong/p/11862633.html 作业博客:https://edu.cnblogs.com/campus/fzu/S ...