CSS两栏布局与三栏布局,含圣杯布局与双飞翼布局

两栏布局

float + margin

    <div class="box">
        <div class="left"></div>
        <div class="right"></div>
    </div>
        .box {
            overflow: hidden;
        }

        .left {
            background: gray;
            float: left;
            height: 200px;
            width: 200px;
        }

        .right {
            background: lightgray;
            margin-left: 210px;
            height: 100px;
        }

在这里插入图片描述

三栏布局

1.absolute + 左右margin

    <div class="box">
        <div class="left"></div>
        <div class="middle">中间</div>
        <div class="right"></div>
    </div>
        .box {
            position: relative
        }

        .left {
            position: absolute;
            background: gray;
            left: 0;
            top: 0;
            height: 200px;
            width: 200px;
        }

        .middle {
            background: lightgray;
            margin-left: 210px;
            margin-right: 210px;
            height: 200px;
        }

        .right {
            position: absolute;
            background: gray;
            width: 200px;
            height: 200px;
            right:0;
            top:0;
        }

在这里插入图片描述

2.float + margin

<div class="box">
    <div class="left"></div>
    <div class="right"></div>
    <div class="middle">中间</div>
</div>

注意div的顺序

    .box {
        overflow: hidden;
    }

    .left {
        float: left;
        background: gray;
        height: 200px;
        width: 200px;
    }

    .right {
        float: right;
        background: gray;
        width: 200px;
        height: 200px;
    }

    .middle {
        background: lightgray;
        margin-left: 210px;
        margin-right: 210px;
        height: 200px;
    }

在这里插入图片描述

这里由于float布局的特性,必须把.middle元素放在最后而不是中间,从代码层面上来讲html内容结构是不正确的

什么是圣杯布局和双飞翼布局

圣杯布局和双飞翼布局也是两边定宽,中间自适应的三栏布局。并且中间栏要放在父元素的第一儿子位置,以优先渲染。因此,有些人会说这带来了代码层面上 html 内容结构的不正确。然而,这么做的好处就是可以让更为重要的中间部分优先渲染,从这个角度来讲,这或许是更加好的结构。

圣杯布局

实现思路

  • 左中右三个元素分别左浮动。
  • 中间元素占据第一位置优先渲染,设置该元素 width 为 100%
  • 左元素设置左边距为-100%,以使得左元素上升一行并且处于最左位置,右元素设置左边距为自身宽度的负值,使得右元素上升一行处于最右位置。
  • 设置父元素的左右 padding 为左右两个元素留出空间,以展示中间元素内容。
  • 设置左右元素为相对定位,左元素的 left 和右元素的 right 为内边距的宽度的负值。

代码

<div class="box">
    <div class="middle">中间</div>
    <div class="left">左</div>
    <div class="right">右</div>
</div>
.box {
        padding: 0 200px;
    }

    .middle {
        background: gray;
        height: 200px;
        width: 100%;
        float: left;
    }

    .left {
        background: lightgray;
        width: 200px;
        height: 200px;
        float: left;
        margin-left: -100%;
        position: relative;
        left: -200px;
    }

    .right {
        background: lightgray;
        width: 200px;
        height: 200px;
        float: left;
        margin-left: -200px;
        position: relative;
        right: -200px;
    }

在这里插入图片描述

双飞翼布局

实现思路

  • 左中右三个元素分别左浮动。
  • 中间元素占据第一位置优先渲染,设置该元素 width 为 100%
  • 左元素设置左边距为-100%,以使得左元素上升一行并且处于最左位置,右元素设置左边距为自身宽度的负值,使得右元素上升一行处于最右位置。
  • 设置中间元素的子元素左右边距为左右元素留空位,以展示中间元素内容。

代码

<div class="box">
    <div class="middle">
        <div class="child">中间</div>
    </div>
    <div class="left"></div>
    <div class="right"></div>
</div>
    .box {
        overflow: hidden;
    }

    .middle {
        float: left;
        width: 100%;
    }

    .child {
        margin: 0 200px;
        height: 200px;
        background: gray;
    }


    .left {
        background: lightgray;
        width: 200px;
        height: 200px;
        float: left;
        margin-left: -100%;
    }

    .right {
        background: lightgray;
        width: 200px;
        height: 200px;
        float: left;
        margin-left: -200px;
    }

圣杯布局与双飞翼布局的区别

可以看出,圣杯布局与双飞翼布局的整体实现思路是一样的,只是最后一步的处理方式存在差别。

  • 圣杯布局使用父元素的左右内边距来为左右元素腾出空间
  • 双飞翼布局使用中间元素的子元素左右外边距来为左右元素腾出空间
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值