正常情况下,如果我们不给一个元素设置高度,那么这个元素的高度是由其子元素撑起来的。

//html
<div class="parent"><div class="child1"></div><div class="child2"></div><div class="child3"></div>
</div>//css
.parent{border: 1px solid red;}
.child1{width:100px;height: 100px;background: green;}
.child2{width:200px;height: 100px;background: blue;}
.child3{width:100%;height: 100px;background: grey;}

配色有点丑,主要是让大家印象深刻(逃。。。

但是当我们给其子元素设置浮动后,父元素塌陷成一条缝。

//html
<div class="parent"><div class="child1"></div><div class="child2"></div><div class="child3"></div>
</div>//css
.parent{border: 1px solid red;}
.child1{float: left;width:100px;height: 100px;background: green;}
.child2{float: left;width:200px;height: 100px;background: blue;}
.child3{float: left;width:100%;height: 100px;background: grey;}

这个时候我们需要清除浮动来解决这个问题,主要有以下三种方法:

  1. 额外标签法
  2. 伪元素法
  3. 父级添加 overflow:hidden

1.额外标签法:

//html
<div class="parent"><div class="child1"></div><div class="child2"></div><div class="child3"></div><div class="clearfix"></div>
</div>//css
.parent{border: 1px solid red;}
.child1{float: left;width:100px;height: 100px;background: green;}
.child2{float: left;width:200px;height: 100px;background: blue;}
.child3{float: left;width:100%;height: 100px;background: grey;}
.clearfix{clear:both;}

不过这个方法添加了无意义的标签,语义化差,相比之下更推荐使用伪元素

2.伪元素法

//html
<div class="parent clearfix"><div class="child1"></div><div class="child2"></div><div class="child3"></div>
</div>//css
.parent{border: 1px solid red;}
.child1{float: left;width:100px;height: 100px;background: green;}
.child2{float: left;width:200px;height: 100px;background: blue;}
.child3{float: left;width:100%;height: 100px;background: grey;}
.clearfix:after{content:'';display:block;clear:both;
}
.clearfix{zoom:1;//ie6清除浮动的方法
}

3.父级元素添加 overflow:hidden;

原理是通过触发 BFC,实现清除浮动。(该属性进行超出隐藏时需要计算盒子内所有元素的高度, 所以会隐式清除浮动)

那么什么是 BFC?

块级格式化上下文(BFC)

什么是 FC?

Format context(格式化上下文) 是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。

BFC即 Block Format Contexts (块级格式化上下文)

具有 BFC 特性的元素可以看作是隔离了的独立容器,容器里面的元素不会在布局上影响到外面的元素,并且 BFC 具有普通容器所没有的一些特性。

触发BFC:

  • body 根元素
  • 浮动元素:float 除 none 以外的值
  • 绝对定位元素:position (absolute、fixed)
  • display 为 inline-block、table-cells、flex
  • overflow 除了 visible 以外的值 (hidden、auto、scroll)

BFC有什么用

  • 阻止相邻元素的 margin 合并
  • BFC 可以包含浮动的元素(清除浮动)

bfc是什么_清除浮动和 BFC相关推荐

  1. html浮动代码_清除浮动与 BFC(块级格式化上下文)

    BFC(Block Formatting Context)是在解决清除浮动的问题时遇到的. 一.什么是 BFC MDN: 块格式化上下文(Block Formatting Context,BFC) 是 ...

  2. CSS相关知识点:6种清除浮动和BFC

    文章目录 CSS相关知识点:6种清除浮动和BFC 一.6种清除浮动 1.场景 2.原因 3.清除浮动 (1).给父级设置对应的高度 (2).给父级增加定位absolute (3).将父级也设计成浮动 ...

  3. bfc是什么_全面分析总结BFC原理及实践

    前言 经常在面试中被问到"如何清除浮动?"."为什么 overflow: hidden 可以清除浮动?"等等比较基础的问题.虽然这些题目案在各种写面试题的文章中 ...

  4. css清除浮动的几种方法_清除浮动的几种方法

    标准流:盒子会各占整行位置.子盒子若是标准流,父盒子虽然没有高度,但是会撑开父盒子高度. 浮动:盒子浮了起来,不会占据原来的位置,若父盒子没有定义高度,则不会撑开父盒子,父盒 子高度为0.(浮动可以让 ...

  5. 触发bfc的html元素,什么是BFC? CSS 使用伪元素清除浮动的方法

    BFC概念: 块级格式化上下文,是一个独立的渲染区域,让处于 BFC 内部的元素与外部的元素相互隔离,使内外元素的定位不会相互影响. 我们先了解一个名词:BFC(block formatting co ...

  6. 清除浮动原理、clear原理、bfc原理

    一.clear clear 属性定义了元素的哪边上不允许出现浮动元素.并不是将浮动元素变成了非浮动的,而是将该元素左右的浮动元素放到下一行. left :在左侧不允许浮动元素 right :在右侧不允 ...

  7. 清除浮动的五种方法详解

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

  8. 清除浮动(高度塌陷)的方法及原理!

    为什么要清除浮动? (清除浮动主要是为了解决,父元素因为子级元素浮动引起的内部高度为0的问题) 1.如下,我给父盒子设置一个boder,内部放两个盒子一个big 一个small,未给big和small ...

  9. CSS清除浮动的几种常见方法

    文章目录 浮动 优点 缺点 清除浮动 一.额外标签法 实例 二.父级添加overflow属性 实例 三.使用:after 实例 四.使用双伪元素 实例 五.手动设置父级高度 实例 注意 浮动 当元素浮 ...

最新文章

  1. 钱海丰:农药污染下的土壤微生态响应与风险预测​(今晚7点半)
  2. 洛谷 P1955 [NOI2015]程序自动分析(沙雕题)
  3. mybatis多排序问题
  4. azure git怎么使用_Azure(一)Azure Traffic Manager为我们的Web项目提供负载均衡
  5. 故障闪烁过渡网页幻灯片特效源码
  6. 最近总是淡淡的····
  7. 我的k8s随笔:Kubernetes部署的一些输出信息
  8. css 相对单位rem详解
  9. 苹果Mac定制化App开发神器:​​​​FileMaker
  10. JSP的执行过程及生命周期
  11. 单片机 - RTOS - Linux
  12. SpringBoot+tomcat发布之war包发布
  13. 2017年工作回顾及2018年新展望
  14. 微信小程序开发需要的相关技术
  15. 小米手机与计算机如何连接网络连接,小米手机怎么通过电脑上网如何将手机与电脑相连...
  16. 有时候没必要造轮子,我们要学会合理地使用轮子
  17. 开机上报树梅派2的IP地址到邮箱
  18. 孫子に学ぶITマネジメント CIOの予算獲得編(1)勝ち方は体系化できる
  19. 【转】Awesome Python中文版来啦!
  20. 网络革命:软件定义网络与网络虚拟化

热门文章

  1. spring+struts2+mybatis
  2. 结组开发项目(TD学生助手)
  3. 我们做出了一个艰难的决定
  4. AutoItLibrary安装和常见问题解决
  5. (转)Putty server refused our key的三种原因和解决方法
  6. 解决CentOS出现“No package redis available“提示问题
  7. 【白皮书分享】2020年未来智慧园区白皮书-华为.pdf(附下载链接)
  8. 算法工程师面试备战笔记10_精确率(precision)和召回率(recall)
  9. 算法工程师面试备战笔记8_猜测这种划分最可能是什么聚类算法的结果
  10. Integer与int的区别