css实现三栏布局

最近面试,前端经常会被问到css实现三栏布局的问题。即实现左右两栏宽度固定,中间栏宽度自适应。

第一种:float+margin

    <style>
        .left {
            float: left;
        }
        .right {
            float: right;
        }
        .left, .right {
            width:400px;
            background: #f00;
        }
        .middle {
            margin: 0 400px 0 400px;
            background: #ff0;
        }
    </style>

    <div class="container">
        <div class="left">left</div>
        <div class="right">right</div>
        <div class="middle">middle</div>
    </div>

注:1. 左栏与右栏分别进行左浮动与右浮动,左栏与右栏的宽度可以不相等。

       2. 中间栏的margin-left值与margin-right值分别是左栏的宽度与右栏的宽度。若不设置这两个参数,中间栏的长度将和父容器相             同,无法实现三栏并列的效果。

       3. 为了使父容器自适应最长的子元素,需要将父容器的overflow属性设置为hidden。

       4. 注意html代码中三个div的布局,中间栏位于最后。 

第二种:position+margin

   <style>
        * {
            margin: 0;
            padding: 0;
        }
        .container {
            position: relative;
        }
        .left, .right {
            position: absolute;
            top: 0;
            background-color: #f00;
        }
        .left {
            left: 0;
            width: 200px;
        }
        .right {
            right: 0;
            width: 400px;
        }
        .middle {
            margin: 0 400px 0 200px;
            background-color: #ff0;
        }
    </style>

    <div class="container">
        <div class="left">left</div>
        <div class="middle">middle</div>
        <div class="right">right</div>
    </div>

注:1.  将父容器的position设为relative,左栏与右栏的position设为absolute。

       2.  左栏与右栏的宽度可以不相等。

       2.  中间栏的margin-left值与margin-right值分别是左栏的宽度与右栏的宽度。

第三种:flex弹性布局

    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .container {
            display: flex;
        }
        .left {
            width: 200px;
            height: 300px;
            background-color: #f00;
        }
        .middle {
            flex: 1;
            background-color: #ff0;
        }
        .right {
            width: 300px;
            height: 400px;
            background-color: #f0f;
        }
    </style>

    <div class="container">
        <div class="left">left</div>
        <div class="middle">middle</div>
        <div class="right">right</div>
    </div>

注:1.  为父元素设置display: flex属性。

        2.  左栏与右栏分别设置相应的宽和高。左栏与右栏的宽高可以不相等。

       3.  中间栏设置flex:1属性,代表中间栏将占据剩余的所有空间,如果不设置flex等于1,那么中间栏的宽度将由内部元素撑起。

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值