CSS---经典布局--圣杯布局与双飞翼布局

329 阅读4分钟

CSS经典布局--圣杯布局与双飞翼布局

圣杯为主体部分再加两个耳朵,鸟儿是身体再加两个翅膀,所以,圣杯布局与双飞翼布局,顾名思义,这两个布局针对的都是三列左右栏固定,中间栏边框自适应的网页布局。

下面来走近这两个经典布局案例叭~

圣杯布局

由于网页中需要优先对中间栏进行渲染,所以在html布局中,需要将main(主体部分)写在最前面

这样写的好处就是,在网页的显示过程中,可以优先看到网页的正文部分,而两边的导航信息的说明信息稍后显示,因为在我们看来,两边的优先级不如主体部分优先级高。

html主体部分:

一步一步来设置CSS样式

设置初始的div格式

清除浮动

在给主体三个部分设置了float左浮动属性后,中间三部分的父元素div发生塌陷,所以需要去清除浮动

hidden触发BFC闭合浮动

清除兄弟元素的浮动

设置main

目前结果:

使得main left right依次并排

为了使得三个部分排列在一行,需要给left和right设置相应的负的外边距

left的margin-left设置为-100%,其含义为:由上图可以看出,红色的div位于main div的后面,所以设置之后,使得红色的div向左移动一整行的距离,即在页面中的显示中,使得红色的div向上移动一行的位置,显示在页面左面

right的margin-left设置为-220pxt其含义为:在设置了left的CSS样式之后,绿色的div移动到了蓝色div的后面,所以设置绿色的div向左移动一个绿色div的宽度的长度,这样则使得绿色div位于页面的右面

设置后的结果:

解决内容覆盖问题

但是由于三个部分都脱离了标准流,所以导致设了margin-left值之后,导致main部分的内容被两侧divj所覆盖

为了解决内容的覆盖问题,则可以在父div盒子的 css样式添加相应的padding外边距属性值,将左右的padding设置为左右两个盒子的对应宽度,这样即可将内容全部显示在中间部分

由于container盒子包含了三个主体部分盒子,所以设置了padding值之后,三个元素开始往中间挤,所以需要进行下一步设置

将left 和right盒子相应的向左和向右移动相应的负的盒子宽度值,使得盒子相应的移动

最终实现结果

圣杯布局就完成啦~

双飞翼布局

双飞翼布局与圣杯布局相似,都是两边定宽,中间自适应的三列布局形式,两个布局不同的地方在于,为了使main的内容不被覆盖,在main的div中又加入了一个div

html部分代码

大部分css样式与圣杯布局相同

main内容覆盖问题的解决

双飞翼布局与圣杯布局所完成的界面大体是一样的,但是在解决main部分的文本覆盖问题中有了不一样的解决方法,圣杯布局中,给left与right盒子移动相应的距离,使得三个盒子可以依次排列且布满整个页面,而双飞翼布局中,在main盒子的内容部分加入一个新的盒子content,在解决覆盖问题时,只需要改变content盒子的左右边距即可,不需要对container盒子进行改动,这也使得right和left不用再进行left和right属性的再次设置

实现结果

实现结果与圣杯布局相同

两类经典布局的对比

双飞翼布局中,类选择器的使用比圣杯布局增加了一个,但是简化了代码,使得两侧盒子在设置为margin之后,不需要再对位置进行改动