圣杯布局和双飞翼布局——实现两端固定中间自适应

286 阅读1分钟

@[toc]

实现两端固定中间自适应的布局方法有多种,其中有名的就是两大金典布局,圣杯布局和双飞翼布局,实现代码如下:

一、圣杯布局

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			html,
			body{
				height: 100%;
				overflow: hidden;
			}
			.container{
				height: 100%;
				padding: 0 200px;
			}
			.left,
			.right{
				width: 200px;
				min-height: 200px;
				background-color: aqua;
			}
			.center{
				width:100%;
				min-height:400px;
				background: orange;
			}
			.left,
			.center,
			.right{
				float: left;
			}
			.left{
				margin-left: -100%;
				position: relative;
				left: -200px;
			}
			.right{
				margin-right: -200px;
			}
		</style>
	</head>
	<body>
		<!-- Clearfix用来清除浮动 -->
		<div class="container clearfix">
			<div class="center"></div>
			<div class="left"></div>
			<div class="right"></div>
			<!-- 没有float的时候都是竖着排的, -->
		</div>
	</body>
</html>

圣杯布局里的div排放顺序:可以这样理解,类似奖杯,左右两边和杯子主身是一起的,所以布局是并列的,center,left,right,因为操作的主要是center部分,因此把center放在最前面。

二、双飞翼布局

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			html,
			body {
				height: 100%;
				overflow: hidden;
			}

			.container,
			.left,
			.right {
				float: left;
			}

			.container {
				width: 100%;
			}

			.container .center {
				margin: 0 200px;
				min-height: 400px;
				background: orange;
			}
			.left,
			.right{
				width:200px;
				min-height:200px;
				background: #00FFFF;
			}
			.left {
				margin-left: -100%;
			}

			.right {
				margin-left: -200px;
			}
		</style>
	</head>
	<body>
		<div class="container">
			<div class="center"></div>
		</div>
		<div class="left"></div>
		<div class="right"></div>
	</body>
</html>

双飞翼布局:两边的翅膀可以用也可以拿开,因此布局时center独立出来,left和right单独放(联想帮助记忆),但是同样主要操作的还是center,所以把center放在最前面。

三、其他布局(1)——定位

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			html,
			body{
				height: 100%;
				overflow: hidden;
			}
			.container{
				position: relative;
				height: 100%;
			}
			.left,
			.right{
				position: absolute;
				top:0;
				width: 200px;
				min-height: 200px;
				background-color: #00FFFF;
			}
			.left{
				left: 0;
			}
			.right{
				right: 0;
			}
			.center{
				margin: 0 200px;
				min-height: 400px;
				background-color: antiquewhite;
			}
		</style>
	</head>
	<body>
		<div class="container">
			<div class="center"></div>
			<div class="left"></div>
			<div class="right"></div>
		</div>
		
	</body>
</html>

父盒子定位为relative,左右子盒子定位为absolute,再做位置上的调整

四、其他布局(2)——flex布局

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			html,
			body{
				overflow: hidden;
			}
			.container{
				display: flex;
				justify-content: space-around;
				height: 100%;
			}
			.left,
			.right{
				/* 0 0 既不放大也不缩小,200占有的宽度 */
				flex:0 0 200px;
				height: 200px;
				background-color: #00FFFF;
			}
			.center{
				flex:1;
				min-height: 400px;
				background-color: antiquewhite;
			}
		</style>
	</head>
	<body>
		<div class="container">
			<div class="left"></div>
			<div class="center"></div>
			<div class="right"></div>
			<!-- 没有float的时候都是竖着排的, -->
		</div>
	</body>
</html>

父盒子定为flex布局,左右两端盒子设置相应的宽度,center盒子flex:1实现自适应。