BFC的表象认识
首先字面翻译,这三个字母分别代表什么,box,formatting, context,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用。
形象点就是说一种规范,规范什么呢?规范盒子内部元素不会影响到外部元素,或者和一种布局上的规范;不明白 ok,谈谈清除浮动的方法里面,有个叫overflow为hidden,他的原理是啥呢?就是BFC;那些元素会产生BFC呢,官方定义如下:
- float的值不为none。
- overflow的值不为visible。
- display的值为table-cell, table-caption, inline-block中的任何一个。
- position的值不为relative和static。
BFC的特性是啥呢?
- 内部的Box会在垂直方向,从顶部开始一个接一个地放置。
- Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生叠加
- 每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
- BFC的区域不会与float box叠加。
- BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然。
- 计算BFC的高度时,浮动元素也参与计算。
但是这些特性有啥用啊?当然解决问题的了,解决啥问题呢?上面说了布局的问题,可能还有人不懂,来几个例子演示下
第一个例子:对应的第2个特性。
代码
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<style>
.test{
overflow: hidden;
}
.div1{
width: 100px;
height: 100px;
background-color: black;
margin-bottom: 10px;
}
.div2{
width: 100px;
height: 100px;
background-color: blue;
margin-top: 10px;
} </style>
</head>
<body> <div class="div1"></div> <div class="div2"></div> </body>
</html>
按常态思考,间距应该20px,其实不然这里是10px,怎么解决呢,各自生成独立BFC,为两个div各加一个父级并且父级overflow为hidden
第二个例子;关于第4个特性,代码如下
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<style>
.div1{
width: 100px;
height: 100px;
background-color: black;
float: left;
}
.div2{
width: 100px;
height: 100px;
background-color: blue;
} </style>
</head>
<body> <div class="div1"></div> <div class="div2"></div> </body>
</html>
根据第三个特性,得到结果是两个元素重叠了,那么咋解决呢,ok,div2加上overflow为hidden,这个时候也就是说div2成为一个独立的BFC,于是又遵循第三定理一次排放,
但是注意这里如果继续为div2添加margin的话,那么页面上的效果是只有当margin-left大于100时候才有作用,且效果是margin-left的效果,也说明实质上这里可能不是真正的不重叠效果,原有那个位置还在那儿
最后一个定理就是我们常用的overflow清楚浮动的原理了,因为overflow为hidden此时div变成一个BFC,于是遵循BFC定理,BFC内部元素计算高度是把浮动元素计算进去的从而达到清除浮动效果
BFC的表象认识的更多相关文章
- 深入理解BFC
定义 在解释BFC之前,先说一下文档流.我们常说的文档流其实分为定位流.浮动流和普通流三种.而普通流其实就是指BFC中的FC.FC是formatting context的首字母缩写,直译过来是格式化上 ...
- “fixed+relative==absolute”——对BFC的再次思考
好久没写博客了,刚好今天跨年夜没约到什么妹子,在家宅着不如写点东西好了. 需求 昨天晚上,给公司年会做一个移动端的投票页面,遇到一个UI优化的问题: · 正文内容少于一屏时,投票提交按钮固定显示在页面 ...
- 关于CSS inline-block、BFC以及外边距合并的几个小问题
CSS inline-block和BCF对于初学者来说,总是弄不太明白,下面记录下我在学习这块知识的过程中遇到的几个问题,供大家参考,有不足的地方,欢迎大家批评指正. 一.在什么场景下会出现外边距合并 ...
- 我对BFC的理解
最初这篇文章打算回答寒冬大神的第一问,谈谈CSS布局.本来呢我以为布局主要涉及float跟display相关属性,以及他们的包含框.静态位置等等.后来看了大神的一片面试文章,嗯?这里怎么还有个BFC, ...
- CSS3与页面布局学习总结(三)——BFC、定位、浮动、7种垂直居中方法
一.BFC与IFC 1.1.BFC与IFC概要 BFC(Block Formatting Context)即“块级格式化上下文”, IFC(Inline Formatting Context)即行内格 ...
- 前端精选文摘:BFC 神奇背后的原理
BFC 已经是一个耳听熟闻的词语了,网上有许多关于 BFC 的文章,介绍了如何触发 BFC 以及 BFC 的一些用处(如清浮动,防止 margin 重叠等).虽然我知道如何利用 BFC 解决这些问题, ...
- BFC的形成条件和特性分析
初学CSS时,我们学到很多有意思的CSS规则,比如外边距塌陷,还有浮动元素的一些特性等,其实这些规则背后都是BFC这个东西在控制,下面我们来看下BFC到底是什么. 什么是BFC BFC(Block f ...
- BFC布局
这几天都没有写博客,自己的懒惰又要跑出来了,发觉不能再这样下去了,不然就什么都不想干了,然后将之前已经写得差不多的博客重新检视了一遍.这篇博客已经写得挺久的了,但是一直没有发布,现在补充了一些,也让自 ...
- 浅析CSS中的BFC和IFC
1. 为什么会有BFC和IFC 首先要先了解两个概念:Box和formatting context: Box:CSS渲染的时候是以Box作为渲染的基本单位.Box的类型由元素的类型和display属性 ...
随机推荐
- JS常见算法题目
最近收集了几个经典JS题目,比较有代表性,分享一下: 1.xiaoshuo-ss-sfff-fe 变为驼峰xiaoshuoSsSfffFe function getCamelCase(str ...
- 《算法竞赛进阶指南》0x10 基本数据结构 Hash
Hash的基本知识 字符串hash算法将字符串看成p进制数字,再将结果mod q例如:abcabcdefg 将字母转换位数字(1231234567)=(1*p9+2*p8+3*p7+1*p6+2*p5 ...
- vdbench 数据校验测试方法
[root@dntosu001 vdbench]# cat pbd.conf*SD: Storage Definition*WD: Workload Definition*RD: Run Defini ...
- linux 学习第十一天
一.配置服务说明 1.1.linux系统中的一切都是文件 1.2.配置一个服务就是在修改去配置文件 1.3.要想让新的配置文件立即生效,需要重启对应的服务 二.配置网卡 2.1.编辑配置文件 vim ...
- 使用img标签能使用background-size:conver一样的效果
使用css img { object-fit: cover; object-position:left center; } 就可以达到 和 background-size:cover; 一样的效果 共 ...
- 新增时json类型报错
新增时出错:如下 实体类中字段类型没有对应上,vue页面中修改跳转页面的路径:使用params...
- Makefile: (实验) 目标命令的结束标志
实验表示测试出来的结论,没有代码理论依据 Makefile中,目标对应的命令结束标记是什么呢?换句话说,Make中怎么判断目标的最后一条命令? 例如常见的目标编写如下: test1: echo &qu ...
- python 位运算【实测】
python 位运算符为 << 左移,>> 右移 3<<2 既 3 的二进制整体向左移两位 : : 可以这么算 3*(2的2次方)= 12 11>> ...
- Linux入门第五天——shell脚本入门(上)基本概念
一.什么是shell脚本 Shell 脚本(shell script),是一种为 shell 编写的脚本程序. 二.shell入门 1.先导知识 变量知识补充:https://www.cnblogs. ...
- 20155229 2016-2017-2 《Java程序设计》第三周学习总结
20155229 2016-2017-2 <Java程序设计>第三周学习总结 教材学习内容总结 第四章 BigDecimal提供有plus().substract().multiply() ...