BFC(Block Formatting Context)块级格式化上下文。它是一个独立的渲染区域。
它决定了块级元素如何对它的内容进行布局,以及与其他元素的关系和相互关系。
margin重叠:
相邻元素又一个触发了BFC,相邻元素上下margin不会重叠,跟父元素是不是BFC布局无关
margin传递:
如果父元素没有padding和border,那么父元素的maring会和子元素的margin重叠,将父元素设置为BFC,就可以避免这种情况
弹性布局(FFC-Flex Formattig-Contexts 自适应格式化上下文)
CSS 有两个经典的布局-圣杯布局和双飞翼布局
他们的共同点
#container {
width: 500px;
height: 500px;
padding-left: 200px;
padding-right: 150px;
background: gray;
}
#center {
background: red;
width: 100%;
height: 100%;
}
#left {
background: yellow;
width: 200px;
height: 100%;
margin-left: -100%;
position: relative;
right: 200px;
}
#right {
background: green;
width: 150px;
height: 100%;
margin-right: -150px;
}
.column {
float: left;
}
双飞翼布局的DOM结构与圣杯布局的区别是用container仅包裹住center,另外将.column类从center移至container上。
center
left
right
.wrap {
width: 500px;
height: 300px;
background: gray;
}
#container {
width: 100%;
background: red;
}
#center {
margin-left: 200px;
margin-right: 150px;
}
#left {
background: yellow;
width: 200px;
margin-left: -100%;
}
#right {
background: green;
width: 150px;
margin-right: -150px;
}
.column {
float: left;
height: 100%;
}
圣杯布局有个问题,当面板的main部分比两边的子面板宽度小的时候,布局就会乱掉。因此也就有了双飞翼布局来克服这个问题。如果不增加任何标签,想实现更完美的布局非常困难,因此双飞翼布局在主面板上选择了添加一个标签。
所谓的圣杯布局就是左右两边大小固定不变,中间宽度自适应。我们可以用浮动、定位以及flex这三种方式来实现
left
center
right
#container {
width: 500px;
display: flex;
}
#left{
background: red;
flex:0 0 100px;
}
#center{
flex:1;
background: blue;
}
#right{
background: red;
flex:0 0 100px;
}
left
center
right
#container {
width: 500px;
position: relative;
padding-left: 100px;
padding-right: 100px;
}
#left{
background: red;
width: 100px;
position: absolute;
left: 0;
top: 0;
}
#center{
background: blue;
width: 100%;
}
#right{
background: red;
width: 100px;
position: absolute;
top: 0;
right:0
}
center
left
right
#container > div {
height: 100px;
float: left;
}
#container {
width: 500px;
}
#left{
background: red;
width: 100px;
margin-left: -100%;
}
#center{
background: blue;
margin-left: 100px;
margin-right: -100px;
}
#right{
background: red;
width: 100px;
margin-right: -100px;
}
参考链接:
CSS布局中圣杯布局与双飞翼布局的实现思路差异在哪里?