您现在的位置是:网站首页> 编程资料编程资料

CSS的三列式"圣杯布局"方案完全解析浅谈css双飞翼布局和圣杯布局CSS布局之圣杯布局与双飞翼布局 面试必问:圣杯布局和双飞翼布局的区别

2023-10-22 341人已围观

简介 圣杯布局效果优美且对浏览器兼容性要求非常低,是一种非常给力的三列式页面布局方案,接下来就来看看对CSS的三列式"圣杯布局"方案完全解析:

圣杯布局源自 Matthew Levine 在06年的一篇文章,其DOM结构如下:

XML/HTML Code复制内容到剪贴板
  1. <div class="container">  
  2.     <div class="main">div>  
  3.  <div class="sub">div>  
  4.  <div class="extra">div>  
  5. div>  

流程解说
接下来,让我们一步一步地实现圣杯布局;

1、 首先分别浮动main、sub、extra三列, 然后利用负外边距把sub列和extra列定位到左右两边。这时的CSS代码如下:

CSS Code复制内容到剪贴板
  1. .main {   
  2.  floatleft;   
  3.  width: 100%;   
  4.  height300px;   
  5.  background-color: rgba(255, 0, 0, .5);   
  6. }   
  7. .sub {   
  8.  floatleft;   
  9.  width200px;   
  10.  height300px;   
  11.  margin-left: -100%;   
  12.  background-color: rgba(0, 255, 0, .5);   
  13. }   
  14. .extra {   
  15.  floatleft;   
  16.  width180px;   
  17.  height300px;   
  18.  margin-left: -180px;   
  19.  background-color: rgba(0, 0, 255, .5);   
  20. }  

2、 完成上步后,sub和extra列已经到了正确的位置,但是sub和extra列却覆盖了main的两边,对于这个问题,圣杯布局的解决办法是给容器container添加左、右内边距,从而让main列定位到正确的位置。

CSS Code复制内容到剪贴板
  1. .container {   
  2.  padding-left210px;   
  3.  padding-right190px;   
  4. }  

3、 完成第二步后又出现了新问题:sub、extra列也受到容器左右内边距的影响位置发生了移动。为了解决这个问题,圣杯布局使用相对定位使sub、extra列回到正确的位置。新添加代码如下:

CSS Code复制内容到剪贴板
  1. .sub {   
  2.  positionrelative;   
  3.  left: -210px;   
  4. }   
  5. .extra {   
  6.  positionrelative;   
  7.  rightright: -190px;   
  8. }  

4、 当浏览器缩小到一定程度时,这个布局可能会被破坏,可以在body上添加min-width属性解决。最终的圣杯布局CSS代码如下:

CSS Code复制内容到剪贴板
  1. body {   
  2.  min-width600px/* 2*sub + extra */  
  3. }   
  4. .container {   
  5.  padding-left210px;   
  6.  padding-right190px;   
  7. }   
  8. .main {   
  9.  floatleft;   
  10.  width: 100%;   
  11.  height300px;   
  12.  background-color: rgba(255, 0, 0, .5);   
  13. }   
  14. .sub {   
  15.  positionrelative;   
  16.  left: -210px;   
  17.  floatleft;   
  18.  width200px;   
  19.  height300px;   
  20.  margin-left: -100%;   
  21.  background-color: rgba(0, 255, 0, .5);   
  22. }   
  23. .extra {   
  24.  positionrelative;   
  25.  rightright: -190px;   
  26.  floatleft;   
  27.  width

相关内容

-六神源码网