2021-05-15

圣杯布局和双飞翼布局

  • 圣杯布局和双飞翼布局是一样的,都是两边固定宽度,中间自适应的三栏布局,中间栏要放在文档流前面以优先渲染。
  • 不过两者实现方式上有些区别

在这里插入图片描述
在这里插入图片描述

原文引用链接1
原文引用链接2
原文引用链接3

圣杯布局

圣杯布局要求

  • header和footer各自占领屏幕所有宽度,高度固定。
  • 中间的container是一个三栏布局。
  • 三栏布局两侧宽度固定不变,中间部分自动填充整个区域。
  • 中间部分的高度是三栏中最高的区域的高度。

实现过程(顺序无所谓)
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的盒子,它就是脱离普通流的。

双飞翼布局

1.双飞翼布局DOM结构

<header>我是双飞翼头部区域</header>
    <div id="middle">
        <div id="inside">我是中间区域</div>
    </div>
    <div id="left">我是左侧</div>
    <div id="right">我是右侧</div>
    <footer>我是双飞翼底部区域</footer>

2.双飞翼布局思路

  1. header、footer宽度100%,同圣杯布局第一步;

  2. left、right、middle三个区域全左浮动,同圣杯布局第二步;

  3. left、right设置margin-left,让左靠左,右靠右,此时left、right遮挡了middle区域同圣杯第三步;

  4. 将被middle包裹的inside设置margin:0 200px; 给左右留出空间;

  5. 给左侧设置:margin-left: -100%; 给右侧设置:margin-left: -200px; 让左靠左,右靠右,完成双飞翼布局。

3.双飞翼布局最终CSS样式:

<style>
    *{
        margin: 0;
        padding: 0;
    }
    body{
        background-color: #FFFFE0;/*便于观看加的样式*/
    }
    header{
        height:30px;
        background: gray;
        text-align: center;
    }
    footer{
        clear: both;
        height:30px;
        background: gray;
        text-align: center;
    }
    #middle{
        float:left;
        width:100%;
        text-align: center;
    }
    #left{
        float:left;
        width:200px;
        text-align: center;
        margin-left: -100%;
        background:yellowgreen;
    }
    #right{
        float:left;
        width:200px;
        text-align: center;
        margin-left: -200px;
        background:lightpink;
    }
 
    /*给内部div添加margin,把内容放到中间栏,其实整个背景还是100%*/
    #inside{
        background-color: orange;
        text-align: center;
        margin:0 200px;
    }
</style>

圣杯解决被遮盖的方式:

在最开始用容器包裹了:左、中、右,随后通过设置包裹容器container的padding,让中间区域左右留白,也就是说圣杯布局的左、中、右是完全独立的,他们之间是有缝隙的(如果缝隙可见的话)

例如我们接下来:

  1. 给container加一个蓝色背景色,并且设置高一些的高度。

  2. 去左、中、右的等高布局,给middle再加一行文字。

左、中、右是独立的三个区域,都处于一个层级,都由container这个容器(蓝色)承接,左右两侧是靠container的padding留出来的。

双飞翼解决被遮盖的方式:

双飞翼采用只处理中间解决遮盖问题,先给中间的包裹器middle加margin,让出左右空间,然后给left、right设置margin为负,把自己推上去。

左、中、右是独立的三个区域,中间区域属于最上面的层级(inner那个div),左右两侧和middle容器一个层级

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值