栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > Html/CSS > CSS教程

CSS的三列式"圣杯布局"方案完全解析

CSS教程 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

XML/HTML Code复制内容到剪贴板
  1.   
  2.     
  
  •  
  •   
  •  
  •   
  •   

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

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

    CSS Code复制内容到剪贴板
    1. .main {   
    2.  float: left;   
    3.  width: 100%;   
    4.  height: 300px;   
    5.  background-color: rgba(255, 0, 0, .5);   
    6. }   
    7. .sub {   
    8.  float: left;   
    9.  width: 200px;   
    10.  height: 300px;   
    11.  margin-left: -100%;   
    12.  background-color: rgba(0, 255, 0, .5);   
    13. }   
    14. .extra {   
    15.  float: left;   
    16.  width: 180px;   
    17.  height: 300px;   
    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-left: 210px;   
    3.  padding-right: 190px;   
    4. }  

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

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

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

    CSS Code复制内容到剪贴板
    1. body {   
    2.  min-width: 600px;   
    3. }   
    4. .container {   
    5.  padding-left: 210px;   
    6.  padding-right: 190px;   
    7. }   
    8. .main {   
    9.  float: left;   
    10.  width: 100%;   
    11.  height: 300px;   
    12.  background-color: rgba(255, 0, 0, .5);   
    13. }   
    14. .sub {   
    15.  position: relative;   
    16.  left: -210px;   
    17.  float: left;   
    18.  width: 200px;   
    19.  height: 300px;   
    20.  margin-left: -100%;   
    21.  background-color: rgba(0, 255, 0, .5);   
    22. }   
    23. .extra {   
    24.  position: relative;   
    25.  rightright: -190px;   
    26.  float: left;   
    27.  width: 180px;   
    28.  height: 300px;   
    29.  margin-left: -180px;   
    30.  background-color: rgba(0, 0, 255, .5);   
    31. }  

    点击查看在线demo

    完整实例
    效果如下:
    201662115852310.png (900×465)

    CSS 和 DOM 代码如下:

    CSS Code复制内容到剪贴板
    1.   
    2.   
    3.   
    4.        
    5.        
    6.     圣杯布局   
    7.   
    8.        
    9.     body {background-color: #ffffff; font-size:14px;}   
    10.     #hd, #ft {padding:20px 3px; background-color: #cccccc; text-align: center;}   
    11.     .bd-lft, .bd-rgt, .bd-3-lr, .bd-3-ll, .bd-3-rr {margin:10px 0; min-width:400px;}   
    12.     .main {background-color: #03a9f4; color:#ffffff;}   
    13.     .aside, .aside-1, .aside-2 {background-color: #00bcd4; color:#ffffff;}   
    14.     p {margin:0; padding:20px; text-align: center;}   
    15.        
    16.        
    17.       
    18.     .bd-lft {   
    19.         zoom:1;   
    20.         overflow:hidden;   
    21.         padding-left:210px;   
    22.     }   
    23.     .bd-lft .aside {   
    24.         float:left;   
    25.         width:200px;   
    26.         margin-left:-100%;   
    27.   
    28.         position:relative;   
    29.         left:-210px;   
    30.         _left: 0;   
    31.     }   
    32.     .bd-lft .main {   
    33.         float:left;   
    34.         width:100%;   
    35.     }   
    36.   
    37.   
    38.       
    39.     .bd-rgt {   
    40.         zoom:1;   
    41.         overflow:hidden;   
    42.         padding-right:210px;   
    43.     }   
    44.     .bd-rgt .aside {   
    45.         float:left;   
    46.         width:200px;   
    47.         margin-left:-200px;   
    48.   
    49.         position:relative;   
    50.         rightright:-210px;   
    51.     }   
    52.     .bd-rgt .main {   
    53.         float:left;   
    54.         width:100%;   
    55.     }   
    56.   
    57.   
    58.       
    59.     .bd-3-lr {   
    60.         zoom:1;   
    61.         overflow:hidden;   
    62.         padding-left:210px;   
    63.         padding-right:210px;   
    64.     }   
    65.     .bd-3-lr .main {   
    66.         float:left;   
    67.         width:100%;   
    68.     }   
    69.     .bd-3-lr .aside-1 {   
    70.         float: left;   
    71.         width:200px;   
    72.         margin-left: -100%;   
    73.   
    74.         position:relative;   
    75.         left: -210px;   
    76.         _left: 210px;   
    77.     }   
    78.     .bd-3-lr .aside-2 {   
    79.         float: left;   
    80.         width:200px;   
    81.         margin-left: -200px;   
    82.   
    83.         position:relative;   
    84.         rightright: -210px;   
    85.     }   
    86.   
    87.       
    88.     .bd-3-ll {   
    89.         zoom:1;   
    90.         overflow:hidden;   
    91.         padding-left:420px;   
    92.     }   
    93.     .bd-3-ll .main {   
    94.         float:left;   
    95.         width:100%;   
    96.     }   
    97.     .bd-3-ll .aside-1 {   
    98.         float: left;   
    99.         width:200px;   
    100.         margin-left: -100%;   
    101.   
    102.         position:relative;   
    103.         left: -420px;   
    104.         _left: 0px;   
    105.     }   
    106.     .bd-3-ll .aside-2 {   
    107.         float: left;   
    108.         width:200px;   
    109.         margin-left: -100%;   
    110.   
    111.         position:relative;   
    112.         left: -210px;   
    113.         _left: 210px;   
    114.     }   
    115.   
    116.       
    117.     .bd-3-rr {   
    118.         zoom:1;   
    119.         overflow:hidden;   
    120.         padding-right:420px;   
    121.     }   
    122.     .bd-3-rr .main {   
    123.         float:left;   
    124.         width:100%;   
    125.     }   
    126.     .bd-3-rr .aside-1 {   
    127.         float: left;   
    128.         width:200px;   
    129.         margin-left: -200px;   
    130.   
    131.         position:relative;   
    132.         rightright: -210px;   
    133.     }   
    134.     .bd-3-rr .aside-2 {   
    135.         float: left;   
    136.         width:200px;   
    137.         margin-left: -200px;   
    138.   
    139.         position:relative;   
    140.         rightright: -420px;   
    141.     }   
    142.   
    143.   
    144.        
    145.   
    146.   
    147.   
    148.   
    149.     "hd">头部   
    150.        
    151.     "bd-lft">   
    152.         "main">   
    153.             

      主内容栏自适应宽度

        
    154.            
    155.   
    156.         "aside">   
    157.             

      侧边栏固定宽度

        
    158.            
    159.        
    160.   
    161.     "bd-rgt">   
    162.         "main">   
    163.             

      主内容栏自适应宽度

        
    164.            
    165.   
    166.         "aside">   
    167.             

      侧边栏固定宽度

        
    168.            
    169.        
    170.   
    171.     "bd-3-lr">   
    172.         "main">   
    173.             

      主内容栏自适应宽度

        
    174.            
    175.   
    176.         "aside-1">   
    177.             

      侧边栏1固定宽度

        
    178.            
    179.   
    180.         "aside-2">   
    181.             

      侧边栏2固定宽度

        
    182.            
    183.        
    184.   
    185.     "bd-3-ll">   
    186.         "main">   
    187.             

      主内容栏自适应宽度

        
    188.            
    189.   
    190.         "aside-1">   
    191.             

      侧边栏1固定宽度

        
    192.            
    193.   
    194.         "aside-2">   
    195.             

      侧边栏2固定宽度

        
    196.            
    197.        
    198.   
    199.     "bd-3-rr">   
    200.         "main">   
    201.             

      主内容栏自适应宽度

        
    202.            
    203.   
    204.         "aside-1">   
    205.             

      侧边栏1固定宽度

        
    206.            
    207.   
    208.         "aside-2">   
    209.             

      侧边栏2固定宽度

        
    210.            
    211.        
    212.        
    213.     "ft">底部   
    214.   
    215.   
    216.   

    圣杯布局的优点总结如下:
    1.使主要内容列先加载。
    2.允许任何列是最高的。
    3.没有额外的div。
    4.需要的hack很少。

    转载请注明:文章转载自 www.mshxw.com
    本文地址:https://www.mshxw.com/it/215859.html

    CSS教程相关栏目本月热门文章

    我们一直用心在做
    关于我们 文章归档 网站地图 联系我们

    版权所有 (c)2021-2022 MSHXW.COM

    ICP备案号:晋ICP备2021003244-6号