dazhifu 2019-06-28
Block Formatting Contexts (BFC,块级格式化上下文)就是一个块级元素 的渲染显示规则 (可以把 BFC 理解为一个封闭的大箱子,,容器里面的子元素不会影响到外面的元素)
代码如下:
<!doctype html> <html> <head> <meta charset="utf-8"/> <title>外边距折叠</title> <style> body{ margin:0; } .box{ width:500px; height:500px; margin:0 auto; } .btm1{ width:100px; height:100px; background-color:orange; margin:100px; } .btm2{ width:100px; height:100px; background-color:red; margin:100px ; } </style> </head> <body> <div class="box"> <div class="btm1">上下100margin</div> <div class="btm2">上下100margin</div> </div> </body> </html>
效果图:
第一个div的下边距和第二个div的上边距发声了重叠,所以两个盒子之间距离只有100px,而不是200px。
解决方法:
代码如下:
<!doctype html> <html> <head> <meta charset="utf-8"/> <title>外边距折叠</title> <style> body{ margin:0; } .box{ width:500px; height:500px; margin:0 auto; } .btm1{ width:100px; height:100px; background-color:orange; margin:100px; } .btm2{ width:100px; height:100px; background-color:red; margin:100px ; } .container{ overflow: hidden; } </style> </head> <body> <div class="box"> <div class="container"> <div class="btm1">上下100margin</div> <div> <div class="container"> <div class="btm2">上下100margin</div> <div> </div> </body> </html>
效果图:
这次我们可以清晰的看清两个中间是200px;并没用重叠。
代码如下:
<!doctype html> <html> <head> <meta charset="utf-8"/> <title>高度塌陷</title> <style> body{ margin:0; } .box{ width:500px; margin:0 auto; border:1px solid green; } .btm1{ width:100px; height:100px; background-color:orange; float:left; } .btm2{ background-color:red; } </style> </head> <body> <div class="box"> <div class="btm1">浮动</div> <div class="btm2"></div> </div> </body> </html>
效果图:
由于容器内元素浮动,脱离了文档流,所以容器只剩下 2px 的边距高度。如果使触发容器的 BFC,那么容器将会包裹着浮动元素。
代码如下:
<!doctype html> <html> <head> <meta charset="utf-8"/> <title>高度塌陷</title> <style> body{ margin:0; } .box{ width:500px; overflow:hidden; margin:0 auto; border:1px solid green; } .btm1{ width:100px; height:100px; background-color:orange; float:left; } .btm2{ background-color:red; } </style> </head> <body> <div class="box"> <div class="btm1">浮动</div> <div class="btm2"></div> </div> </body> </html>
代码如下:
<!doctype html> <html> <head> <meta charset="utf-8"/> <title>高度塌陷</title> <style> body{ margin:0; } .box{ width:500px; overflow:hidden; margin:0 auto; border:1px solid green; } .btm1{ width:100px; height:100px; background-color:orange; float:left; } .btm2{ width:300px; height:300px; background-color:red; } </style> </head> <body> <div class="box"> <div class="btm1">浮动</div> <div class="btm2"> 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! </div> </div> </body> </html>
效果图:
解决方法:
通过触发btm2的BFC解决
代码如下:
<!doctype html> <html> <head> <meta charset="utf-8"/> <title>高度塌陷</title> <style> body{ margin:0; } .box{ width:500px; overflow:hidden; margin:0 auto; border:1px solid green; } .btm1{ width:100px; height:100px; background-color:orange; float:left; } .btm2{ width:300px; height:300px; background-color:red; } .bb{ overflow:hidden } </style> </head> <body> <div class="box"> <div class="btm1">浮动</div> <div class="bb"> <div class="btm2"> 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! 欢迎大家观看! </div> </div> </div> </body> </html>
效果图: