首页 / 知识
关于CSS里的块级格式
2023-04-11 15:07:00
1.BFC定义
BFC(Blockformattingcontext)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-levelbox(块级元素)参与,它规定了内部的Block-levelBox如何布局,并且与这个区域外部毫不相干.
通俗地来说:创建了BFC的元素就是一个独立的盒子,里面的子元素不会在布局上
影响外面的元素(里面怎么布局都不会影响外部),BFC任然属于文档中的普通流
2.BFC的生成:
知道了BFC怎么触发BFC
满足以下条件之一都可以触发BFC,变身为BFC
根元素
float属性不为none
position不为static和relative
overflow不为visible
display为inline-block,table-cell,table-caption,flex,inline-flex
你会发现BFC无处不在,只是自己用的时候不知道而已
3.BFC布局规则:
变身为BFC后有什么特性呢,以下:
内部的Box会在垂直方向,一个接一个地放置。
Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
每个元素的marginbox的左边,与包含块borderbox的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
BFC的区域不会与floatbox重叠。
BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
计算BFC的高度时,浮动元素也参与计算
4.BFC作用:
用起来comeboby
1.防止外边距重叠
bfc导致的属于同一个bfc中的子元素的margin重叠(Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠)
问题:由图可以看到,String1和String2之间只有20px的margin,按理来说应该是40px,但这是在bfc中导致了他们的margin重叠
代码:
<style>.container1{
/*通过overflow:hidden可以创建bfc*/
overflow:hidden;
background-color:red;
width:300px;
}
.sub1{
margin:20px0px;
background-color:#dea;
}</style><divclass="container1">
<divclass="sub1">String1</div>
<divclass="sub1">String2</div></div>
解决方法:我们可以在div外面包裹一层容器,并触发该容器生成一个BFC。那么两个div便不属于同一个BFC,就不会发生margin重叠了。
代码:
<style>
.newbfc{
overflow:hidden;
}</style><divclass="container1">
<divclass="sub1">String1</div>
<divclass="newbfc"><divclass="sub1">String2</div></div></div>
2.清除浮动:
问题:当元素的子元素都浮动后,会出现高度坍塌的现象,即父容器的高度不会被撑开
代码:
<style>
.pre2{
width:200px;
border:2pxsolidred;
}
.float1,.float2{
width:100px;
height:100px;
float:left;
}
.float1{
background-color:#dee;
}
.float2{
background-color:#dcc;
}</style><divclass="pre2">
<divclass="float1"></div>
<divclass="float2"></div></div>
解决方法:
bfc的规则:计算BFC的高度时,浮动元素也参与计算所以只要将父容器设置为bfc就可以把子元素包含进去:
这个容器将包含浮动的子元素,它的高度将扩展到可以包含它的子元素,在这个BFC,这些元素将会回到页面的常规文档流。
.pre2{
width:200px;
border:2pxsolidred;
/*设置overflow*/
overflow:hidden;
}
3.解决布局:防止文字环绕
代码:
<style>.container2{
overflow:hidden;
width:200px;
}
.box{
float:left;
width:100px;
height:30px;
background-color:#daa;
}</style><divclass="container2">
<divclass="box"></div>
<pstyle="background-color:#eea">sdfadsfdfffffffffdsfsfffffsfdfsdsdfsdffffffff</p></div>
这个p元素并没有移动,但是它却出现在浮动元素的下方。p元素的lineboxes(指的是文本行)进行了移位。此处lineboxes的水平收缩为浮动元素提供了空间。
bfc的规则:每个元素的marginbox的左边,与包含块borderbox的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
解决这个问题只要将p元素添加overflow:hidden使其成为一个新的bfc就可以了
本文转载自中文网 |
最新内容
相关内容
python如何读取列表中元素的位置?
python如何读取列表中元素的位置?,位置,数据,异常,培训,字符串,元素,索引,方法,示例,结果,python读取列表中元素位置的方法:1、使用index()方python中获取路径的三种方法
python中获取路径的三种方法,工作,代码,情况,培训,下来,路径,文件,也就是,桌面,目录,python中获取路径总结下来分为三种情况:1、获取工作目录python如何调用另一个文件夹中的内
python如何调用另一个文件夹中的内容?,系统,培训,文件,模块,内容,路径,函数,所在,前缀,语句,python中调用另外一个文件夹中的内容:1、同一文件python里小数如何表述?
python里小数如何表述?,银行,培训,小数,位数,问题,精度,表示,以上,存在,更多,1、Python中的小数存在精度问题:>>>0.1+0.1+0.1-0.35.5511151231python怎么找出所有的数字?
python怎么找出所有的数字?,数字,培训,代码,小数点,小数,字符串,整数,表达式,含义,思路,python中获取字符串中所有数字的方法:1、使用正则表达Python怎么取出列表中的相邻元素?
Python怎么取出列表中的相邻元素?,代码,异常,培训,元素,指针,序列,对象,表示,语句,函数,1、python的迭代器。iter()能把一个序列生成为一个和如何在python代码中指定保存的文件
如何在python代码中指定保存的文件格式,代码,培训,文件格式,格式,二进制文件,文件,后缀,以上,方法,更多,python指定保存文件格式的方法:1、保Python如何复制文件中的内容
Python如何复制文件中的内容,盘中,数据,培训,文件,内容,方法,文件夹,路径,源文件,文件名,python复制文件中内容的方法:1、使用shutil.copyfilepython函数里面形参和实参一样吗?
python函数里面形参和实参一样吗?,培训,函数,参数,里面,变量,实际,形式,全称,示例,后面,python函数里面形参和实参不一样。形参全称是形式参实数是不是python的数据类型?
实数是不是python的数据类型?,数字,标准,培训,实数,数据类型,数轴,复数,有限小数,无理数,虚数,实数是python的数据类型。实数,是有理数和无理linux下怎么查看python的包
linux下怎么查看python的包,软件,培训,工具,管理,命令,格式,详细信息,下面,以上,参数,linux中可以使用piplist命令查看安装的python包。pip是python中的open函数如何编码?
python中的open函数如何编码?,数据,系统,可取,培训,文件,参数,函数,时候,表示,模式,python中的open函数可以通过在打开文件时添加encoding参