双飞翼布局和圣杯布局的理解

在很久以前,有了解过双飞翼布局,但那是仅仅只是了解,当时知道怎么样去布局,但是在后来的实际项目中没有用到,就往了怎么回事了;

前不久去面试,有被问到了这个问题,当时只记得听过,但是具体怎么实现的就全然不知了,所以特地了解了下,并理解了实现原理。

其实最重要的就是利用 float 属性,使盒子脱离文档流;一下记录一下实现方法;

第一步:实现基本布局

<div class="main">
     <div class="center"></div>
     <div class="left"></div>
     <div class="right"></div>
</div>
main{
    width: 100%;
    height: 100px;
    overflow: hidden;
    div{
        height: 100px;
        float: left;
        word-break: break-all;

    }
    .center{
        background: yellow;
        width: 100%;
    }
    .left{
        width: 100px;
        background: deepskyblue;
    }
    .right{
        width: 100px;
        background: red;
    }
}

 

看起来是这样的;只需要做一些调整就ok了,利用margin-left 到达左右布局;left盒子  margin-left :-100%;right 盒子 margin-left :-100px;这样布局基本完成;效果是这样的

 

那么问题来了,中间的盒子就被两边盒子遮挡住了一部分;接下来就是双飞翼布局和圣杯布局的差异了,实现的目的是相同的,只不过是思想不同;

圣杯布局注意利用父级的内边距,也就是padding,然后左右两个盒子的相对定位;让左边盒子向左移,右边盒子向右移动就搞定;

一下是完整的css 代码;

.main{
    width: 100%;
    height: 100px;
    overflow: hidden;
    padding: 0 100px;
    div{
        height: 100px;
        float: left;
        word-break: break-all;
    }
    .center{
        background: yellow;
        width: 100%;
    }
    .left{
        position: relative;
        width: 100px;
        background: deepskyblue;
        margin-left: -100%;
        left: -100px;
    }
    .right{
        position: relative;
        width: 100px;
        background: red;
        margin-left: -100px;
        right: -100px;
    }
}

 

其实我还有一种方法也能实现,也是通过padding ;设置center  中间盒子 padding : 0 100px; 同样可以达到效果。个人觉得没有什么问题;但还是需要实践。也不用给左右两边盒子设置 相对定位了,这样代码量还会少一点;但是这样的话要是给中间盒子设置一个图片背景就话就会麻烦一点,所以还是用经典的圣杯布局和双飞翼吧。经典是有原因的,是经过时间和实践的考考验的。

posted @ 2017-11-12 20:40  奔走_在路上  阅读(281)  评论(0编辑  收藏  举报