圣杯布局和双飞翼布局

圣杯布局

有三个很重要的点:

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

圣杯布局的制作步骤

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

<div class="container">
        <div class="main">main</div>
        <div class="left">left</div>
        <div class="right">right</div>
    </div>

css代码

.left {
    width: 300px;
    height: 400px;
    background-color: red;
}
.right {
    width: 300px;
    height: 400px;
    background-color: blue;
}
.main {
    height: 500px;
    background-color: pink;
}
image.png
规定三个容器.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;
}
image.png
设置浮动及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;
}
image.png
设置负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;
}
image.png
设置主容器的左右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;
}
image.png
使用相对定位使侧边栏移动到两侧.png

圣杯布局留下的问题

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


image.png

2.产生这个问题的原因
当页面收缩时,main因为是其父容器container的100%的宽度,所以main也会跟着收缩,当main收缩到比left宽度还要小,这时候父容器container的100%宽度<left的宽度,就不能容纳left,所以将其挤到了下一行,right同理。

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


image.png
布局错乱解决办法.png

圣杯布局代码一览:

image.png

双飞翼布局

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

双飞翼布局的制作

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


image.png
QQ截图20180708152432.png

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


image.png

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


image.png

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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容

  • 圣杯布局和双飞翼布局是前端工程师需要日常掌握的重要布局方式。两者的功能相同,都是为了实现一个两侧宽度固定,中间宽度...
    阿尔卑斯的隆冬阅读 66,477评论 23 155
  • 实现圣杯布局和双飞翼布局,“负边距”是必不可少的。 了解圣杯布局和双飞翼布局之前,我们先来了解下负边距。一、定义:...
    betterwlf阅读 759评论 0 11
  • 在前端布局中,事实上,圣杯布局其实和双飞翼布局是一回事。它们实现的都是三栏布局,两边的盒子宽度固定,中间盒子自适应...
    风铭阅读 1,459评论 1 6
  • 首先谈谈三栏布局 三栏布局长什么样子?三栏布局是左右两侧浮动,而中间宽度自适应不浮动做出的效果。三栏布局 三栏布局...
    大春春阅读 2,024评论 5 24
  • 4月进中旬,恰巧听到一个老节目当年回忆张国荣。一张桌子,三个人围坐,各自表达各自的观点,相互碰撞,相互启发。...
    嬉皮lp阅读 432评论 8 2