神奇的BFC
BFC是什么?
I know it when I see it
所以,虽然我不知道什么是BFC,但是写出样式,我就能知道这是不是BFC
BFC就是这样的东西
- 它没有定义
- 它只有特性/功能
BFC特性/功能
- 使用BFC 包住浮动元素
- 和浮动元素产生边界
如何回答面试官呢
接下来,我们继续看官方文档,满足其中之一的都是建立了一个BFC
下列方式会创建块格式化上下文:
- 根元素(<html>)
- 浮动元素(元素的 float 不是 none)
- 绝对定位元素(元素的 position 为 absolute 或 fixed)
- 行内块元素(元素的 display 为 inline-block)
- 表格单元格(元素的 display 为 table-cell,HTML表格单元格默认为该值)
- 表格标题(元素的 display 为 table-caption,HTML表格标题默认为该值)
- 匿名表格单元格元素(元素的 display 为
table、table-row、table-row-group、table-header-group、table-footer-group(分别是HTML table、row、tbody、thead、tfoot 的默认属性)或 inline-table) - overflow 值不为 visible 的块元素
- display 值为 flow-root 的元素
- contain 值为 layout、content或 paint 的元素
- 弹性元素(display 为 flex 或 inline-flex元素的直接子元素)
- 网格元素(display 为 grid 或 inline-grid 元素的直接子元素)
- 多列容器(元素的 column-count 或 column-width 不为 auto,包括
column-count为 1) - column-span 为 all 的元素始终会创建一个新的BFC,即使该元素没有包裹在一个多列容器中(标准变更,Chrome bug)。 块格式化上下文包含创建它的元素内部的所有内容.
如何创建BFC?
读完MDN后,我们知道,满足其一,就是建立了一个BFC
- float的值不是none
- position的值是absolute、fixed
- display的值是inline-block、flow-root、table-cell、table-caption、flex或者inline-flex、grid或者inline-grid
- overflow的值不是visible
接下来,让我们看几个例子吧,使我们加深对其功能的理解
功能1 用BFC包住浮动元素
子元素浮动,脱离了普通文档流,父元素包不住子元素
没有产生BFC
这个时候如果想父元素包裹住子元素,该怎么办呢?
让父元素产生一个BFC
解决办法一:让父元素浮动 浮动产生BFC
解决办法二:让父元素绝对定位
绝对定位产生BFC
解决办法三:让父元素变成行内块元素
display:inline-block产生BFC
解决办法四:让父元素的overflow设置为hidden
overflow:hidden产生BFC
解决办法五:让父元素的display设置为flow-root(触发BFC,无副作用)
display:flow-root产生BFC
注意:如果父元素产生了BFC,会把浮动的子元素包住,但是如果子元素里面还有浮动的子元素(也就是浮动的孙子),这时,父元素是不会包住孙子元素的
功能二 和浮动元素产生边界
兄弟元素之间,其中左边元素浮动,让其划清界限
没有产生BFC
用 float+div 做左右自适应布局
解决办法一:浮动元素的margin-right没有生效,这个例子中,如果没有BFC,我们想要产生边距,需要将普通元素的margin-left设置为浮动元素宽度+想要产生的边距宽度
没有产生BFC
解决办法二:让右侧兄弟元素的display设置为flow-root
display:flow-root产生BFC
解决办法三:让右侧兄弟的display设置为flex
dispaly:flex产生BFC
解决办法四:让右侧兄弟元素的overflow设置为hidden
overflow:hidden产生BFC
总结
BFC就是页面上一个单独的容器,容器内部的元素不会影响到外面的元素
不明白BFC的概念,但是我们看到后,就知道这是BFC
所以,面试时不要去讲解BFC的定义!
那么,面试时如何说明BFC呢?举例子!!
神奇的BFC的更多相关文章
- 神奇的BFC以及被忽略的东西
BFC是CSS中一个非常重要的概念,经常用来清除浮动以及处理外边距折叠,但BFC到底是个什么东西却很难准确的表达清楚,国内的相关技术文档基本都不全面,本文的目的就是对BFC的方方面面做个整理,当然未必 ...
- 前端里神奇的BFC 原理剖析
以前在做自适应两栏布局的时候别人口中听到bfc这个词,于是看了各种关于bfc的文章,发现梦想天空介绍的不错,今天就在他的基础上润色一下. 一.BFC是什么? 在解释 BFC 是什么之前,需要先介绍 B ...
- 前端精选文摘:BFC 神奇背后的原理
BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...
- BFC 神奇背后的原理
BFC已经是一个耳听熟闻的词语了,网上有许多关于BFC的文章,介绍了如何触发BFC, 以及BFC的一些用处(如清浮动,防止margin重叠等).虽然我知道如何利用BFC解决这些问题,但当别人问我BFC ...
- 神奇的盒模型(BFC)
上一篇我提到每一个元素都有自己的display属性,其属性值可以改变.其改变的方式,可以利用神奇的css盒模型(BFC). 盒模型,是css可视化格式化系统的基础,可以用于元素定位和网页布局.一个盒模 ...
- 【转】前端精选文摘:BFC 神奇背后的原理
BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...
- [转]BFC 神奇背后的原理
BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...
- 前端精选文摘:css之BFC 神奇背后的原理(转载)
一.BFC是什么? 在解释 BFC 是什么之前,需要先介绍 Box.Formatting Context的概念. Box: CSS布局的基本单位 Box 是 CSS 布局的对象和基本单位, 直观点来说 ...
- “fixed+relative==absolute”——对BFC的再次思考
好久没写博客了,刚好今天跨年夜没约到什么妹子,在家宅着不如写点东西好了. 需求 昨天晚上,给公司年会做一个移动端的投票页面,遇到一个UI优化的问题: · 正文内容少于一屏时,投票提交按钮固定显示在页面 ...
随机推荐
- 电脑adb命令给智能电视安装APK
配置环境 1.电脑需要配置好adb系统环境 具体操作较复杂,请自行百度. 2.电视打开adb命令 在电视的关于界面通过遥控器「上上下下左右左右」进入工厂模式,在「高级设置」-「其他」中的「adb开关」 ...
- Beta——代码规范与计划
这个作业属于哪个课程 软件工程 (福州大学至诚学院 - 计算机工程系) 这个作业要求在哪里 Beta 冲刺 这个作业的目标 团队进行Beta冲刺 作业正文 正文 其他参考文献 无 代码规范 此次代码规 ...
- 课堂笔记【java JDBC】
目录 JDBC简介 工作原理: 工作过程: JDBC驱动与连接 JDBC驱动 连接JDBC驱动 1.下载特定数据库的JDBCjar包 2.加载并注册数据库驱动 3.连接驱动 JDBC常见API JDB ...
- day1(Django路径问题)
1.python中的三种路径 1.1 操作系统文件绝对路径 django 静态文件查找, 模板查找(第一种) # 去配置好的 文件夹 中查找指定的文件 BASE_DIR = os.path.dirna ...
- 第6章 Python中的动态可执行方法 第6.1节 Python代码编译
在介绍动态可执行方法前,本节先介绍一下Python代码编译有关的知识,因为部分内容和动态执行有些关联. 一. Python解释器的功能 Python虽然是解释型语言,但Python代码也是可编译 ...
- 第15.43节、PyQt输入部件:QAbstractSpinBox派生类QSpinBox、 QDoubleSpinBox、QDateTimeEdit、QDateEdit和QTimeEdit功能简介
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 Designer输入部件中的Spin B ...
- PyQt(Python+Qt)学习随笔:model/view架构中QTableView视图的数据无法显示问题
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在使用QTableView来显示如下数据时: 在model中插入数据是使用如下类似代码: for c ...
- fedora版本如何升级
自动升级 sudo dnf update --refresh # 更新系统包 sudo dnf install dnf-plugin-system-upgrade # 安装系统更新插件 sudo dn ...
- Flask+MySQL+Redis的Docker配置
Docker配置了好多天,昨天晚上终于把碎遮项目的Docker打包完成了,后面会继续完善项目代码,把稳定版本打包后推送到DockerHub上. 网上关于Docker配置的文章很多,但大部分都是复制粘贴 ...
- 团队项目6——Alpha阶段项目复审
复审团队 广东靓仔六强选手 复审员 钟俊豪(3118005122) 复审内容 小组名称和链接 优点 缺点&Bug报告 最终排名 代码敲不队https://www.cnblogs.com/pip ...