邢台地区网站建设口碑好,个人物流网站建设方案,旅游网站建设方案书,网站建设易网宣在页面布局的时候#xff0c;经常出现以下情况#xff1a;
这个元素高度怎么没了#xff1f;这两栏布局怎么没法自适应#xff1f;这两个元素的间距怎么有点奇怪的样子#xff1f;......
原因是元素之间相互的影响#xff0c;导致了意料之外的情况#xff0c;这里就涉及…在页面布局的时候经常出现以下情况
这个元素高度怎么没了这两栏布局怎么没法自适应这两个元素的间距怎么有点奇怪的样子......
原因是元素之间相互的影响导致了意料之外的情况这里就涉及到BFC概念
BFCBlock Formatting Context即块级格式化上下文它是页面中的一块渲染区域并且有一套属于自己的渲染规则
内部的盒子会在垂直方向上一个接一个的放置对于同一个 BFC 的俩个相邻的盒子的 margin 会发生重叠与方向无关。每个元素的左外边距与包含块的左边界相接触从左到右即使浮动元素也是如此BFC 的区域不会与 float 的元素区域重叠计算 BFC 的高度时浮动子元素也参与计算BFC 就是页面上的一个隔离的独立容器容器里面的子元素不会影响到外面的元素反之亦然
BFC目的是形成一个相对于外界完全独立的空间让内部的子元素不会影响到外部的元素
触发条件
可以通过如下的设置来触发产生一个BFC
根元素即 HTML 元素浮动元素float 值为 left、rightoverflow 值不为 visible为 auto、scroll、hiddendisplay 的值为 inline-block、inltable-cell、table-caption、table、inline-table、flex、inline-flex、grid、inline-gridposition 的值为 absolute 或 fixed
应用场景
当一个容器具备了 BFC 之后 就可以利用BFC的特性解决很多问题
防止 margin 重叠塌陷
stylep {color: #f55;background: #fcc;width: 200px;line-height: 100px;text-align: center;margin: 100px;}
/style
bodypHaha/ppHehe/p
/body页面显示如下 两个p元素之间的距离为100px发生了margin重叠塌陷以最大的为准如果第一个 P 的margin为 80 的话两个 P 之间的距离还是 100以最大的为准。
前面讲到同一个BFC的俩个相邻的盒子的margin会发生重叠
可以在p外面包裹一层容器并触发这个容器生成一个BFC那么两个p就不属于同一个BFC则不会出现margin重叠
style.wrap {overflow: hidden; // 新的BFC}p {color: #f55;background: #fcc;width: 200px;line-height: 100px;text-align: center;margin: 100px;}
/style
bodypHaha/pdiv classwrappHehe/p/div
/body这时候边距则不会重叠 清除内部浮动
style.par {border: 5px solid #fcc;width: 300px;}.child {border: 5px solid #f66;width: 100px;height: 100px;float: left;}
/style
bodydiv classpardiv classchild/divdiv classchild/div/div
/body页面显示如下 而BFC在计算高度时浮动元素也会参与所以可以触发.par元素生活才能BFC则内部浮动元素计算高度时候也会计算
.par {overflow: hidden;
}实现效果如下 自适应多栏布局
这里举个两栏的布局
stylebody {width: 300px;position: relative;}.aside {width: 100px;height: 150px;float: left;background: #f66;}.main {height: 200px;background: #fcc;}
/style
bodydiv classaside/divdiv classmain/div
/body效果图如下 前面讲到每个元素的左外边距与包含块的左边界相接触
因此虽然.aslide为浮动元素但是main的左边依然会与包含块的左边相接触
而BFC的区域不会与浮动盒子重叠
所以可以通过触发main生成BFC以此适应两栏布局
.main {overflow: hidden;
}这时候新的BFC不会与浮动的.aside元素重叠。因此会根据包含块的宽度和.aside的宽度自动变窄
效果如下 总结
可以看到上面几个案例都体现了BFC实际就是页面一个独立的容器
里面的子元素不影响外面的元素