圣杯布局与双飞翼布局的实现&区别

圣杯布局与双飞翼布局的目的都是为了实现三列等高布局,并且左右两列定宽,中间一列宽度自适应。

下面分别讨论一下:
1、圣杯布局
首先解释一下此布局和圣杯没有一毛钱关系~~~我也不知道为啥就叫这个名字了,不过看名字应该是西方人的东西。代码如下:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>圣杯布局</title>
    <style type="text/css">
        *{margin: 0; padding: 0;}
        .body{padding: 0 210px 0 200px; overflow: hidden; margin-bottom:-9999px; padding-bottom:9999px;}
        .main{width: 100%; float: left; background: gray;}
        .left{width: 200px; float: left; background: #CD4545; margin-left: -100%; position: relative; left: -200px;}
        .right{width: 210px; float: left; background: #5C61D0; margin-left: -210px; position: relative; right: -210px;}
        .foot{background: #736E6E; height: 50px;text-align: center;}
    </style>
</head>
<body>
    <div class="body">
        <div class="main">
            <h2>main</h2>
            <pre>
.main{
    float:left;
}
            </pre>
        </div>
        <div class="left">
            <h2>left</h2>
            <pre>
.left{
    float:left;
    margin-left:-100%;
    position:relative;
    left:-200px;
}
            </pre>
        </div>
        <div class="right">
            <h2>right</h2>
            <pre>
.right{
    float:left;
    margin-left:210px;
    position:relative;
    left:-210px;
}
            </pre>
        </div>
    </div>
    <div class="foot">
        <h2>foot</h2>
    </div>
</body>
</html>

firfox中打开,效果图如下:
效果图
left的宽度为200px,right的宽为210px,main的宽度自适应,并且整体高度以最高的那列为根据。
圣杯布局的特点是先对body设置padding: 0 200px 0 210px,先把left和right的空间挤出来,再把left和right的position设置为relative,通过设置负边距达到移动left和right的效果。使用圣杯布局时一定要先渲染main,也就是把main写在前面。


2、双飞翼布局
先上代码:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <title>圣杯布局</title>
    <style type="text/css">
        *{margin: 0; padding: 0;}
        .body{overflow: hidden;margin-bottom:-9999px; padding-bottom:9999px;}
        .main{width: 100%; float: left; background: gray;}
        .mainContent{margin: 0 210px 0 200px;}/*多的一层,用来装main的内容*/
        .left{width: 200px; float: left; background: #CD4545; margin-left: -100%;}
        .right{width: 210px; float: left; background: #5C61D0; margin-left: -210px;}
        .foot{background: #736E6E; height: 50px;text-align: center;}
    </style>
</head>
<body>
    <div class="body">
        <div class="main">
            <div class="mainContent">
                <h2>main</h2>
                <pre>
.main{
    float:left;
}
            </pre>
            </div>
        </div>
        <div class="left">
            <h2>left</h2>
            <pre>
.left{
    float:left;
    margin-left:-100%;
    position:relative;
    left:-200px;
}
            </pre>
        </div>
        <div class="right">
            <h2>right</h2>
            <pre>
.right{
    float:left;
    margin-left:210px;
    position:relative;
    left:-210px;
}
            </pre>
        </div>
    </div>
    <div class="foot">
        <h2>foot</h2>
    </div>
</body>
</html>

效果图也和双飞翼一模一样。
代码与圣杯布局非常相似,区别是:

  1. 取消了left和right的position:relative和body的padding;
  2. 在main中增加了一层div:mainContent,专门用来装main的内容;通过设置mainContent的margin来达到显示内容的目的,这个设计实在是巧妙,使人们更容易理解;
  3. 在圣杯布局中人为的为left和right挤压出了空间,而在双飞翼中只是根据left和right的宽度移动了main中的内容;

下面是两片我感觉比较好的介绍圣杯和双飞翼的文章:
http://www.imooc.com/wenda/detail/254035
http://www.cnblogs.com/imwtr/p/4441741.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值