前端笔记

BFC

2018-05-13  本文已影响4人  好奇男孩

2.BFC

BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。

哪些元素会生成BFC?

1、根元素
2、float属性不为none
3、position为absolute或fixed
4、display为inline-block, table-cell, table-caption, flex, inline-flex
5、overflow不为visible

BFC的特性

BFC的作用:

1.外边距合并

外边距合并指的是,两个在普通文档流中的“相邻”元素外边距相遇的时候发生合并的情况。这个所谓的“相邻”可以是父子关系相邻,兄弟关系相邻,甚至如果一个元素内部没有东西,自身的上下边距相遇时都会发生外边距合并。

合并的结果为: 当两个外边距都是正数时,取两者之中的较大者;当两个外边距都是负数时,取两者之间绝对值较大者;当两个外边距一正一负时,取的是两者的和。

外边距合并的具体情况:
a.父子关系的合并

假如说,父元素和子元素在正常的文档流当中。而且父元素没有边框或者padding,那么父子之间就会发生外边距合并。
(简单的解决方法:

b.兄弟关系的合并:

如果两个兄弟元素在正常的文档流当中,会产生外边距合并。
(简单的解决方案:只设置一个外边距)

c.自身的合并

一个元素如果里面没有东西,也没有边框和padding,那么它自身的外边距就会融合,也会发生外边距合并
(简单的解决方案:
1.给自身加边框;2.给自身加padding)

阻止相邻元素外边距合并:

另外的方法创建BFC:
1.设置float属性不为none;
2.设置position为absolute或fixed;
3.设置display为inline-block, flex, 或者inline-flex
4.设置:overflow不为visible
但是设置这些属性,要了解它们的副作用并修复

<html>
<head>
  <meta charset="utf-8">
  <title>JS Bin</title>
</head>
<body>
  <div id="header">
    <div>  <h1>hello world</h1></div>
  
  </div>
   <div class="detail">
     内容
   </div>
  <div class="footer1">
<!--     footer1 -->
  </div>
    <div class="footer2">
    footer2
  </div>
</body>
</html>
#header{
  background-color: red;
  margin-bottom:40px ;
/*   border:1px solid #333 */
    /* padding: 1px; */
 overflow: hidden;
  /* float: left;
  width: 100%; */
  /* display: inline-block;
  width: 100%; */
 /*  position: absolute; */
}
#header h1{
  margin-top: 50px;
}
.detail{
  /* float: left;
  clear: both; */
  overflow: hidden;
  margin-top: 30px;
  margin-left: 30px;
  background-color: #00f;
}
.footer1{
  background-color: #0f0;
  margin: 30px;
}
.footer2{
  background-color: yellow;
}
14.png

2.包含浮动:计算BFC的高度时,浮动元素也参与计算

</head>
<body>
<header>
  <h1>hello world</h1>
  <nav>
    <ul>
      <li><a href="">1</a></li>
      <li><a href="">2</a></li>
      <li><a href="">3</a></li>
    </ul>
  </nav>
</header>
</body>
body{
  background-color: grey;
  margin: 0;
}
header{
    background-color: red;
    overflow:hidden;
  }
ul{
  list-style: none;
}
nav{
  background-color: pink;
  float: left;
}
nav li{
  float: left;
  padding: 10px;
}
13.png
上一篇 下一篇

猜你喜欢

热点阅读