在进行html布局及css编写的时候,你是否遇到过这样的问题:css
...html
一般咱们使用块级格式化上下文(BFC)就能解决。前端
块格式化上下文(Block Formatting Context,BFC) 是Web页面的可视化CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其余元素交互的区域。浏览器
FC(formatting context)直译过来是格式化上下文,它是页面中的一块渲染区域,有一套渲染规则,决定了其子元素如何布局,以及和其余元素之间的关系和做用。安全
BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,而且容器元素不会影响兄弟元素的布局。ide
column-span 为 all 的元素始终会建立一个新的BFC,即便该元素没有包裹在一个多列容器中。布局
下面例子解释如何让浮动内容和父元素等高,清楚浮动负面影响post
htmlflex
<div class="outer"> <div class="float">I am a floated element.</div> I am text inside the outer box. </div>
cssspa
.outer { border: 5px dotted rgb(214,129,137); border-radius: 5px; width: 450px; padding: 10px; margin-bottom: 40px; } .float { padding: 10px; border: 5px solid rgba(214,129,137,.4); border-radius: 5px; background-color: rgba(233,78,119,.4); color: #fff; float: left; width: 200px; margin: 0 20px 0 0; }
经过给左侧文字设置向左浮动实现文字环绕效果是很常见的作法,当文本足够长时,会看到以下效果,父元素能够彻底包裹子元素。
但事实上,float中的文字已经脱离文档,若是文档流文字过少,浮动元素就会溢出父元素边缘。
这时候为父元素设置overflow: auto
或者除invisible
默认值以外的任何有效值都能建立BFC解决这个问题,使父元素包含浮动元素
.outer { overflow: auto; }
外边距折叠的规则是:当两个块级元素相邻而且在同一个块级格式化上下文时,它们垂直方向上的外边距会产生重叠
html
<div class="outer"> <p>I am paragraph one and I have a margin top and bottom of 20px</p> <p>I am paragraph two and I have a margin top and bottom of 20px</p> </div>
css
.outer { background-color: #ccc; margin: 0 0 40px 0; } p { padding: 0; margin: 20px 0 20px 0; background-color: rgb(233,78,119); color: #fff; }
因为p元素的边缘和外部div上的边距之间没有内容,所以二者将会合并,所以段落最终与框的顶部和底部齐平。咱们在段落的上方和下方看不到任何灰色。以下图:
当父元素设置了BFC以后,父元素与子元素p重叠区域将再也不合并
.outer { background-color: #ccc; margin: 0 0 40px 0; overflow: auto; }
依然像上面例子文字环绕效果的布局和样式
html
<div class="outer"> <div class="float">I am a floated element.</div> <div class="text">I am text...</div> </div>
css
.float{ float: left; }
这时候若是不想要右侧文字环绕浮动文字盒子,在左侧div设置浮动的状况下,我能够经过使右边div成为BFC,使两个兄弟div互相隔离、互不影响,从而达到去除文字环绕的效果。
.text { overflow: auto; }
建立BFC的许多方法一般会带来一些反作用,目前为止彷佛最安全的就是overflow
属性,但某些状况下咱们不须要滚动条,此时滚动条就变成了这种方式的反作用,所以display
有个新的属性flow-root
能够在任何须要建立BFC场景下使用,它而且不会带来任何反作用。
flow-root
浏览器兼容状况:
浏览器对此值的支持是有限的,若是要在不支持flex或网格布局浏览器建立回退,了解BFC阻止浮动元素的负面影响十分必要。
PS:更多前端资讯、技术干货,请关注公众号「前端新视界」