前言:这是笔者学习之后自己的理解与整理。如果有错误或者疑问的地方,请大家指正,我会持续更新!

  文档流的概念:html 中 block 块元素默认是单独占据一行的,从上到下排列,也就是我们说的文档流。

  脱离文档流的概念:A 元素定义了 float 属性之后,就会"浮"起来,原来占据的空间由后面的 B 元素占据。

  如果浮动起来的 A 元素和 B 元素发生重叠,浮动起来的 A 元素就会覆盖 B 元素。

  浮动元素具有内联元素的特性,不在单独占据一行,相邻的浮动元素,最前面的具有 left 属性值的排在最左边,最前面的具有 right 属性值的排在最右边。

  当多个浮动元素一排容不下时,就换行。

  浮动会带来各种布局问题,主要是父容器塌陷(子元素在父元素外面,影响后面的布局),也就有各种解决方案,利用clear属性清除浮动或者使父容器形成 BFC。

利用 clear:both 清除浮动

  在浮动元素后面在创建一个空的非浮动的 div(inline元素不可以),并赋予属性 clear:both;

  实际应用中我们更多采用 :after 伪元素加在父容器上来清除浮动,定义一个 clearfix 的 class,然后给它添加一个 :after 伪元素,它会在父容器的内容最后面在添加一个看不见的块元素,我们给它定义 clear:both;

/* 清除浮动 */
.clearfix:after {
content: '';
display: block;
height: 0;
clear: both;
font-size: 0;
visibility: hidden;
}
.clearfix {
/*触发hasLayout,这又涉及到IE浏览器hack的知识*/
zoom: 1;
}

BFC 学习

  父容器形成 BFC 可以解决父容器内部子元素浮动引起的塌陷问题。

  BFC 元素特性就是不论内部怎样,都不会影响外部布局。

  如何触发BFC?

  • float 值为 left\right
  • overflow 值为 auto  |  scroll  |  hidden
  • display 值为 table-cell  |  table-captain  |  inline-block
  • position 值为 absolute 或 fixed

  我们可以给父容器添加这些属性形成 BFC,达到“清”浮动(包含浮动)。

  div 设置 float 属性之后会产生 inline-block 特性,不会占据一整行了。

  position:absolute 会使父容器脱离文档流,虽然打成了目的,但父容器的位置问题又来了。

  overflow:auto  |  scroll 有时候会出现滚动条。

  overflow:hidden 需要确定不会出现溢出裁剪,很多企业不让用 overflow,我们需灵活掌握。

  最后,Nicolas Gallagher 大师提供了一种更简便的方法,用的是 display:table。

    .clearfix:before, /*:before处理margin上下重叠*/
.clearfix:after {
content: "";
display: table;
}
.clearfix:after {
clear: both;
}
.clearfix {
zoom: 1;
}

  这里的 :before 它是来处理 margin 上下重叠的;

margin 重叠

  上下两个 div,上面的赋予 margin-bottom:20px,下面的赋予 margin-top:10px,那么两个div之间的间距是多少呢?

  两个 div 之间的间距是 20px,因为发生了 margin 重叠,两个值那个大,间距就是哪个。

  上面说的是上下两个 div,那么一个 div 在另一个 div 中呢?情况也是一样的,会发生重叠,只是变成了 top-top,bottom-bottom 重叠。

  两个相邻的元素,嵌套的元素,只要它们之间没有阻挡,就会发生 margin 重叠。

  margin重叠解决方法:

  上下两个 div,这种情况一般不会用到,你看效果图的时候,一般都只会给其中一个 div 赋予 margin 的,都没有颜色,你也看不出来谁是谁,上面的列子我只是说存在这个情况。

  内外嵌套的 div,很多时候会见到:

  • 我们可以在它们之间加个阻碍,父元素或者子元素加个透明边框 border:1px solid transparent; 视情况可以具体到上边框还是下边框
  • 父元素或者子元素加个 padding:1px;视情况可以具体到上 padding 还是下 padding
  • 让父元素和子元素不在同一个 BFC,视情况给它们哪个触发 BFC

