美文网首页
关于圣杯布局——浮动&负margin以及calc

关于圣杯布局——浮动&负margin以及calc

作者: 进击的前端 | 来源:发表于2016-08-10 15:40 被阅读176次

    圣杯布局的特点是两边定宽,中间自适应。

    传统的布局方法

    html结构

    比如下面的html,

    <style>
           header,footer{
                background-color: mediumaquamarine;
            }
            .main{
                background-color: blanchedalmond;
            }
            .left{
                background-color: azure;
            }
            .right{
                background-color: aqua;
            }
    </style>
    <header>Header</header>
    <div class="bd">
        <div class="main">Main</div>
        <div class="left">Left</div>
        <div class="right">Right
        </div>
    </div>
    <footer>Footer</footer>
    
    初始化结构

    设置宽度

    首先我们给他们赋予宽度,设定左边100px,右边80px,中间的自适应,所以我们就给100%宽,然后利用父元素的padding给设定left为100px,right为80px.

     <style>
            header,footer{
                background-color: mediumaquamarine;
            }
            .bd{
                padding-left: 100px;
                padding-right: 80px;
                overflow: hidden;
            }
            .main{
                background-color: blanchedalmond;
                width: 100%;
                float: left;
            }
            .left{
                background-color: sandybrown;
                width: 100px;
                float: left;
    
            }
            .right{
                background-color: aqua;
                width: 80px;
                float: left;
            }
    </style>
    
    设定宽度

    负margin和浮动调整位置

    负margin可以让元素重叠,如果是左边的margin,那就和左边重叠,这里要注意一点,就是margin的百分比,如果是left和top,那么被百分比的主体是前面的元素。
    比如这里的left,我们给添加一个

    .left {
     margin-left: 100%;
    }
    

    你会发现,它有右移了一个main的宽度,而不是自身的宽度



    所以我们给left一个100%的负margin以及right一个它自身宽度的margin,让他们到上面来。

    .left {
     background-color: sandybrown;
     width: 100px;
     float: left;
     margin-left: -100%;
    }
    .right {
     background-color: aqua;
     width: 80px;
     float: left;
     margin-left: -80px;
    }
    
    偏移以后

    relative偏移

    看到他们离目标位置,都只剩下一个自身了。relative和left,right可以在原来的位置上偏移,所以下面就很简单了

    .left {
     background-color: sandybrown;
     width: 100px;
     float: left;
     margin-left: -100%;
     position: relative;
     left: -100px;
    }
    .right {
     background-color: aqua;
     width: 80px;
     float: left;
     margin-left: -80px;
     right: -80px;
     position: relative;
    }
    
    最终结果

    利用calc来布局

    页面格式就正常的来

    <header>Header</header>
    <div class="bd">
        <div class="left">Left</div>
        <div class="main">Main</div>
        <div class="right">Right
        </div>
    </div>
    <footer>Footer</footer>
    

    然后设置主元素overflow,里面的元素float

    <style>
        header,footer{
            background-color: mediumaquamarine;
        }
        .bd{
            overflow: hidden;
        }
        .main{
            background-color: blanchedalmond;
            float: left;
        }
        .left{
            background-color: sandybrown;
            float: left;
        }
        .right{
            background-color: aqua;
            float: left;
        }
    </style>
    

    然后设置宽度

    <style>
        header,footer{
            background-color: mediumaquamarine;
        }
        .bd{
            overflow: hidden;
        }
        .main{
            background-color: blanchedalmond;
            float: left;
            width: calc(100% - 80px - 100px );
        }
        .left{
            background-color: sandybrown;
            float: left;
            width: 100px;
        }
        .right{
            background-color: aqua;
            float: left;
            width: 80px;
        }
    </style>
    

    有时候觉得,奇淫技巧的原因在于时代问题吧。起码时代变得越来越好吧。

    相关文章

      网友评论

          本文标题:关于圣杯布局——浮动&负margin以及calc

          本文链接:https://www.haomeiwen.com/subject/wpkjsttx.html