1、haslayout
ie特有的布局
2、BFC
类似布局,一块独立渲染的区域,IE6、7没有BFC的机制
触发BFC:
overflow不为visible
浮动(float样式不为none )
绝对定位(position样式为absolue或者fixed )
display为inline-block / table-cell / table-caption / flex / table-flex
BFC特性
内部的Box会在垂直方向,从顶部开始一个接一个地放置
Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生叠加
每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此
BFC的区域不会与float box叠加
BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素,反之亦然
计算BFC的高度时,浮动元素也参与计算
应用:
两列布局
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
body{
min-width: 600px;
}
div{
height: 200px;
}
#left{
width: 200px;
background: pink;
float: left;
}
#right{
background: deeppink;
overflow: hidden; /*触发BFC*/
}
</style>
</head>
<body>
<div id="left">left</div>
<div id="right">right</div>
</body>
</html>
margin叠加
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#wrap{
width: 300px;
height: 300px;
background: deeppink;
margin: 50px;
overflow: hidden;/*触发BFC*/
}
#inner{
width: 150px;
height: 150px;
background: pink;
margin: 50px;
}
</style>
</head>
<body>
<div id="wrap">
<div id="inner">
</div>
</div>
</body>
</html>
清浮动
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<!--
清除浮动:
让浮动的子元素库撑开父级的高度
02.通过开启BFC
浮动盒子的特点,定位盒子的特点:高宽都由内容撑开
-->
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#wrap{
border: 1px solid;
/*触发bfc*/
overflow: hidden;
/*拥有布局*/
/*zoom:1;*/
/*position: absolute;*/
/*float: left;*/
}
#inner{
float: left;
width: 200px;
height: 200px;
background: pink;
}
</style>
</head>
<body>
<div id="wrap">
<div id="inner">
</div>
</div>
</body>
</html>
3、清除浮动
子元素撑开父元素
###清除浮动
1.给父级加高度
扩展性不好
2.开启BFC
overflow:hidden
定位
浮动
ie 6 7底下不支持BFC
3.br标签
ie6 不支持
违反了结构 行为 样式相分离的原则
4.空标签
违反了结构 行为 样式相分离的原则
ie6下元素的最小高度为19px
可以尝试给元素的fontsize设为0---> 2px
5.伪元素 + 开启haslayout
因为ie6 7 下不支持伪元素
所以要额外的去开启haslayout
几种方式:
伪元素清除浮动,好用
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<!--
清除浮动:
让浮动的子元素库撑开父级的高度
05.伪元素
-->
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#wrap{
border: 1px solid;
}
#inner{
float: left;
width: 200px;
height: 200px;
background: pink;
}
/*开启haslayout*/
.xfz{
*zoom: 1;
}
/*ie 6 7 不支持伪元素*/
.xfz:after{
content: "";
display: block;
clear: both;
}
</style>
</head>
<body>
<div id="wrap" class="xfz">
<div id="inner">
</div>
</div>
</body>
</html>
空标签
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<!--
清除浮动:
让浮动的子元素库撑开父级的高度
04.空标签清浮动
-->
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#wrap{
border: 1px solid;
}
#inner{
float: left;
width: 200px;
height: 200px;
background: pink;
}
</style>
</head>
<body>
<div id="wrap">
<div id="inner">
</div>
<div style="clear: both;"></div>
</div>
</body>
</html>
br标签
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<!--
清除浮动:
让浮动的子元素库撑开父级的高度
03.br标签清浮动
-->
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#wrap{
border: 1px solid;
}
#inner{
float: left;
width: 200px;
height: 200px;
background: pink;
}
</style>
</head>
<body>
<div id="wrap">
<div id="inner">
</div>
<br clear="all" />
</div>
</body>
</html>
BFC清除浮动
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<!--
清除浮动:
让浮动的子元素库撑开父级的高度
02.通过开启BFC
浮动盒子的特点,定位盒子的特点:高宽都由内容撑开
-->
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#wrap{
border: 1px solid;
/*触发bfc*/
overflow: hidden;
/*拥有布局*/
/*zoom:1;*/
/*position: absolute;*/
/*float: left;*/
}
#inner{
float: left;
width: 200px;
height: 200px;
background: pink;
}
</style>
</head>
<body>
<div id="wrap">
<div id="inner">
</div>
</div>
</body>
</html>
父元素加高度
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<!--
清除浮动:
让浮动的子元素库撑开父级的高度
01.直接给父级加高度(扩展性不好)
-->
<style type="text/css">
*{
margin: 0;
padding: 0;
}
#wrap{
border: 1px solid;
height: 300px;
}
#inner{
float: left;
width: 200px;
height: 200px;
background: pink;
}
</style>
</head>
<body>
<div id="wrap">
<div id="inner">
</div>
</div>
</body>
</html>
参考:
http://www.html-js.com/article/1866
http://www.qianduan8.com/949.html
https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/Block_formatting_context
https://www.w3cplus.com/css/understanding-block-formatting-contexts-in-css.html