css 清除浮动 & BFC的更多相关文章

  1. css清除浮动的方法汇总

    这是在其他地方看到的一篇文章,汇总的不错,摘过来做个记录. 引用地址 : http://www.cnblogs.com/ForEvErNoME/p/3383539.html ------------- ...

  2. 什么是CSS清除浮动?

    在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高度,使得内容溢出到容器外 ...

  3. css清除浮动float方法

    转载:http://www.cnblogs.com/ForEvErNoME/p/3383539.html 什么是CSS清除浮动? 在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的 ...

  4. CSS清除浮动方法总结

    什么是CSS清除浮动? 在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动(float为left或right)的元素,在这种情况下,容器的高度不能自动伸长以适应内容的高 ...

  5. css清除浮动大全共8种方法

    原文链接http://www.jb51.net/css/173023.html 清除浮动是每一个 web前台设计师必须掌握的机能.css清除浮动大全,共8种方法. 浮动会使当前标签产生向上浮的效果,同 ...

  6. DIV+CSS 清除浮动方法总结

    DIV+CSS 清除浮动是页面布局中常见的问题,相信各位高手也都有自己的方法,今天在这里对常见的几种方法进行总结(PS:谈不上是原创,这里是我自己做的归纳总结,也是我自己内化的过程),希望对您能够有所 ...

  7. CSS清除浮动八种方法

    在各种浏览器中显示效果也有可能不相同,这样让清除浮动更难了,下面总结8种清除浮动的方法,测试已通过 ie chrome firefox opera,需要的朋友可以参考下 清除浮动是每一个 web前台设 ...

  8. css清除浮动定位造成的异常

    清除浮动是为了解决高度塌陷的问题:内层有好几个div有宽有高,并且选择了浮动定位,但是外层的div却并没有设置宽高.在非IE浏览器(如Firefox)下,当容器的高度为auto,且容器的内容中有浮动( ...

  9. 【转】CSS清除浮动_清除float浮动

    CSS清除浮动方法集合 一.浮动产生原因 一般浮动是什么情况呢?一般是一个盒子里使用了CSS float浮动属性,导致父级对象盒子不能被撑开,这样CSS float浮动就产生了. 浮动产生样式效果截图 ...

随机推荐

  1. 原生JavaScript实现函数的防抖和节流

    原生JavaScript实现函数的防抖和节流 参考:https://www.jianshu.com/p/c8b86b09daf0 想详细了解的直接戳上面链接了,讲得非常清楚.下面只给代码和我自己写的注 ...

  2. androidStudio: ERROR: Error occurred while communicating with CMake server.

    遇到此错误的原因是cmake服务器协议版本不匹配: 解决方案: 1:直接更新android studio看能否解决: 2:如果解决不了,那么将androidstudio,ndk ,cmake,grad ...

  3. PHP操作文件常用函数

    [获取文件信息的函数] basename($path[,扩展名]) 返回文件路径中去掉路径后的文件名称."/root/a.txt"输出a.txt;带上.txt输出a. dirnam ...

  4. Win10系统安装VMware-viclient-6.0无响应问题解决方法

    背景:笔记本重做系统升级至Win10系统后,由于工作需要,得安装VMware-viclient-6.0软件进行远程连接. 问题:没有出现网上那种各种报错情况,只是在点击“安装”按钮的时候没弹出任何等待 ...

  5. vue+php接口

    php: <?php header('Access-Control-Allow-Origin:*'); $date = $_POST['data'];$cars=array("Volv ...

  6. javascript——语法 && 结构

    原文链接:Understanding Syntax and Code Structure

  7. 阶段5 3.微服务项目【学成在线】_day18 用户授权_06-方法授权-方法授权测试-无权限异常处理

    现在没权限返回的信息 控制台抛出的异常是这个 : 不允许访问,这是Spring Security跑出来的 我们在异常处理器里面打个断点看一下 重新测试,就跳转到了异常捕获类这里. 这是异常的类型 这里 ...

  8. 深入理解Java虚拟机 - 书评

    谈起<深入理解java虚拟机>这本书,让我印象深刻的就是换工作跳槽面试的时候,当时刚进入java开发这个行业的时候,平时只是做一些对数据库的增删改查等功能,当自己技术增长一些的时候,就开始 ...

  9. WinSCP 上传文件至Cetos 7 后用户无权限

    WinSCP是一个支持SSH的SCP文件传输软件. 可以用Windows环境向Linux环境传输文件,今天给新的Elasticsearch 服务器(cetos 7 )部署新的集群节点的时候,发现传输后 ...

  10. Java RSA分段加密

    我们通过Java进行RSA加密的时候,可能会出现如下问题: /** * 私钥加密 * * @param data 待加密数据 * @param key 密钥 * @return byte[] 加密数据 ...