css布局之圣杯布局和双飞翼布局

圣杯布局和双飞翼布局

今天看了很多圣杯布局和双飞翼布局的技术博客,通过自己的理解总结一下吧。

  • 1.二者相同点: 
    实现的都是三栏布局,两边的盒子宽度固定,中间盒子自适应,也就是我们常说的固比固布局。它们实现的效果是一样的。
  • 2.不同点: 
    圣杯布局知识点:浮动,负边距,相对定位,不需要添加额外标签。 
    双飞翼:只用到浮动,负边距,不需要使用相对定位,需要添加一个额外的标签
  • 注意html结构中中间部分要写在左右布局之前,为了优先渲染。
  • 下面就先来看一下圣杯布局的实现过程吧: 
    先写出基本DOM结构:
    <div class="header"></div>    <div class="body">        <div class="middle">middle</div>         <div class="left">left</div>        <div class="right">right</div>    </div>      <div class="footer"></div>

然后给出基本的样式:

      * {        margin:0;        padding:0;      }      .header {        width: 800px;        height: 60px;        background-color: #ccc;      }      .body {        width: 800px;      }      .middle{        width: 100%;        background-color: #cc0;      }      .left{        width: 100px;        background-color: #c0c;      }      .right {        width: 150px;        background-color: #0c0;      }      .footer {        width: 800px;        height: 60px;        background-color: #ccc;      }

实现效果如图:

接着给body部分三个块加上浮动 float:left,别忘了footer部分清除浮动clear:both

因为middle部分宽度100%,所以left和right挤到下面,如图示:

那么怎么使left和right块跑到middle上呢,关键的一步来了,给left一个负边距margin-left:-100%; 对的,你没有看错,注意是-100%也就是middle的自适应宽度值,这样left块就跑到middle最左边了,同理,给right一个负边距margin-right: -150px;(right块的自身宽度值),这样right块就跑到middle最右边了,效果如图:

当然这样还不行,因为middle盒子里的内容会被left和right挡住,如图:

所以,我们先给这三个块的父级容器即body加一个padding值: 
padding-left: 100px; padding-right:150px;,同时body的宽度值800px减去padding改为 550px;可以看到:

最后压轴部分来了,要使用相对定位把左右块分别拉到左右边,给left一个position:relative; left: -100px; 给right 一个position:relative; right:-150px; 就大功告成了:

总体css代码如下:

      * {        margin:0;        padding:0;      }      .header {        width: 800px;        height: 60px;        background-color: #ccc;      }      .body {        width: 550px;        padding-left:100px;        padding-right:150px;      }      .middle{        float:left;        width: 100%;        background-color: #cc0;      }      .left{        float:left;        width: 100px;        position: relative;        left: -100px;        margin-left:-100%;        background-color: #c0c;      }      .right {        float:left;        width: 150px;        position: relative;        right:-150px;        margin-left:-150px;        background-color: #0c0;      }      .footer {        clear:both;        width: 800px;        height: 60px;        background-color: #ccc;      }

其实双飞翼布局相比圣杯布局就只是改动了一小点,在middle标签里加一个内部标签,基本实现过程也相差不大,直接看代码吧: 
DOM结构部分:

        <div class="header"></div>        <div class="body">            <div class="middle">                <div class="inner">main</div>            </div>            <div class="left">left</div>            <div class="right">right</div>        </div>        <div class="footer"></div>

样式部分:

*{        padding:0;        margin:0;     }     .container {        width: 800px;        margin:0 auto;     }     .header,.footer {        height: 60px;        clear:both;        background-color: #888;     }     .middle{        width: 100%;        float:left;        background-color: #cc0;     }     .left {        float:left;        width: 100px;        margin-left:-100%;        background-color: #c0c;     }     .right {        float:left;        width: 150px;        margin-left: -150px;        background-color: #0cc;     }     .inner {        margin-left:100px;        margin-right:150px;     }

双飞翼布局是淘宝UED团队提出的,淘宝网的头部部分就使用了此布局:

时间: 2024-08-24 05:48:04

css布局之圣杯布局和双飞翼布局的相关文章

CSS中的圣杯布局,以及圣杯布局与双飞翼布局的区别

为了解决中间宽度自适应,左右列固定宽度,最早出现的是圣杯布局,双飞翼布局是对圣杯布局的改良,同样这种 布局的优势在于在中间列中的文档可以优先渲染. 1.什么是圣杯布局 其实对于圣杯布局,前面一部分与双飞翼布局完全相同 <style>   .column{ float:left } .container{ width:100% } .column{ height:300px; }   #center_panel{ width:100%;  background-color:red; } #rig

【CSS】 布局之圣杯布局

在看众多大神的css布局指南时,经常看到一个布局:圣杯布局(也有称为双飞翼布局的).今天我们也来剖析一下. 其实,对于众多css布局,我们只要明确理解了3种技术,那么基本上大多数布局都难不倒我们了: 浮动 float 绝对定位和相对定位 negative margin 负边距 relative position 浮动 浮动的框可以向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止. 由于浮动框不在文档的普通流中,所以文档的普通流中的块框表现得就像浮动框不存在一样.(w3c) 上面是

负边距、三栏布局(圣杯布局、双飞翼布局)

首先来了解下 一.负边距在让元素产生偏移时和position: relative有什么区别? position:relative产生偏移时,他原来的位置不会脱离文档流的,即还占用原来的空间,但负边距产生偏移时它原来的位置并不占用空间: 例如下面的代码 Document *{ margin: 0px; padding: 0px; } .up,.down,.middle{ background-color: red; height: 100px; width: 100px; } .negative-

CSS中经典的双飞翼布局(

笔者在一些博客和论坛中经常看到经典的双飞翼布局,淘宝的首页也运用了这种兼容性很好的双飞翼布局 1.何谓双飞翼布局? 简单来说,双飞翼布局是将一个网页分为左列,中列和右列三部分,并且我们要得到的效果是: 左列和右列宽度恒定,中间列的宽度根据浏览器窗口的大小自适应. 2.如何实现双飞翼布局? (1)首先我们要得到如下的布局样式: <div class="container"> <div class="column" id="center_pa

CSS之圣杯布局与双飞翼布局

圣杯布局 三行等高 HTML: <!DOCTYPE html><html><head>    <meta charset="utf-8">    <meta http-equiv="X-UA-Compatible" content="IE=edge">    <title></title>    <link rel="stylesheet"

css margin负边距之列布局(列表、圣杯、双飞翼)

技术服务于应用,技术来源于应用. 应用1:当接到设计师给的设计图时(如下图),发现每列左右和上下文保持一致,顿时整个心情就不好了.因为要兼顾响应式,即没办法保证每个列表单元的具体位置,是列表中间还是边缘,边缘两个要保证(左或右)内外边距为零,无法获得理想布局,综合多次搜索,得到解决办法: *** 增加列表区域宽度,margin设为负值. 原理相信有css基础的道友都清楚(负边距不仅能影响元素在文档流的位置,还能增加元素的宽度),父元素向右增加宽度(margin负值)与列表元素右边距相等,因使用的

CSS布局 -- 圣杯布局 &amp; 双飞翼布局

按照我的理解,其实圣杯布局跟双飞翼布局的实现,目的都是左右两栏固定宽度,中间部分自适应. 但在这里实现起来还是有一些区别的 [圣杯布局] 在这里,实现了左(200px) 右(220px) 宽度固定,中间自适应,container部分高度保持一致. DEMO 稍微说明一下: html代码中  middle部分首先要放在container的最前部分.然后是left,right 1.将三者都 float:left , 再加上一个position:relative (因为相对定位后面会用到) 2.mid

css中的圣杯布局和双飞翼布局

圣杯布局 布局要求: 三列布局,中间自适应,两边定宽 中间栏要在浏览器优先渲染 允许任意列的高度最高 用最简单的CSS.最少的HACK语句 解释说明: 1.min-width:700px是为了当页面缩小到指定的700px的时候,页面内容宽度不再随着浏览器缩小.是为了电脑的正常浏览效果 2.注意到container设置的值0 220px  0 200px,上 右 下 左,所以left 设置widh:200px,right设置width:220px 3.设置min-height:300px,是让三列

CSS网页布局基础-圣杯布局和双飞翼布局

行布局 多列布局 圣杯布局 双飞翼布局 一.行布局 行布局垂直水平居中 注:这里没有用margin: 0 auto;先让它水平居中,而是使用了绝对定位布局,然后设置top:50%; left:50%;但是光设置这个还不够,因为这并不是水平垂直居中,因为它并没有考虑自身的宽度和高度,所以这里根据盒子本身的高宽又再此基础上设置了margin-left和margin-top.如果只设置了top:50%; left:50%;而没有设置margin-left和margin-top,效果如下: 代码如下: