1. 论坛系统升级为Xenforo,欢迎大家测试!
    排除公告

最窄 770px 最宽 1024px 的经典布局

本帖由 不学无术2005-12-30 发布。版面名称:新人报道

  1. 不学无术

    不学无术 Ulysses 的元神

    注册:
    2005-08-31
    帖子:
    16,714
    赞:
    39
    最典型实用的上中下,并且中间分三列的布局,这个例子有2个特点:

    1. 中间三列效果,可以任意实现单列背景色。
    2. 整体最窄770px,最宽1024px,也就是说窗口小于770xp就出底部滚动条,如果大于1024px自动屏幕居中。

    IE6.0和FF1.5测试通过

    [​IMG]

    效果浏览:http://www.rexsong.com/blog/attachments/200512/29_154158_minmax_3col.htm

    分析:

    最外层的wrapper把所有内容都嵌套在里边,整体相对定位。max min已经很好的控制了最窄最宽值,但对IE没有作用。如果没有其他布局的穿插,这一层其实写在body内就可以,少一层嵌套。
    HTML:
    #wrapper{ width:auto; border:1px solid #000; min-width:770px; max-width:1024px; text-align:left; margin-left:auto; margin-right:auto; position:relative;}
    wrapper 下级的 outer header footer

    其中header绝对定位,footer 相对定位;outer分别对左右有130px的外边距,这是兼容非IE的关键。
    HTML:
    #outer{ margin-left:130px; margin-right:130px; background:silver; border-left:1px solid #000; border-right:1px solid #000; color: #000;}
    #header{ position:absolute; top:0; left:0; width:100%; height:70px; line-height:70px; border-bottom:1px solid #000; overflow:hidden; background:#0ff; text-align:center; font-size:xx-large}
    #footer { width:100%; clear:both; line-height:50px; border-top:1px solid #000; background:#ffc; color:#000; text-align:center; position:relative;}
    outer 下级的 clearheader outerwrap right clearer

    clearheader 用做填补header的空白,clearer 是一个常用的填充hack用法。
    outerwrap 宽为什么是99%,而不是100%?因为他的上层outer有边框,100%宽再加2个边框象素就会撑大,FF有明显效果。
    right 的处理很经典,IE下解析为定位,FF下则为浮动。负边距的处理也刚好使用上outer留出的空白。
    HTML:
    #clearheader{ height:72px;}
    .outerwrap { float:left; width:99%;}
    #right {
      position:relative;
      width:130px; float:right; left:1px;
      margin-right:-129px;
    }
    * html #right { margin-right:-130px; margin-left:-3px}
    .clearer{ height:1px; overflow:hidden; margin-top:-1px; clear:both;}
    outerwrap 内的 centrecontent left clearer 就很简单了,思路类似上边说明。

    <!--[if gte IE 5]> 指定IE5.0及版本以上浏览器有效

    使用expression方法实现对IE5.0及以上版本的宽度条件控制。
    HTML:
    body {width:expression( documentElement.clientWidth < 770 ? (documentElement.clientWidth == 0 ? (body.clientWidth < 770 ? "770" : "auto") : "770px") : "auto" );}
    #wrapper {width:expression( documentElement.clientWidth > 1024 ? (documentElement.clientWidth == 0 ? (body.clientWidth >1024 ? "1024" : "auto") : "1024px") : "auto" );}
    开始只想搞清楚老外是如何实现居中min max的,没想到最后是expression,太失望了,其实这里使用脚本控制更好。另外,老外原文的 Min width of 800px 是错的,CSS定义就是770px,后来截屏确认也是770px。

    总的来说这是一个很复杂的布局例子,融合了很多经典用法和定义,同时很传统和实用。类似的复杂布局,四层嵌套实现对于传统布局来说还是比较有优势的。

    Referrence:
    3 col layout with equalising columns and footer
    http://www.pmob.co.uk/temp/min-max-3col.htm
     
  2. 西子宜

    西子宜 Well-Known Member

    注册:
    2005-09-05
    帖子:
    15,739
    赞:
    62
  3. fyfei

    fyfei New Member

    注册:
    2005-10-07
    帖子:
    9,067
    赞:
    46
    不错
     
  4. okby

    okby New Member

    注册:
    2005-12-31
    帖子:
    3
    赞:
    0
    其实100%比例最好。什么分辨率都不存在。
     
  5. Henry

    Henry New Member

    注册:
    2005-09-04
    帖子:
    1,166
    赞:
    4
    div 排版% 是非常痛苦的事情
     
  6. OUYANG

    OUYANG New Member

    注册:
    2005-09-06
    帖子:
    3,025
    赞:
    5
    是呀是呀!
     
  7. mwywfn

    mwywfn New Member

    注册:
    2005-09-26
    帖子:
    18
    赞:
    0
    不错

    不错,再多总结几个给我们学习一下