BFC

1.box bfc概念
box:css布局的基本单位
box是css布局的对象和基本单位,直观说,一个页面由多个box组成
元素的类型和display属性,决定了这个box的类型,不同类型的box,会参与不同的formatting Context
因此,box内的元素会以不同方式渲染,有哪些盒子:
block-level box:
display属性为block,list-item,table的元素,会生成block-level box,并参与block formatting context;
inline-level box:
display属性为line,inline-block,inline-table的元素,会生成inline-level box,并参与inline formatting context

formatting context:
formatting context是w3c css2.1规范中的一个概念
它是页面中的一块渲染区域,并且有一套渲染规则吗,它决定了其子元素该如何定位,以及它和其它元素的关系和相互作用. 最常见的formatting context 是block formatting context和inline formatting context
2bfc是什么
bfc直译为块级格式化上下文,他是一个独立的渲染区域只有block-level box参与
它规定了内部的block-level box 如何布局,并且与这个区域外部毫不相干
3bfc布局规则
内部的box会在垂直方向一个一个放置
bfc的区域不会和float box重叠 //实现两列布局
内部box的垂直方向距离由margin决定,属于同一个bfc的两个相邻box(块级元素)的margin会重叠
计算bfc高度时候,浮动元素也参与计算(清除浮动 haslayout)
bfc就是页面一个独立容器,容器里面的子元素不会影响到外面的元素,反之亦如此

4bfc什么时候会出现?
根元素
float属性不为none
overflow不为visible
position为absolute或fixed
display为inline-block,table-cell,table-caption,flex,inline-flex

  • 需要注意的是,display:table 本身并不会创建 BFC,但是它会产生匿名框 (anonymous boxes),而匿名框中的 display:table-cell 可以创建新的 BFC,
    换句话说,触发块级格式化上下文的是匿名框,而不是 display:table。所以 通过 display:table 和 display:table-cell 创建的 BFC 效果是不一样的。

实现两列布局:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>两列布局</title>
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			body{
				min-width: 500px;
			}
			div{
				height:200px;
			}
			#left{
				float: left;
				width: 200px;
				background-color: #0000FF;
			}
			#right{
				overflow: hidden;/*开启bfc,让left和right没有重叠*/
				background-color: #7FFFD4;
			}	
		</style>
	</head>
	<body>
		<div id="left">
		left	
		</div>
		<div id="right">
			right
		</div>
	</body>
</html>

在这里插入图片描述实现商品列:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			#wrap{
				
				width: 400px;
				margin: 0 auto;
				border: 1px solid;
				
			}
			#left{
				float: left;
				border: 1px solid #008000;
				height: 200px;
				width: 200px;
				background: url(1.jpg);
				background-position: -150px -150px;
				
				
			}
			#right{
				/*margin-left: 10px; 不行,因为left浮动提升了0.5层级,设置margin是会进下一层*/
				
				padding-left: 10px;
				
				
				/*下面几条一起,实现文字溢出显示省略号*/
				/*display: block;  */
				white-space: nowrap;
				text-overflow: ellipsis;
				overflow: hidden;/*开启bfc,否则文字环绕图片*/
			}
		</style>
	</head>
	<body>
		<div id="wrap">
			<div id="left">
				
			</div>
			<div id="right">
				此产品买一送一此产品买一送一<br>
				此产品买一送一此产品买一送一<br>
				此产品买一送一<br>
				此产品买一送一<br>
				此产品买一送一<br>
				此产品买一送一<br>
				
				
			</div>
			
		</div>
		
	</body>
</html>

在这里插入图片描述margin重叠:

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<!--
		属于同一个bfc的两个相邻box(块级元素)的margin会重叠
			防止margin重叠:
				外层元素能用padding代替就用padding
				外层元素 overflow:hidden;

				内层元素绝对定位 postion:absolute:
				内层元素 加float:left;或display:inline-block;
				内层元素padding:1px;
				内层元素透明边框 border:1px solid transparent
		-->
		<style type="text/css">
			*{
				margin: 0;
				padding: 0;
			}
			/*margin重叠1*/
			#up,#down{
				width: 50px;
				height:50px;
				margin:50px;
				background-color: #0000FF;
			}
			
			/*margin重叠2*/
			#one{
				overflow: hidden;/*开启bfc,使他们分别在两个bfc中,防止margin重叠*/
				height: 300px;
				width: 300px;
				margin: 50px;
				background-color: #7FFFD4;
			}
			#two{
				height:30px;
				width:30px;
				margin: 50px;
				background-color: red;
				
			}
			
			
		</style>
	</head>
	<body>
		<div id="up">
			up
		</div>
		<br><!--让他们隔开,防止margin重叠 -->
		<div id="down">
			down
		</div>
		<div id="one">
		   <div id="two">
			
		   </div>
			
		</div>
	</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值