CSS:实现自适应三栏布局的方法及双飞翼和圣杯布局的区别

两边固定,中间自适应三栏布局的实现方法

1. 利用flex弹性盒子模型

将父元素设置为弹性布局,则其子元素全自动成为容器成员,将中间部分子元素设置flex占比为1,则可填满剩余空间,两边设置固定宽度,即实现两边固定中间自适应。

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .parent {
            /* 设置为弹性盒模型 */
            display: flex;
        }
        
        .left {
            width: 200px;
            height: 100px;
            background-color: #9999ff;
        }
        
        .right {
            width: 200px;
            height: 100px;
            background-color: #FF8888;
        }
        
        .center{
            height: 100px;
            /* 填满剩余空间,实现自适应 */
            flex: 1;
            background-color: #800000;
        }
    </style>
</head>

<body>
    <div class="parent">
        <div class="left">left</div>
        <div class="center">center</div>
        <div class="right">right</div>
    </div>
</body>

</html>

在这里插入图片描述
实现效果:

在这里插入图片描述

2. 圣杯布局

目的:三栏布局,实现中间一栏最先加载和渲染(内容最重要)

  1. 为三个元素都设置左浮动
    在这里插入图片描述
  2. 为父元素设置padding,左右留出两边的空白位置
    在这里插入图片描述
  3. 利用margin负值,将左边设置为margin-left: -100%;,左边向左移动,使left向左移动一整个行的宽度,但此时会盖住中间center的内容。
    在这里插入图片描述
  4. 所以需要利用相对定位relative,设置元素相对自身定位,并左移left的宽度大小。
    在这里插入图片描述
  5. 同理,right 利用margin负值,设置为margin-left: -300px;,左移right的宽度大小,此时覆盖中间center的内容。
    在这里插入图片描述
  6. 所以需要利用相对定位relative,设置元素相对自身定位,并右移right的宽度大小。实现中间自适应。
    在这里插入图片描述
    完整代码:
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        .container {
            padding: 0 300px 0 200px;
        }
        
        .center {
            width: 100%;
            height: 200px;
            float: left;
            background-color: #800000;
        }
        
        .left {
            left: -200px;
            position: relative;
            width: 200px;
            height: 200px;
            float: left;
            margin-left: -100%;
            background-color: #9999ff;
        }
        
        .right {
            position: relative;
            right: -300px;
            width: 300px;
            height: 200px;
            float: left;
            margin-left: -300px;
            background-color: #FF8888;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="center">center</div>
        <div class="left">left</div>
        <div class="right">right</div>
    </div>
</body>

</html>

在这里插入图片描述

3. 双飞翼布局

目的:三栏布局,实现中间一栏最先加载和渲染(内容最重要)

  1. 给中间部分添加一个div父容器包裹

  2. 为三个元素(中间栏在父元素设置)都设置左浮动
    在这里插入图片描述

  3. 在子div,即中间栏设置margin左右值,来为左右栏留出位置
    在这里插入图片描述

  4. 利用margin负值,将左边设置为margin-left: -100%;,左边向左移动,使left向左移动一整个行的宽度。
    在这里插入图片描述

  5. 同理,right 利用margin负值,设置为margin-left: -300px;,左移right的宽度大小。实现自适应。
    在这里插入图片描述
    完整代码:

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

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        
        .main {
            float: left;
            width: 100%;
            height: 200px;
            background-color: #800000;
        }
        
        .center {
            margin: 0 300px 0 200px;
        }
        
        .left {
            float: left;
            width: 200px;
            height: 200px;
            margin-left: -100%;
            background-color: #9999ff;
        }
        
        .right {
            float: left;
            width: 300px;
            height: 200px;
            margin-left: -300px;
            background-color: #FF8888;
        }
    </style>
</head>

<body>
    <div class="container">
        <div class="main">
            <div class="center">center</div>
        </div>
        <div class="left">left</div>
        <div class="right">right</div>
    </div>
</body>

</html>

4. 双飞翼布局和圣杯布局的区别

解决中间栏内容被覆盖的思路不同
圣杯布局是将中间栏设置了padding之后,左右栏配合设置定位以及left和right移动来实现效果;
而双飞翼布局利用一个新的容器包裹中间栏,使其成为子div,再在子div设置margin左右值,来为左右栏留出位置,同时使得内容不被覆盖,并且双飞翼不需为左右栏设置定位及左右left、right移动,更为简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值