关于圣杯布局的一些浅解

圣杯布局

首先放一下原址及出处:圣杯布局

容器div的侧面有自适应中心和固定宽度的衬垫。然后诀窍是让左列与左侧填充对齐,右侧列与右侧填充对齐,留下中心列以填充容器的自适应宽度。

圣杯大致框架,一个左边元素块,一个右边元素块,一个中间元素块

    <div class="total">
        <div class="center pub">this is center</div>
        <div class="left pub">this is left</div>
        <div class="right pub">this is right</div>        
    </div>

然后为框架添加一些样式

        div{
            text-align: center;            //文字居中
        }
        .total{
            padding:0 150px 0 200px;       //为了等会能有个清晰认识,特意使左右内边距不一致,右内边距设为150px,左内边距设为200px
        }
        .pub{
                                           //公共样式
        }
        .left{
            background-color: #77BBDD;
        }
        .right{
            background-color: #FF6633;
        }
        .center{
            background-color: #666666;
        }

关于圣杯布局的一些浅解

        .left{
            background-color: #77BBDD;
            width:200px;
        }
        .right{
            background-color: #FF6633;
            width:150px;
        }
        .center{
            background-color: #666666;
            width:100%;      //中心列的100%宽度是指容器div的宽度,不包括填充。当布局结合在一起时,我们会再次看到这个100%的宽度,它仍将引用容器的这个中心宽度。
        }

为了清晰点,给公共样式加点底料
关于圣杯布局的一些浅解

        .pub{
            float:left;                 为了使所有元素在同一行显示,但由于之前center的width属性设置为100%,故left与right另起一行
            height:100px;
            position:relative;
        }

关于圣杯布局的一些浅解

        .left{
            background-color: #77BBDD;
            width:200px;
            margin-left:-100%;
        }

关于圣杯布局的一些浅解这里就有需要进行说明:
刚刚不是说center因为设置了width:100%导致left和right进行换行了吗,那为什么left这时又上去了呢,并且覆盖了center的一部分,其实这里就是应用了margin负数值的特性:如果给一个浮动元素加上相反方向的负margin,则会使行间距为0且内容重叠,因此在这里left是对center进行了一个覆盖操作。附上一个我觉得解释还不错的同好地址margin负值

接下来的操作就简单多了,利用relative的特点,对left进行左移

        .left{
            background-color: #77BBDD;
            width:200px;
            margin-left:-100%;
            right: 200px;                        //ps:解释在下
        }

关于圣杯布局的一些浅解注意:relative是相对于块元素自身的位置。