圣杯布局、双飞翼布局、弹性布局实现的两边定宽,中间不定宽

圣杯布局

<body>
    <header>头部</header>
    <div class="box clearfix">
        <div class="center">中间</div>
        <div class="left">左边</div>
        <div class="right">右边</div>
    </div>
    <footer>底部</footer>
</body>

中间部分在HTML结构上优先。

第一步

三个盒子设置浮动,清除浮动效果

        .left,
        .right,
        .center {
            float: left;
        }

第二步

左右盒子设置固定宽度,中间盒子设置为100%

        .left,
        .right {
            width: 200px;
            height: 200px;
            background-color: orange;
        }
        .center {
            height: 200px;
            width: 100%;
            background-color: skyblue;
        }

在这里插入图片描述

第三步

左盒子设置margin-left:-100%,右盒子设置margin-left:-自身宽度;

        .left {
            position: relative;
            margin-left: -100%;
        }
         .right {
            position: relative;
            margin-left: -200px;
        }

在这里插入图片描述

为了解决左右盒子压盖中间盒子,应该让左盒子和右盒子再向外移动。但是因为中间盒子设置了100%,左右盒子再向外移动会出现滚动条。

第四步

在三个盒子的外面包裹一个大的盒子。设置大盒子的左右padding为左右盒子的宽度。

     .box {
            padding: 0 200px;
            text-align: center;
            min-width: 600px;
            /* 为了避免采用默认内容盒尺寸进行转换计算 */
            box-sizing: border-box;
           }

在这里插入图片描述

第五步

左盒子通过相对定位向左移动自身宽度,右盒子通过相对定位向右移动自身宽度。

    .left {
            position: relative;
            left: -200px;
            margin-left: -100%;
        }
         .right {
            position: relative;
            right: -200px;
            margin-left: -200px;
        }

在这里插入图片描述

整体代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>圣杯布局</title>
    <style>
        .clearfix::after {
            content: '';
            display: block;
            clear: both;
        }
        
        .box {
            padding: 0 200px;
            text-align: center;
            min-width: 600px;
            /* 为了避免采用默认内容盒尺寸进行转换计算 */
            box-sizing: border-box;
        }
        
        header,
        footer {
            height: 200px;
            background: cadetblue;
        }
        
        .left,
        .right {
            width: 200px;
            height: 200px;
            background-color: orange;
        }
        
        .left,
        .right,
        .center {
            float: left;
        }
        
        .center {
            height: 200px;
            width: 100%;
            background-color: skyblue;
        }
        
        .left {
            position: relative;
            left: -200px;
            margin-left: -100%;
        }
        
        .right {
            position: relative;
            right: -200px;
            margin-left: -200px;
        }
    </style>
</head>

<body>
    <header>头部</header>
    <div class="box clearfix">
        <div class="center">中间</div>
        <div class="left">左边</div>
        <div class="right">右边</div>
    </div>
    <footer>底部</footer>
</body>

</html>

双飞翼布局

<body>
    <header>我是头部信息</header>
    <div class="center">
        <div class="box"></div>
    </div>
    <div class="left"></div>
    <div class="right"></div>
    <footer style="clear: left;">我是底部信息</footer>
</body>

第一步

三个盒子设置浮动,并清除浮动效果

        .center,
        .left,
        .right {
            float: left;
        }

这里的清除浮动是采用的方式

  <footer style="clear: left;">我是底部信息</footer>

还可以采用伪元素

例子

.clearfix::after {
    content: "";
    display: block;
    height: 0;
    clear: both;
}

第二步

左右盒子设置固定宽度,中间盒子设置为100%

        .left,
        .right {
            width: 200px;
        }
        
        .center {
            width: 100%;
        }

第三步

左盒子设置margin-left:-100%,右盒子设置margin-left:-自身宽度;

       .left {
            background-color: hotpink;
            margin-left: -100%;
        }
        
        .right {
            background-color: brown;
            margin-left: -200px;
        }

为了解决左右盒子压盖中间盒子,应该让左盒子和右盒子再向外移动。但是因为中间盒子设置了100%,左右盒子再向外移动会出现滚动条。

以上步骤与圣杯布局一样,效果一样,这里不再展示效果,可以参考上面效果

第四步

在中间盒子中再嵌套一个小盒子,将内容放入小盒子中,里面小盒子的margin去撑开。

        .box {
            margin: 0 200px;
        }

在这里插入图片描述

整体代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        body {
            font-size: 40px;
            text-align: left;
            line-height: 200px;
        }
        header,
        footer {
            height: 200px;
            background-color: cadetblue;
        }
        .center,
        .left,
        .right {
            float: left;
        }
        .left,
        .right {
            width: 200px;
        }
        .center {
            width: 100%;
        }
        .center {
            background-color: mediumslateblue;
        }
        .left {
            background-color: hotpink;
            margin-left: -100%;
        }
        .right {
            background-color: brown;
            margin-left: -200px;
        }
        .box {
            margin: 0 200px;
        }  
        .clearfix::after {
            display: block;
            content: "";
            clear: both;
        }
    </style>
</head>
<body>
    <header>我是头部信息</header>
    <div class="center">
        <div class="box"></div>
    </div>
    <div class="left"></div>
    <div class="right"></div>
    <footer style="clear: left;">我是底部信息</footer>
</body>
</html>

圣杯布局与双飞翼布局的总结

  1. 圣杯布局是在外层嵌套一个大盒子,利用大盒子的padding+左右盒子的相对定位去实现。
  2. 双飞翼是在中间层嵌套一个小盒子,利用小盒子的margin去实现。

弹性盒子的实现方式

  <body>
    <header>我是头部信息</header>
    <div class="box">
        <div class="center"></div>
        <div class="left"></div>
        <div class="right"></div>
    </div>
    <footer style="clear: left;">我是底部信息</footer>
</body>

第一步

父盒子设为弹性盒

       .box {
            display: flex;
        }

在这里插入图片描述

第二步

左右盒子固定宽度

       .left,
        .right {
            width: 200px;
            background-color: brown;
        }

在这里插入图片描述

第三步

中间盒子设置 flex-grow:1

       .center {
            flex-grow: 1;
            background-color: lightgreen;
        }

在这里插入图片描述

第四步

设置左盒子的order为-1;
order是主要用于弹性盒子中的排序,order越小盒子越靠前

       .left {
            order: -1;
        }

在这里插入图片描述

整体代码

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        body {
            font-size: 40px;
            text-align: center;
            line-height: 200px;
        }
        header,
        footer {
            height: 200px;
            background-color: cadetblue;
        } 
        .box {
            display: flex;
        }
        .left,
        .right {
            width: 200px;
            background-color: brown;
        }  
        .left {
            order: -1;
        }      
        .center {
            flex-grow: 1;
            background-color: lightgreen;
        }
    </style>
</head>
<body>
    <header>我是头部信息</header>
    <div class="box">
        <div class="center"></div>
        <div class="left"></div>
        <div class="right"></div>
    </div>
    <footer style="clear: left;">我是底部信息</footer>
</body>
</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值