CSS圣杯布局(三栏布局)

圣杯布局是两边固定宽度,中间自适应的三栏布局,其中,中间栏放到文档流前面,保证先行渲染。三栏全部float:left浮动,并配合left和right属性。

原理(1.浮动2.负边距):

浮动元素有脱离文档流的特性,负值使得自身向左移动

当三个边长为100px的盒子margin-left均为-20px时出现如下效果;


可以看出3个盒子都向左移动25px;
box1自身向左移动了25px,box2又覆盖了其25px,所以我们就看到了“宽度”为50px的box1
box2,box3以此类推!

当margin-left为-50px时:


如果只给盒子3设置margin-left为-200px:


此时盒子3向左偏移了200px,完全将盒子1覆盖了,

当margin-left为-100%将移动到上一层的第一个位置。

负边距  margin-left为负值,且两个元素不在一行的时候(可以用元素float:left,width:100%实现)margin-left可以吃掉兄弟元素的margin.想像一下,假设width:99%,右边留一条缝隙,当margin-left为负值,即可让右边的这条缝隙向左走

即当使用margin左负值,超过自身的宽度时,这个元素在第一行就有位置了。 而margin的负值达到-100%时,恰能达到窗口最左侧。。

这个100%为父元素的宽度。同理我们假设要挤的元素宽度为200px,则 “挤”200px就可以让这个元素完全挤到兄弟元素的右边去。(摘自http://99jty.com/?p=432


代码如下:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title>圣杯布局</title>
    <style type="text/css">
        *{
            margin: 0;padding: 0;}
        body{
            min-width: 700px;}
        h3{
            padding:0 20px}
    .header{
        width: 100%;
        height: 40px;
        background-color: #646464;
    }
    .footer{
        width: 100%;
        height: 40px;
        margin-top: 300px;
        background-color: #646464;

    }
    .middle{
        float: left;
        width: 100%;
        height: 300px;
        text-align: center;
        background-color: #ffd36a;
    }
     .left{
        float:left;
        width: 200px;
        height: 300px;
        margin-left: -100%;
        background-color: #ff63bd;
        }
     .right{
         float: left;
         width: 200px;
         height: 300px;
         margin-left: -200px;
         background-color: #a2ff95;
        }
    </style>
</head>
<body>
<div class="header">
    <h3>header</h3>
</div>
<div class="middle">
    <h3>middle</h3>
</div>
<div class="left">
    <h3>left</h3>
</div>
<div class="right">
    <h3>right</h3>
</div>
<div class="footer">
    <h3>footer</h3>
</div>
</body>
</html>

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值