圣杯布局和双飞翼布局的理解和区别, 并用代码实现

作用:
圣杯布局和双飞翼布局解决的问题都是一样的, 就是两边定宽,中间自适应的三栏布局.中间栏要放在文档流前面有线渲染.
区别:
圣杯布局: 为了中间的内容不被遮挡,将中间的 div 设置了左右padding-left 和 padding-right 后,将左右两个 div 用相对布局position:relative并配合 left 和 right 属性,以便左右两栏 div 移动后不会遮挡住中间的 div.
双飞翼布局: 为了中间内容不被遮挡,直接在中间内部 div 创建子 div用于放置内容,在改 div 使用margin-left 和 margin-right为左右两个 div 留出位置.

/**圣杯布局代码**/
<!DOCTYPE html>
 <html>
 	<head>
 		<meta charset="utf-8" />
 		<meta name="viewport" content="width=device-width, initial-scale=1">
 		<title></title>
 	</head>
 	<body>
 		<div id="hd">
 			Header
 		</div>
		<div id="bd">
			<div id="middle">
				middle
			</div>
			<div id="left">
				left
			</div>
			<div id="right">
				right
			</div>
		</div>
 	</body>
 </html>
 <style type="text/css">
 	#hd{
		height: 50px;
		background: #666;
		text-align: center;
	}
	#bd{
		 /*左右栏通过添加负的margin放到正确的位置了,此段代码是为了摆正中间栏的位置*/
		padding:0 200px 0 180px;
		height:100px;
	}
	#middle{
		float: left;
		width: 100%;
		height: 100px;
		background: blue;
	}
	#left{
		float: left;
		width: 180px;
		height: 100px;
		margin-left: -100%;
		background: #0c9;
		/*中间栏的位置摆正之后,左栏的位置也相应右移,通过相对定位的left恢复到正确位置*/
		position:relative;
		left:-180px;
	}
	#right{
		float: left;
		width: 200px;
		height: 100px;
		margin-left: -200px;
		background: #0c9;
		position: relative;
		right: -200px;
	}
 </style>

image.png

/**双飞翼布局**/

<!DOCTYPE html>
 <html>
 	<head>
 		<meta charset="utf-8" />
 		<meta name="viewport" content="width=device-width, initial-scale=1">
 		<title></title>
 	</head>
 	<body>
 		<div id="hd">
 			header
 		</div>
		<div id="md">
			<div id="inside">
				middle
			</div>
		</div>
		<div id="left">
			left
		</div>
		<div id="right">
			right
		</div>
		<div id="footer">
			
		</div>
 	</body>
 </html>
 <style type="text/css">
 	#hd{
		height: 50px;
		background: #666;
		text-align: center;
	}
	#md{
		float:left;
	    width:100%;/*左栏上去到第一行*/     
	    height:100px;
		background:blue;
	}
	#left{
	    float:left;
	    width:180px;
	    height:100px;
	    margin-left:-100%;
	    background:#0c9;
	}
	#right{
	    float:left;
	    width:200px;
	    height:100px;
	    margin-left:-200px;
	    background:#0c9;
	}
	/*给内部div添加margin,把内容放到中间栏,其实整个背景还是100%*/ 
	#inside{
	    margin:0 200px 0 180px;
	    height:100px;
	}
	#footer{  
	   clear:both; /*记得清楚浮动*/  
	   height:50px;     
	   background: #666;    
	   text-align: center; 
	} 
 </style>

image.png

[注:] 这些题目以及答案都是在网上找的,个人认为解答的比较好的 . 出自 https://github.com/haizlin/fe-interview 特此说明

posted @ 2019-09-12 13:39  Evil_r  阅读(663)  评论(0编辑  收藏  举报