使用CSS实现三栏自适应布局

<!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>
        /* 所谓三列自适应布局指的是两边定宽,中间block宽度自适应
        一类是基于position传统的实现,一类是基于css3新特性弹性盒模型布局实现。 */


        /* -------------------------------------------------------------------- */
        /* 方法一:1).绝对定位法
        绝对定位法原理是将左右两边使用absolute定位,因为绝对定位使其脱离文档流,
        后面的center会自然流动到他们上面,然后使用margin属性,留出左右元素的宽度,
        既可以使中间元素自适应屏幕宽度。 */
        /* 该法布局的好处,三个div顺序可以任意改变。不足是 因为绝对定位,所以如果页面上还有其他内容,
        top的值需要小心处理,最好能够对css样式进行一个初始化,就像在上面例子中加了一个标题,
        如果不对样式进行初始化,则两边和中间的值会对不齐。 
        另外,随着浏览器窗口缩小,小于200px的时候,会发生压缩。 */
        
        * {
            margin: 0;
            padding: 0;
        }
        /* #left,
        #right {
            width: 200px;
            height: 200px;
            background-color: blueviolet;
            position: absolute;
        }
        
        #left {
            left: 0;
        }
        
        #right {
            right: 0;
        }
        
        #center {
            margin: 0 200px;
            background-color: pink;
            height: 200px;
        } */
        /* // */



        /* 2).使用自身浮动法
        自身浮动法的原理就是使用对左右使用分别使用float:left和float:right,float使左右两个元素脱离文档流,
        中间元素正常在正常文档流中,使用margin指定左右外边距对其进行一个定位。 */
        /* 该布局法的好处是受外界影响小,但是不足是 三个元素的顺序,center一定要放在最后,
           这是和绝对定位不一样的地方,center占据文档流位置,所以一定要放在最后,
           左右两个元素位置没有关系。当浏览器窗口很小的时候,右边元素会被击倒下一行。 */
        /* #left,
        #right {
            width: 200px;
            height: 200px;
        }
        
        #left {
            float: left;
            background-color: red;
        }
        
        #right {
            float: right;
            background-color: pink;
        }
        
        #center {
            background-color: bisque;
            margin: 0 200px;
            height: 200px;
        } */



        /*  3). 圣杯布局
        圣杯布局的原理是margin负值法。使用圣杯布局首先需要在center元素外部包含一个div,
        包含div需要设置float属性使其形成一个BFC,并设置宽度,
        并且这个宽度要和left块的margin负值进行配合。 */
        /* 该方法在网站布局中非常常见,也是面试常考点,优点是三栏相互关联,有一定的抗性。
        需要注意的是,布局中间部分一定要放在前面,左右顺序不限制。
        对于left快的margin负值一定要等于wrap的宽度。 */
        
        .container {
            /* 清除浮动带来的高度塌陷问题 */
            overflow: hidden;
        }
        
        #wrap,
        #left_margin,
        #right_margin {
            /* 让三个盒子浮动 */
            float: left;
            height: 300px;
        }
        
        #wrap {
            background-color: red;
            width: 100%;
        }
        
        #left_margin {
            width: 100px;
            background-color: #fff000;
            /* margin值是相对于父盒子而言的,所以让左盒子为-100% */
            margin-left: -100%;
        }
        
        #right_margin {
            width: 200px;
            background-color: aqua;
            margin-left: -200px;
        }
        
        #center {
            /* 根据左右盒子的宽度设置中间盒子的margin值,避免中间的盒子被遮盖 */
            margin: 0 200px 0 100px;
            background-color: cadetblue;
            height: 300px;
        }
        /* // */




        /* 方法四 css3新特性 flex布局 */
        /* 在外围包裹一层div,设置为display:flex;中间盒子设置flex:1;左右盒子不用设置浮动或者定位
        但是盒模型默认紧紧挨着,可以使用margin控制外边距。 */
        /* 注意: center一定要放到中间。 */
        
        #box {
            /* width: 100%; */
            background-color: pink;
            height: 100px;
            display: flex;
        }
        
        #left_box,
        #right_box {
            width: 100px;
            height: 100px;
            background-color: red;
        }
        
        #center_box {
            flex: 1;
            background-color: #fff000;
            width: 100px;
            height: 100px;
        }
    </style>
</head>

<body>
    <!-- <h3>两边宽度固定,中间自适应</h3>
    <div id="left">左边</div>
    <div id="right">右边</div>
    <div id="center">中间</div> -->

    <h3>使用margin负值法进行布局</h3>
    <div class="container">
        <div id="wrap">
            <div id="center">center</div>
        </div>
        <div id="left_margin">left</div>
        <div id="right_margin">right</div>
    </div>




    <h3>flex弹性布局</h3>
    <div id="box">
        <div id="left_box">left</div>
        <div id="center_box">center</div>
        <div id="right_box">right</div>
    </div>
</body>

</html>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1planet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值