三栏布局之圣杯布局、双飞翼布局

文章都是自己平时的一些积累和感悟,若有问题,欢迎指出。

一、圣杯布局

圣杯布局和双飞翼布局是经典的三栏布局。实现了左右两侧固定中间自适应的布局。圣杯布局主要是利用float、相对定位、容器的padding来完成布局。

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-type" content="text/html;charset=utf-8" />
    <title>test page</title>
    <style>
        html {
            height: 100%;
        }

        body {
            height: 100%;
        }

        * {
            margin: 0;
            padding: 0;
        }

        #header {
            width: 100%;
            height: 100px;
            background-color: burlywood;
            text-align: center;
        }

        #footer {
            width: 100%;
            height: 100px;
            background-color: burlywood;
            text-align: center;
        }

        #container {
            /* 设置BFC,包住float元素 */
            overflow: hidden;
            /* 制造空白 */
            padding: 0 300px 0 200px;
        }

        #left {
            width: 200px;
            height: 300px;
            background-color: red;
            /* 脱离文档流 */
            float: left;
            position: relative;
            /* 我的理解是margin-left为-100%是使div可以往上一层 */
            margin-left: -100%;
            left: -200px;
        }

        #right {
            background-color: yellow;
            width: 300px;
            height: 300px;
            /* 脱离文档流 */
            float: left;
            position: relative;
            margin-left: -300px;
            right: -300px;
        }

        #middle {
            background-color: blue;
            width: 100%;
            height: 300px;
            /* 脱离文档流 */
            float: left;
            position: relative;
        }
    </style>
</head>

<body>
    <div id="header">header</div>
    <div id="container">
        <div id="middle">middle</div>
        <div id="left">left</div>
        <div id="right">right</div>
    </div>
    <div id="footer">footer</div>
</body>

</html>

直接给代码可能有点乱,具体的步骤是:
1.设置各个元素的宽高,设置middle的宽度为100%。
2.设置容器container为BFC,可以包裹住float元素,并且对后面的元素不造成影响。
3.使left、right、middle脱离文档流,设置float属性。
4.设置容器container的padding属性,制造空白,留出left和right的位置。
5.设置left和right的margin-left属性为-100%和-rightwidth,使其和middle处于同一层。
6.设置left、right、middle元素的position属性为relative,令他们可以相对于他们的正常位置移动。
7。设置left元素的left属性值为-leftwidth,right元素的right属性值为-rightwidth。可以她们移动到正确的位置,不挡住中间的middle元素。
效果图:
圣杯布局

二、双飞翼布局

实现双飞翼布局和圣杯布局很像,只是实现中间自适应部分的方式不一样,双飞翼布局在middle中又加入了middle-inner,用middle-inner的margin来制造空白是left和right可以放在左右侧。

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-type" content="text/html;charset=utf-8" />
    <title>test page</title>
    <style>
        html {
            height: 100%;
        }

        body {
            height: 100%;
        }

        * {
            margin: 0;
            padding: 0;
        }

        #header {
            width: 100%;
            height: 100px;
            background-color: burlywood;
            text-align: center;
        }

        #footer {
            width: 100%;
            height: 100px;
            background-color: burlywood;
            text-align: center;
        }

        #container {
            /* 设置BFC,包住float元素 */
            overflow: hidden;
        }

        #left {
            width: 200px;
            height: 300px;
            background-color: red;
            /* 脱离文档流 */
            float: left;
            /* 我的理解是margin-left为-100%是使div可以往上一层 */
            margin-left: -100%;
        }

        #right {
            width: 300px;
            height: 300px;
            /* 脱离文档流 */
            float: left;
            background-color: yellow;
            margin-left: -300px;
        }

        #middle {
            background-color: blue;
            width: 100%;
            height: 300px;
            /* 脱离文档流 */
            float: left;
        }

        #middle-inner {
            background-color: yellowgreen;
            height: 300px;
            /* 使用margin留出left和right的宽度 */
            margin: 0 300px 0 200px;
        }
    </style>
</head>

<body>
    <div id="header">header</div>
    <div id="container">
        <div id="middle">
            <div id="middle-inner">middle-inner</div>
        </div>
        <div id="left">left</div>
        <div id="right">right</div>
    </div>
    <div id="footer">footer</div>
</body>

</html>

直接给代码可能有点乱,具体的步骤是:
1.设置好各个div的宽高,中间自适应部分width为100%。
2.设置container为BFC,可以包裹住float元素,使其他元素不受影响。
3.脱离文档流,设置middle、left、right的float属性。
4.设置middle-inner的margin,制造空白留出left和right的位置。
5.left和right使用margin-left属性使其固定到自己的位置。
效果图:
双飞翼布局

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值