您现在的位置:首页 >> 前端 >> 内容

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

时间:2016/5/10 9:12:20 点击:

  核心提示:为了解决中间宽度自适应,左右列固定宽度,最早出现的是圣杯布局,双飞翼布局是对圣杯布局的改良,同样这种布局的优势在于在中间列中的文档可以优先渲染。1.什么是圣杯布局其实对于圣杯布局,前面一部分与双飞翼布...

为了解决中间宽度自适应,左右列固定宽度,最早出现的是圣杯布局,双飞翼布局是对圣杯布局的改良,同样这种

布局的优势在于在中间列中的文档可以优先渲染。

 

1.什么是圣杯布局

其实对于圣杯布局,前面一部分与双飞翼布局完全相同

 

    <style>
    
    .column{
       float:left
    }
    .container{
       width:100%
     }
    .column{
      height:300px;
     } 
    #center_panel{
      width:100%;
      background-color:red;
    }
    #right_panel{
     width:300px;
     margin-left:-100%;
     background-color:green;
  }
   #left_panel{
     width:300px;
       margin-left:-300px;
       background-color:green;
      }
style>

<body>
  
    <p class="container">
        <p class="column" id="center_panel">p>
        <p class="column" id="right_panel">p>
      <p class="column" id="left_panel">p>
     p>
body>
html>
      
      这样,大致实现了中间宽度自适应,左边和右边的宽度恒定,但是同时也出现了问题,就是中间panel

的部门内容被左边和右边的固定宽度层给遮挡了。
    
      双飞翼布局和圣杯布局,也就是在如果解决中间层被遮挡的问题上会有不同。

  
      2.圣杯布局如何解决中间层被遮挡
      
      圣杯布局通过padding来解决此问题,因为左边的固定宽度为300px;右边的固定列的宽度为300px;
  
      我们设想可以用padding-left:300px;padding-right:300px;来解决问题,然而我们发现,如果
     
      简单的设置
      .container{
      padding-left:300px;
      paddding-right:300px;
      }
      出现的效果为:
      
CSS中的圣杯布局,以及圣杯布局与双飞翼布局的区别

 

我们发现左右两列也会同时具有padding值,为了达到不覆盖中间层,并且左右两列没有padding,这里我们对于左右边列,实行相对定位relative;

 

具体设置如下:

 

       #right_panel{
           
              width:300px;
   
              margin-left:-100%;
  
              background-color:green;
 
              position: relative;
   
              left:-300px;
        }
    
      #left_panel{
 
              width:300px;
  
              margin-left:-300px;
   
              background-color:green;
   
              position: relative;
   
             left:-300px;

        }

 

如此一来,我们就实现了圣杯布局,并且左右的列也不会覆盖中间列的一些内容,效果如下:

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

3.双飞翼布局如何解决中间部分被覆盖的方法

双飞翼布局解决中间层覆盖的方法

很简单,就是在center_panel的这一层中增加了一个p,并且设置了这个

p为

 

        <p class="container">
               <p class="column" id="center_panel">
                      <p id="center_child_panel">p>
               p>
               <p class="column" id="right_panel">p>
               <p class="column" id="left_panel">p>
        p>
      并且设置:
      
#center_child_panel{ 
                margin-left:300px;
   
                margin-right:300px;
            }
      至此我们实现了双飞燕布局中解决中间层被左右边列覆盖的问题,效果如下:
      
CSS中的圣杯布局,以及圣杯布局与双飞翼布局的区别

 

Tags:CS SS S中 中的 
作者:网络 来源:liwusen的博客