当前位置: 首页 > Web前端 > CSS

了解CSS布局和块格式化上下文_0

时间:2023-03-30 15:29:27 CSS

在做html布局和css编写的时候,有没有遇到过这样的问题:子元素设置为浮出文档流后,父元素无法完全包裹起来实现子元素浮动在两列布局中,另一个子元素与浮动子元素的垂直边距重叠......通常我们可以使用块级格式化上下文(BFC)来解决它。什么是BFC?块格式化上下文(BlockFormattingContext,BFC)是网页可视化CSS渲染的一部分,是块框布局过程发生的区域,也是浮动元素与其他元素交互的区域。FC(formattingcontext)直译为格式化上下文,它是页面中的一个渲染区域,有一套渲染规则,决定了它的子元素如何布局,以及与其他元素的关系和作用。BFC在页面上是一个隔离的、独立的容器。容器内的子元素不会影响外面的元素,容器元素不会影响兄弟元素的布局。什么情况下会创建BFC根元素或者包含根元素的元素浮动元素(元素的float不是none)绝对定位元素(元素的position是absolute或者fixed)内联块元素(元素的显示是inline-block)表格单元格(该元素的显示为table-cell,HTML表格单元格默认为该值)表格标题(该元素的显示为table-caption,HTML表格标题默认为该值)匿名表格单元格element(元素的显示为table、table-row、table-row-group、table-header-group、table-footer-group(分别为HTMLtable、row、tbody、thead、tfoot的默认属性)或inline-table)overflow值为不可见的块元素display值为flow-root的元素(新方法,文末会提到)contain值为layout、content或strictelastic元素(直接子元素显示为flex或inline-flex元素)网格元素(显示为网格或内联网格元素的直接子元素)多列容器(列数或列宽不是自动的元素,包括列数为1)的元素column-span都是alwayscreateanewBFC,even元素没有包裹在多列容器中。常见应用场景让父元素包含浮动元素下面的例子说明如何让浮动内容等于父元素的高度,清除浮动带来的负面影响html我是一个浮动元素。

我是外框内的文本。
css.outer{border:5pxdottedrgb(214,129,137);边界半径:5px;宽度:450px;填充:10px;底部边距:40px;}。浮动{填充:10px;border:5pxsolidrgba(214,129,137,.4);边界半径:5px;背景色:rgba(233,78,119,.4);颜色:#fff;向左飘浮;宽度:200px;margin:020px00;}很常见的做法是通过设置左侧文本向左浮动来实现文字环绕效果。当文字足够长时,你会看到如下效果,父元素可以完全包裹住子元素。但实际上,float中的文字已经和文档分离了。如果文档流中的文本太少,浮动元素会溢出父元素的边缘。这时候给父元素设置overflow:auto或者除invisible默认值之外的任何有效值都可以创建一个BFC来解决这个问题,让父元素包含浮动元素。outer{overflow:auto;}BFC防止垂直边距重叠折叠规则是:当两个块级元素相邻且在同一个块级格式化上下文中时,它们的垂直边距会重叠html

我是第一个段落,顶部和底部的边距为20px

我是第二个段落,顶部和底部的边距为20px

css.outer{背景颜色:#ccc;边距:0040px0;}p{填充:0;边距:20px020px0;背景色:rgb(233,78,119);color:#fff;}由于p元素上的margin和外部div上的margin之间没有内容,因此两者将合并,因此段落最终与框的顶部和底部齐平。我们没有看到段落上方和下方有任何灰色。如下图所示:当父元素设置BFC时,父元素与子元素p之间的重叠区域将不再合并。外{背景颜色:#ccc;边距:0040px0;overflow:auto;}BFC防止文字换行文字换行效果的布局和样式如上例html我是浮动元素。
Iamtext...css.float{float:left;}这时候如果不想让右边的文字包围浮动文本框,如果左边的div设置为float,我可以把右边的div做成BFC,两个兄弟div相互隔离,互不影响,从而达到去掉文字换行的效果。.text{overflow:auto;}一种创建BFC的新方式许多创建BFC的方式通常都会有一些副作用,目前看来最安全的似乎是overflow属性,但在某些情况下我们不需要滚动条,此时scrollbars成为了这个方法的一个副作用,所以display有一个新的属性flow-root,可以用在任何需要创建BFC的场景中,并且不会带来任何副作用。flow-root浏览器兼容性:浏览器对此值的支持是有限的。如果要在不支持flex或网格布局的浏览器中创建回退,则有必要了解BFC阻止浮动元素的负面影响。PS:更多前端资讯和技术干货,请关注公众号《前端新视野》