“ 关注 前端开发社区 ,回复"1"即可加入 前端技术交流群,回复 "2"即可免费领取 500G前端干货!

作者:前端林子 https://cloud.tencent.com/dev...

上一篇文章介绍了三种方法实现CSS三栏布局,本文则在此基础上,进一步介绍常用的圣杯布局与双飞翼布局。

一.圣杯布局

圣杯布局的要求:

  1. header和footer占屏幕全部高度,高度固定
  2. 中间的contaier部分是一个三栏布局
  3. left和right宽度固定,middle自适应填满整个区域;高度为三栏中最大的高度;

实现的方法:

1.header和footer设width为100%

2.中间的三栏布局,可参考三种方法实现CSS三栏布局,这里采用margin负值法来实现

先直接实现下三栏布局:

<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>圣杯布局</title><style type="text/css">    body {        margin: 0;        padding: 0;   }    header,    footer {        height: 100px;        width: 100%;        background-color: #BBBBBB;    }    .container {        height: 300px;    }    .container div {        float: left;    }    .left {        width: 200px;        height: 300px;        background-color: #DC698A;        margin-left:-100%;    }    .middle {        width: 100%;        height: 300px;        background-color: #3EACDD;    }    .right {        width: 300px;        height: 300px;        background-color: #8CB08B;        margin-left:-300px;    }</style></head><body><header>头部</header><div class="container"><div class="middle">中间栏</div><div class="left">左栏</div><div class="right">右栏</div></div><footer>底部</footer></body></html>

实现效果如下:

看上去好像已经达到圣杯布局的要求了,但是可以看到中间栏蓝色块并没有显示出“中间栏”,感觉应该是被左栏覆盖了。为了验证,这里将左右两栏设置透明度,中间栏多增加些内容,可以看到:

可以看出中间栏确实被左右两栏各覆盖了一部分内容。

要想左右两栏不遮盖中间栏,就需要中间栏给左右两栏腾些位置处理,可以想到用padding属性或者margin属性来腾位置。圣杯布局是用padding属性来腾位置,而双飞翼布局则是用margin属性,同时要修改下html的布局结构。

圣杯布局的实现,需要给左栏、中间栏、右边栏加上padding属性,腾些位置:

(1)第一步,给container设置padding-left和padding-right属性,值分别为左栏、右栏的宽度:

.container {    ...    padding-left: 200px;    padding-right: 300px; }

效果如下:

(2)第二步,将左右两栏设置为相对定位,同时左栏的left值设为-左栏宽度,右栏的right设为-右栏宽度。

.container div{    ...    position: relative;}.left{    ...    left:-200px;}.right{   ...    right:-300px;}

这里附上完整的代码:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>圣杯布局</title>    <style type="text/css">        body {            margin: 0;            padding: 0;        }        header,        footer {            height: 100px;            width: 100%;            background-color: #bbbbbb;        }        .container {            height: 300px;            padding-left: 200px;            padding-right: 300px;         }        .container div{            float: left;                        /* 圣杯布局 */            position:relative;        }        .left {            width: 200px;            height: 300px;            background-color: #DC698A;            margin-left: -100%;            /* 圣杯布局 */            left:-200px;        }        .middle {            width: 100%;            height: 300px;            background-color: #3EACDD;        }        .right {            width: 300px;            height: 300px;            background-color: #8CB08B;                margin-left: -300px;            /* 圣杯布局 */            right:-300px;        }    </style></head><body>    <header>头部</header>    <div class="container">        <div class="middle">中间栏</div>        <div class="left">左栏</div>        <div class="right">右栏</div>    </div>    <footer>底部</footer></body></html>

实现的效果如下:

二.双飞翼布局

前面介绍过,双飞翼布局和圣杯布局的区别,就在于如何处理中间栏被遮挡的问题。双飞翼布局要稍微修改下html。

具体实现:

在中间栏中在放一个div来显示内容,并设置其margin。margin-left为左边栏的宽度,margin-right为右边栏的宽度

/* 双飞翼布局 */.main{    margin-left:200px;    margin-right:300px;}

之所以要修改html的布局,在中间栏中又增加的div,是因为原来中间栏的div设置了width:100%,如果再设置margin的话,就会超过窗口的宽度。因此,这里增加了个div,将要显示的内容放到这个div里面,给这个div来设置margin。

这里附上完整的代码:

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>双飞翼布局</title>    <style type="text/css">        body {            margin: 0;            padding: 0;        }        header,        footer {            height: 100px;            width: 100%;            background-color: #bbbbbb;        }        .container {            height: 300px;        }        .container div {            float: left;        }        .left {            width: 200px;            height: 300px;            background-color: #DC698A;            margin-left: -100%;                   }        .middle {            width: 100%;            height: 300px;            background-color: #3EACDD;        }        .right {            width: 300px;            height: 300px;            background-color: #8CB08B;            margin-left: -300px;                   }        /* 双飞翼布局 */        .main{            margin-left:200px;            margin-right:300px;        }    </style></head><body>    <header>头部</header>    <div class="container">        <div class="middle">            <div class="main">中间栏</div>        </div>        <div class="left">左栏</div>        <div class="right">右边栏</div>    </div>    <footer>footer</footer></body></html>

实现的效果如下:

三.小结

本文主要介绍了如何一步步地实现圣杯布局双飞翼布局。圣杯布局相较于双飞翼布局,样式设置稍有些复杂。双飞翼布局样式设置比较简单,但需要修改html布局结构。建议在阅读本文前,可以先阅读下三种方法实现CSS三栏布局,便于加深理解。如有问题,欢迎指正。

最近几天会陆续更新的~~,觉得总结的可以的话,麻烦给小编点一个 在看, 谢谢!

往期:

三种方法实现CSS三栏布局

Vue3 插件开发详解尝鲜版

vue面试题总结(一)

请各位帅哥美女多多支持帅编,回复“1”即可加入前端技术交流群,回复’2‘即可领取 500G 前端干货

加我拉你进群

本文使用 mdnice 排版