当前位置: 首页 > Web前端 > HTML

圣杯布局和双飞翼布局

时间:2023-04-02 22:15:23 HTML

稍微懂一点前端的都知道,圣杯布局和双飞翼布局是前端面试必问的问题,因为它不仅可以体现了你对HTML结构的理解也体现了你对DIV+CSS布局的掌握,毕竟我们学习CSS主要是为了更好的布局,带来最好的用户体验~其实圣杯布局其实是一回事如双飞翼布局。它们都实现了三列布局,两边盒子的宽度是固定的,中间的盒子是自适应的,也就是我们常说的solid-to-solid布局。它们实现的效果是一样的,区别在于实现的思路。HolyGrail布局源于一篇文章InSearchoftheHolyGrailonalistpart。与双飞翼版式相比,其起源并非来自页面的形象表达。在西方,圣杯的意思是“那些被渴望的人”。双飞翼布局来源于淘宝的UED,可以说是受到了页面渲染的启发。我们来看看这两种布局的区别:1.双飞翼布局可以看到,我们在main里面又增加了一个content层。了解盒模型的就知道我们不能直接给main加上margin属性,因为我们设置了width:100%,如果再设置margin会超出窗口的宽度,所以我们创建另一个content层,用来显示所有main-content的内容,放在main-content中,并为main-content设置margin。因为不改变父元素,所以只需要为main-content设置margin:0200px0200px;该属性足以实现效果。通过缩放页面,可以发现随着页面宽度的变化,三列布局先渲染在中间的盒子里,两边的盒子边框是固定的,即使页面宽度变小,也不会影响我们的浏览。有一点了解的,再来看看圣杯布局的实现:2.双飞翼布局第一步:给出HTML结构:

页眉内容区

中间弹性区域

左栏

RightColumn
写结构的时候注意,父元素的三列必须先写中间框。因为要先渲染中间的盒子~并设置它的适配,即width:100%。第2步:给每个框样式header{width:100%;height:40px;background-color:darkseagreen;}.container{height:200px;overflow:hidden;}.middle{width:100%;height:200px;背景颜色:deeppink;浮动:左;}.left{宽度:200px;高度:200px;背景颜色:蓝色;浮动:左;}.right{宽度:200px;高度:200px;背景颜色:暗兰花;浮动:左;}页脚{宽度:100%;height:30px;background-color:darkslategray;}第三步:看此时的效果图,可以看到三列在父元素Display中不是一行,因为中间的框我们给了100%的宽度.所有左右框都将被挤压。那么如何让它们呈现出一行三列的效果呢?然后让左边的盒子走到中间盒子的最左边,右边的盒子走到中间盒子的最右边。换个思路,如果中间的框不是100%宽,那么按照文档流,左边的框一定要显示在中间的框后面,才会显示右边的框。但是现在中间的框是全屏的,所以左右两个框都挤到下一行显示了。我们要做的就是让左右箱子都上去。这时,CSS负边距就该发挥作用了。第四步:使用负边距布局1、要让左边的框上去,需要设置左边距为负的中间框的宽度,即.left{margin-left:-100%;}。这样,左边的盒子就可以移动到最左边。2.要让右边的盒子往上走,需要给它自己的宽度设置一个负的左边距,即.right{margin-left:-200px;}。这样右边的框就可以显示在该行的最右边。第五步:看此时的效果图第六步:让中间的自适应框安全显示第一:使用父元素设置左右padding的值,挤压父的三个子框到中间。代码如下:.container{padding:0200px;}这里的200px是左右框的宽度。效果如下:我们可以看到左右两边的内边距是有的,但是中间框的内容还是被压住了。第二:给左右框加一个定位。添加定位后,可以为左右框设置左右值。代码如下:.left{position:relative;左:-200px;}.right{位置:相对;右:-210px;现在,圣杯布局终于搞定了,达到了我们想要的效果。左右框固定,中间框自适应,中间框内容完全不受影响。你也明白吗?衷心希望对您有所帮助。