圣杯布局和双飞翼布局

两个布局的异同

首先我们先来看一下两个布局实现的页面效果
圣杯布局和双飞翼布局_第1张图片

相同点

相同点是两者的表现形式(视觉效果)上都是三栏布局,左右两栏宽度固定,中间部分自适应,也就是常说的固比固布局,需要注意的点如下:

  • 中间的盒子优先渲染(要放在前面),宽度100%,两边的盒子宽度固定不变。
  • 页面的宽度不能小于中间container的盒子宽度,所以body需要一个min-width最小宽度。

不同点

不同点在于是通过什么原理(思想)去实现的,或者具体通过什么方式。

两个布局具体的实现方式

圣杯布局

圣杯布局的出现是来自于a list part上的一篇文章In Search of the Holy Grail

圣杯布局的特点

  • 两边的盒子固定宽度 { width: 200px }。
  • 中间的盒子宽度自适应 { width: 100% }。
  • 右侧盒子的 margin-left 负值是px单位,百分比单位实现不了。
  • 左侧盒子的margin-left 负值是百分比单位(实际的距离是中间盒子的宽度)。

页面结构

<div class="header">
    <span> header内容区域 span>
div>
<div class="container">
    <div class="middle">
        中间弹性盒子区域  
    div>
    <div class="left"> 左边栏 div>
    <div class="right"> 右边栏 div>
div>
<div class="footer"> footer内容区域 div>

页面样式

body {
    margin:0;
    padding:0;
    text-align:center;
    /* 保证页面宽度不能小于1000px */
    min-width:1000px;
}
/* 圣杯布局  start */
.header {
    width:100%;
    height:50px;
    background-color:skyblue;
}
.container {
    height:200px;
    margin:0 200px;  /* 这个也可以*/
    /* padding:0 200px; */
}
.middle {
    width:100%;
    height:200px;
    background-color:red;
    float:left;
}
.left {
    width:200px;
    height:200px;
    background-color:gray;
    margin-left:-100%;
    float:left;
    position:relative;
    left:-200px;
}
.right {
    width:200px;
    height:200px;
    background-color:gray;
    margin-left:-200px;
    float:left;
    position:relative;
    right:-200px;
}
.footer {
    width:100%;
    height:50px;
    background-color:yellowgreen;
}
/* 圣杯布局  end */

圣杯布局中,两侧的盒子使用float和position属性配合,实现了三栏固比固的布局,还使用了margin-left负值来实现盒子的偏移,这样就能让两个盒子浮动在middle中间盒子上面,从而让中间盒子中的内容正常显示出来。

双飞翼布局

双飞翼布局则是源于淘宝的UED,( 据说是玉伯大大提出来的),灵感来自于页面渲染。

双飞翼布局的特点

  • 页面结构和圣杯布局相同,但是在中间盒子内部加了一个盒子。
  • 通过内部盒子的margin属性,将两侧盒子遮挡的位置空出来。
  • 右侧盒子的margin-left负值是px单位,百分比单位实现不了。
  • 左侧盒子的margin-left负值是百分比单位(实际的距离是中间盒子的宽度)。

页面结构

<div class="header">
    <span>header内容区域span>
div>
<div class="container">
    <div class="middle">
        <div class="middle-one">
            中间弹性盒子区域   
        div>
    div>
    <div class="left">左边栏div>
    <div class="right">右边栏div>
div>
<div class="footer">footer内容区域div>

页面样式

body {
    margin:0;
    padding:0;
    min-width:1000px;
    text-align:center;
}
.header {
    width:100%;
    height:50px;
    background-color: skyblue;
}
.container {
    width:100%;
    height:200px;
}
.middle {
    width:100%;
    height:200px;
    background-color: red;
    float:left;
}
.middle-one {
    margin: 0 200px;
}
.left {
    width:200px;
    height:200px;
    background-color: green;
    float:left;
    margin-left:-100%;
}
.right {
    width:200px;
    height:200px;
    background-color: green;
    float:left;
    margin-left:-200px;
}
.footer {
    width:100%;
    height:50px;
    background-color: yellow;
}

通过上面的代码实现过程,不难发现双飞翼和圣杯布局的实现,最本质的区别是中间盒子有一个内部盒子,有没有使用position属性配合float和margin-left负值,用来实现中间内容的正常显示。

你可能感兴趣的:(圣杯布局和双飞翼布局)