圣杯布局和双飞翼布局

圣杯布局

有三个很重要的点:

1、中间margin的宽度可以自适应,随浏览器窗口改变而改变
2、main模块要放在文档流的前面,因为浏览器解析html是一行一行解析的,这样可以保证页面主题内容先被加载
3、使用现有的技术实现,并在各大主流浏览器之间相互兼容

圣杯布局的制作步骤

1.写下HTML代码,规定main、left、right的区域,并添加如下样式
html代码:

main
left
right

css代码

.left {
    width: 300px;
    height: 400px;
    background-color: red;
}
.right {
    width: 300px;
    height: 400px;
    background-color: blue;
}
.main {
    height: 500px;
    background-color: pink;
}
圣杯布局和双飞翼布局_第1张图片
image.png
圣杯布局和双飞翼布局_第2张图片
规定三个容器.png

2.使三个区域都处于左浮动状态,并使main的宽度成父容器的100%

改造的后css代码:

.left {
    width: 300px;
    height: 400px;
    background-color: red;
}
.right {
    width: 300px;
    height: 400px;
    background-color: blue;
}
.main {
    width: 100%;
    height: 500px;
    background-color: pink;
}
.left,
.right,
.main {
    float: left;
}
圣杯布局和双飞翼布局_第3张图片
image.png
圣杯布局和双飞翼布局_第4张图片
设置浮动及main宽度100%.png

3.为两侧侧边栏添加负margin,用以调整位置,其中摆在左边的left的margin-left为-100%,而右边的right的margin-left则为负的其自身的宽度。(利用了浮动元素的负margin到一定值后会使其自身往上一行移动的原理)

改造后的css代码:

.left {
    width: 300px;
    height: 400px;
    background-color: red;
    margin-left: -100%;
}
.right {
    width: 300px;
    height: 400px;
    background-color: blue;
    margin-left: -300px;
}
.main {
    width: 100%;
    height: 500px;
    background-color: pink;
}
.left,
.right,
.main {
    float: left;
}
圣杯布局和双飞翼布局_第5张图片
image.png
圣杯布局和双飞翼布局_第6张图片
设置负margin使两个侧边栏向上移动.png

4.为class="container"的主容器设置左右margin值,使其为以后的侧边栏定位空出位置,margin的值为侧边栏的宽

改造后的css代码:

为了好看,我多设置了10px,用作隔开

.left {
    width: 300px;
    height: 400px;
    background-color: red;
    margin-left: -100%;
}
.right {
    width: 300px;
    height: 400px;
    background-color: blue;
    margin-left: -300px;
}
.main {
    width: 100%;
    height: 500px;
    background-color: pink;
}
.left,
.right,
.main {
    float: left;
}
.container {
    margin: 0 310px;
}
圣杯布局和双飞翼布局_第7张图片
image.png
圣杯布局和双飞翼布局_第8张图片
设置主容器的左右margin值.png

5.对left和right添加position:relative,然后对它们进行定位,移动到两侧,我们的圣杯布局就初步做完了,但是还有问题:
改造后的css代码:

.left {
    width: 300px;
    height: 400px;
    background-color: red;
    margin-left: -100%;
    left: -310px;
}
.right {
    width: 300px;
    height: 400px;
    background-color: blue;
    margin-left: -300px;
    left: 310px;
}
.main {
    width: 100%;
    height: 500px;
    background-color: pink;
}
.left,
.right,
.main {
    float: left;
    position: relative;
}
.container {
    margin: 0 310px;
}
圣杯布局和双飞翼布局_第9张图片
image.png
圣杯布局和双飞翼布局_第10张图片
使用相对定位使侧边栏移动到两侧.png

圣杯布局留下的问题

1.当我把整个页面的宽度收缩后,会出现布局错乱的效果:


圣杯布局和双飞翼布局_第11张图片
image.png

2.产生这个问题的原因
当页面收缩时,main因为是其父容器container的100%的宽度,所以main也会跟着收缩,当main收缩到比left宽度还要小,这时候父容器container的100%宽度

3.解决方案
可以给父容器container加上一个min-width样式,min-width的值不能小于right和left两者间的宽度最大值,这样做可以使中间的main的宽度始终比right和left大,就不会导致布局错乱了。


圣杯布局和双飞翼布局_第12张图片
image.png
圣杯布局和双飞翼布局_第13张图片
布局错乱解决办法.png

圣杯布局代码一览:

圣杯布局和双飞翼布局_第14张图片
image.png

双飞翼布局

双飞翼布局不仅能满足main处于优先加载的地位,而且更好的解决了圣杯布局的错乱问题,且css代码更简单,缺点是增加了一个标签。

双飞翼布局的制作

1.首先圣杯布局的步骤到了这一步:


圣杯布局和双飞翼布局_第15张图片
image.png
圣杯布局和双飞翼布局_第16张图片
QQ截图20180708152432.png

2.给main里面添加一个内容标签content,并且设置它的左右margin值为左右侧边栏的宽度:


圣杯布局和双飞翼布局_第17张图片
image.png

3.去掉main的背景色和高度,双飞翼布局就做成了


圣杯布局和双飞翼布局_第18张图片
image.png

双飞翼布局和圣杯布局的对比

优点:
1.双飞翼布局完美解决了圣杯布局的布局错乱问题;
2.双飞翼布局CSS代码逻辑更简单;
缺点:
添加了无意义的标签;
实际应用:
个人更偏向于使用双飞翼布局,但也会根据具体的需求进行使用

你可能感兴趣的:(圣杯布局和双飞翼布局)