(块级格式化范围)[DIV/CSS] BFC

来源:互联网 发布:dwg trueview mac 编辑:程序博客网 时间:2024/06/13 20:17

BFC(block formatting contexts),中文翻译块级格式化范围。默认产生BFC的元素只有html,默认产生HASLAYOUT=true的元素则不止html。

通过代码来感受一下BFC到底是用来干什么的(主要根据css对于BFC的一系列规范)
首先是可以产生BFC的方法
1.float的值不为none。
2.overflow的值不为visible。
3.display的值为table-cell, table-caption, inline-block中的任何一个。
4.position的值不为relative和static。
最常用的是overflow:hidden;理由和zoom一样,这样一般不会影响到其他属性。
1.解决包含框高度塌陷,防止浮动子元素越界。

  1. <style type="text/css">
  2. .box{
  3. border:1px solid red;
  4. }
  5. </style>
  6. <body>
  7. <div class="box">
  8. <img style="float:left;width:200px;height:100px;" src="hgk.png">
  9. </div>
  10. </body>
复制代码

我们可以看到div高度塌陷,浮动元素img超出了div的边界

CSS2.1 规范第 10.6.3 部分的高度计算规则,在进行普通流中的块级非替换元素的高度计算时,浮动子元素不参与计算。

CSS2.1 规范第10.6.7部分的高度计算规则,在计算生成了 block formatting context 的元素的高度时,其浮动子元素应该参与计算。

所以我们给box设置overflow:hidden;是其产生BFC从而使其内部的浮动元素参与自生高度的计算

  1. <style type="text/css">
  2. .box{
  3. border:1px solid red;
  4. overflow:hidden;
  5. }
  6. </style>
  7. <body>
  8. <div class="box">
  9. <img style="float:left;width:200px;height:100px;" src="hgk.png">
  10. </div>
  11. </body>
复制代码

父元素被撑开
2.防止与浮动元素重叠

  1. <style type="text/css">
  2. *{
  3. margin:0;
  4. padding:0;
  5. }
  6. .box{
  7. border:1px solid red;
  8. overflow:hidden;
  9. }
  10. .text-content{
  11. width:500px;
  12. background:red;
  13. }
  14. </style>
  15. <body>
  16. <div class="box">
  17. <img style="float:left;width:200px;height:100px;" src="hgk.png">
  18. <p class="text-content">你好啊</p>
  19. </div>
  20. </body>
复制代码

p元素与浮动img元素发生了重叠
由于BFC本身不会与浮动元素叠加,所以只需让p元素产生BFC即刻解决重叠问题,所以我们给p元素添加一个overflow:hidden;(当然还可以添加clear:both来清除图片浮动带来影响)

  1. <style type="text/css">
  2. *{
  3. margin:0;
  4. padding:0;
  5. }
  6. .box{
  7. border:1px solid red;
  8. overflow:hidden;
  9. }
  10. .text-content{
  11. width:500px;
  12. background:red;
  13. overflow:hidden;
  14. /*clear:both;*/
  15. }
  16. </style>
  17. <body>
  18. <div class="box">
  19. <img style="float:left;width:200px;height:100px;" src="hgk.png">
  20. <p class="text-content">你好啊</p>
  21. </div>
  22. </body>
复制代码

3.解决上下相邻两个元素外边距重叠

  1. <style type="text/css">
  2. .rowone{
  3. width:400px;
  4. height:100px;
  5. margin-bottom:20px;
  6. background:red;
  7. }
  8. .rowtwo{
  9. width:400px;
  10. height:100px;
  11. margin-top:20px;
  12. background:green;
  13. }
  14. </style>
  15. <body>
  16. <div class="rowone"></div>
  17. <div class="rowtwo"></div>
  18. </body>
复制代码

间距只有20px,而不是希望得到的40px

根据 CSS 2.1 8.3.1 Collapsing margins 第一条,两个相邻的普通流中的块框在垂直位置的空白边会发生折叠现象。也就是处于同一个BFC中的两个垂直窗口的margin会重叠。

根据 CSS 2.1 8.3.1 Collapsing margins 第三条,生成 block formatting context 的元素不会和在流中的子元素发生空白边折叠。所以解决这种问题的办法是要为两个容器添加具有BFC的包裹容器。

  1. <style type="text/css">
  2. .rowone{
  3. width:400px;
  4. height:100px;
  5. margin-bottom:20px;
  6. background:red;
  7. }
  8. .rowtwo{
  9. width:400px;
  10. height:100px;
  11. margin-top:20px;
  12. background:green;
  13. }
  14. .wrap{
  15. overflow:hidden;
  16. }
  17. </style>
  18. <body>
  19. <div class='wrap'>
  20. <div class="rowone"></div>
  21. </div>
  22. <div class='wrap'>
  23. <div class="rowtwo"></div>
  24. </div>
  25. </body>
0 0
原创粉丝点击