css圣杯布局和双飞翼布局(超详细)

参考文章

圣杯布局

大抵就是一个左右两边固定宽度,中间宽度自适应的三栏式布局。
如下图所示:
在这里插入图片描述
大致要求是:

  • header和footer固定高度;
  • 左右两边固定宽度;
  • 中间宽度自适应;
  • 中间部分的高度是三栏中最高的区域的高度。

实现过程(顺序无所谓):
1、先定义好header 和footer,container 和其中的left , right ,middle.其中middle在最前面

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width,initial-scale=1.0">
		<title>圣杯布局练习</title>
		<link href="css/shengb.css" rel="stylesheet">
	</head>
	<body>
<!-- 		header和footer各自占领屏幕所有宽度,高度固定。
		中间的container是一个三栏布局。
		三栏布局两侧宽度固定不变,中间部分自动填充整个区域。
		中间部分的高度是三栏中最高的区域的高度。 -->
		
		<header>
			header
		</header>
		<div class="container">
			<div class="middle">middle<p>hello</p></div>
			<div class="left">left</div>
			<div class="right">right</div>
		</div>
		<footer>
			footer
		</footer>
	</body>
</html>

为提高代码优化,css样式建议加入以下。

* {
	box-sizing: border-box;
}
body {
	margin: 0;
	color: #fff; /*为了适应背景 把字体颜色调成白色*/
}

2、设置footer和header的样式

header {
	width: 100%;
	height: 50px;
	background: #6daca7;
	line-height: 50px;
	text-align: center;
}
footer {
	width: 100%;
	height: 30px;
	background: #52797a;
	clear: both;
	line-height:30px;
	text-align: center;
}

3、分别设置left , middle ,right 的样式, 左边宽度为200px, 右边宽度为150px, 中间宽度为100%
并且设置为相对定位,左浮动。

.left , .right, .middle {
	position: relative;
	float: left;
}
.left {
	width: 200px;
	background: #1b4887;
}
.right {
	width: 150px;
	background: #578353;
}
.middle {
	width: 100%;
	background: #138686;
}

这时候的布局是这样的:
在这里插入图片描述
4、这时候把左边left的margin-left设置为-100%,把它推到middle的左边
在这里插入图片描述
5、这时我们发现left把middle遮住了,看上面的middle不见了。只需要在container上加上 padding-left: 200px;padding-right: 150px;,在左右两边为left 和 right 留出空间( left 和 right 的宽度)。
在这里插入图片描述
6、 接下来把left左移,用到相对定位。在left盒子上设置left属性为-200px(刚好是left的宽度),这样left的位置就对了,也没有遮住middle。
在这里插入图片描述
7、接下来把right移动到正确的位置。只需要设置margin-right: -150px。把它推到middle的右边。
在这里插入图片描述
总结:只要是float的盒子,它就是脱离普通流的。
css代码地址

双飞翼布局

相比圣杯布局,双飞翼布局在container多了一个子节点,为其左右两边设置margin-left 和 margin-right ,为left 和 right留出空间。双飞翼布局不是像圣杯布局那样使用相对定位,而是在middle内部新增一个子节点,并设置它的margin-left 和 margin-right ,这样left设置margin-left为100%之后就不会被遮挡了,而right只需要margin-left: 150px就可以。相比来说,双飞翼布局比圣杯布局更简单,没有用到定位。以下是双飞翼布局的css样式代码。

* {
	box-sizing: border-box;
}
body {
	margin: 0;
	color: #fff;
}
header {
	width: 100%;
	height: 50px;
	background: #6daca7;
	line-height: 50px;
	text-align: center;
}
header {
	width: 100%;
	height: 50px;
	background: #6daca7;
	line-height: 50px;
	text-align: center;
}
footer {
	width: 100%;
	height: 30px;
	background: #52797a;
	clear: both;
	line-height:30px;
	text-align: center;
}
.container {
	
}
.left , .right, .middle {
	float: left;
}
.left {
	width: 200px;
	background: #18b0b0;
	margin-left: -100%; 
}
.right {
	width: 150px;
	background: #2a6f82c7;
	margin-left:-150px;

}
.middle {
	width: 100%;
}
.middle .sub {
	margin-left: 200px;
    margin-right: 150px;
    min-height: 150px;
	background: #184a7cad;
}

如有任何错误,烦请指正。
本作者从未收到过来自广大csdner的点赞,乞求看到这里的各位大大帮忙点个赞好吗?太卑微了我。

  • 18
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值