zoukankan      html  css  js  c++  java
  • 自适应两栏布局&&多列等高布局

    一、自适应两栏布局

    实现左边div元素固定,右边div自适应

    两个块级元素

    (1)将固定元素设为浮动,此时另一个元素的部分宽度会被浮动元素覆盖,设置另一元素的margin-left或BFC

    .par{
         300px;
        border: solid 1px #0000FF;
        height: 60px;
        }
    .lnav{
         70px;
        height: 30px;
        background: #008000;
        float: left;
           }
    .rnav{
        height: 40px;
        background: #EE2C2C;
        margin-left: 70px;
        }

                

    (2)flex布局

    .par{
         300px;
        border: solid 1px #0000FF;
        height: 60px;
        display: flex;
        }
    .lnav{
         70px;
        height: 30px;
        background: #008000;
        }
    .rnav{
        height: 40px;
        background: #EE2C2C;
        flex-grow: 1;
        }

    (3)绝对布局(和float类似)

    .par{
         300px;
        border: solid 1px #0000FF;
        height: 60px;
        position: relative;
    }
    .lnav{
         70px;
        height: 30px;
        background: #008000;
        position: absolute;
        left: 0;
        top: 0;
    }
    .rnav{
        height: 40px;
        background: #EE2C2C;
        margin-left: 70px;
    }

    (4)display:table

    .par{
         300px;
        border: solid 1px #0000FF;
        height: 60px;
        display: table;
        }
    .lnav{
         70px;    
        background: #008000;
        display: table-cell;
        }
    .rnav{
        background: #EE2C2C;
        display: table-cell;
        }

    (5)双float+calc()计算属性

    .par{
         300px;
        border: solid 1px #0000FF;
        height: 60px;
        overflow: hidden;
        }
    .lnav{
        float: left;
         70px;    
        height: 30px;
        background: #008000;
        }
    .rnav{
        float: left;
         calc(100% - 70px);// 减号左右留空格
        height: 40px;
        background: #EE2C2C;
        }

    两个行内元素

    如:css 实现一个自适应搜索框,输入框部分宽度自适应,搜索按钮宽度固定   (行内元素)

    (1)flex布局(与上面相同)

    (2)float+calc()+box-sizing

    .par{
         300px;
        border: solid 1px #0000FF;
        height: 60px;
        overflow: hidden;
    }
    .lnav{
        float: left;
         70px;    
        height: 30px;
        background: #008000;
        box-sizing: border-box;
    }
    .rnav{
        float: right;
         calc(100% - 70px);
        height: 40px;
        background: #EE2C2C;
        box-sizing: border-box;
    }

    二、多列等高布局

     效果图:

     (1)flex布局

    .container{
        display: flex;
    }
    .left,.right,.center{
        flex-grow: 1;
    }
    .left{
        background: #0000FF;
    }
    .right{
        background: #00BFFF;
    }
    .center{
        background: #9ACD32;
    }
    <div class='container'>
        <div class='left'>多列等高布局左<br/>多列等高布局左</div>
        <div class='center'>多列等高布局中</div>
        <div class='right'>多列等高布局右</div>
    </div>   
    //缺点:IE9及以下版本不支持flex属性 //优点:实现方便,还可以实现各种比例

    (2)利用border实现

    .wrapper{
        display: inline-block;
         200px;
        border-left: 200px solid #00BFFF;/*相当于设置left1的背景*/
        background: #808080;
        border-right: 200px solid #FFFF00;/*相当于设置right1的背景*/
    }
    .left1{
        float: left;
         200px;
        margin-left: -200px;
        padding: 20px;
    }
    .center1{
        float: left;
        padding: 20px;
    }
    .right1{
        float:right;
        padding: 20px;
        margin-right: -200px;
    }
    
    <div class='wrapper'>
        <div class='left1'>多列等高布局左</div>
        <div class='center1'>
            多列等高布局中<br/>多列等高布局中<br/>多列等高布局中
        </div>
        <div class="right1">
            多列等高布局右<br/>多列等高布局右
        </div>
    </div>
    //这种方法只能最多只能实现三列等高,兼容IE8+

    (3)利用margin和padding对冲实现  注意父元素设置“overflow:hidden”

    #wrapper2 {
         overflow: hidden;
    }        
    .column2 {
         float: left;
          200px;
         margin-bottom: -99999px;
         padding-bottom: 99999px;
    }
    .left2 {
        background: #6ee0b6;
    }
    .center2 {
         background: #f3777b;
    }
    .right2 {
         background: #c3c3ff;
    }
    
    <div id="wrapper2">
        <div class="column2 left2">
               <p>Sidebar</p>
        </div>
            <div class="column2 center2">
              <p>Main content;content;content;content;content</p>
            </div>
            <div class="column2 right2">
               <p>Sidebar</p>
        </div>
    </div>

     优点:兼容所有浏览器

  • 相关阅读:
    Codeforces Round #392 (Div. 2)
    hihocoder #1419 : 后缀数组四·重复旋律4
    hihocoder #1415 : 后缀数组三·重复旋律3
    LOJ #6284. 数列分块入门 8-分块(区间查询等于一个数c的元素,并将这个区间的所有元素改为c)
    LOJ #6283. 数列分块入门 7-分块(区间乘法、区间加法、单点查询)
    LOJ #6282. 数列分块入门 6-分块(单点插入、单点查询、数据随机生成)
    LOJ #6281. 数列分块入门 5-分块(区间开方、区间求和)
    LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)
    LOJ #6279. 数列分块入门 3-分块(区间加法、查询区间内小于某个值x的前驱(比其小的最大元素))
    LOJ #6278. 数列分块入门 2-分块(区间加法、查询区间内小于某个值x的元素个数)
  • 原文地址:https://www.cnblogs.com/xiaoan0705/p/10484350.html
Copyright © 2011-2022 走看看