realazy


让max-*, min-*在IE6中有效的解决方案

max-widthmax-heightmin-widthmin-height这四个性质(property)分别表示最大宽度、最大高度、最小宽度和最小高度。它们在CSS中有着很重要的作用,比如,它们可以用来很好地协调各种不同分辨率下用户端(client)的显示效果,举个例子,你设计的网页由于侧栏(sidebar)过宽,当用户使用640*480或者更小的分辨率浏览网页的话,就会导致内容(content)栏过窄,影响用户的阅读,一个办法是,把内容或者包含内容的div的宽度固定一个最小值,姑且是780px吧,那么我们可以这样写:min-width: 780px;,这样,当用户端分辨率的宽度在小于780px时,会在水平位置上出现滚动条,不至于影响布局,用户稍微移动一下滚动条就可以方便阅读主要内容。

然后,十分不幸的是,你知道我要说什么,就是IE,这个世界上使用者最多的浏览器,到目前的版本为止,对这四个性质没有一个能够,哪怕一点点的支持。这可让设计者吃尽了苦头,最明显的就是,当你使用float布局时,在IE中的一个臭毛病是,顶层div的宽度变小的时候(缩小窗口,分辨率低等),浮动的布局(一般是右边那一块跑到了下方)就会被破坏,变得一塌糊涂。这样即使是最开明的主管,也不能容忍你这样的设计……

天生不足,后天补上。web设计世界的天才多如牛毛,我们随便Google就能找到不少解决方案(solution),在抱怨IE的同时请向西半球鞠躬。当我写到这里时,我才开始一一验证我所找到的方案,结果让我大失所望,令另我把标题从“让max-*, min-*在IE中有效的解决方案”改成了“让max-*, min-*在IE6中有效的解决方案”。真如Dave所说:别指望 min-width 在IE中有用

我找到的第一种方案,在http://www.issociate.de/board/post/154073/min-width.html中说,可以在同层的div中加入例如 <div style="width: 300px; height: 0; line-height:0;></div>。可惜,这种无异于插入空白占位透明的GIF图片(spacer GIF)无异,没有实际的效果和意义。诸君可以亲自一试……

第二种,请访问http://www.svendtofte.com/code/max_width_in_ie/,此人研究JavaScript极为深入,在CSS中使用了极为罕用的expression,虽然这会让CSS文件通不过校验(validation),但是我觉得,标准的意义在于分离结构和表现,而且未影响到XHTML/HTML的代码合法性,可以接受。我曾欢天喜地啊,因为我用IE各种版本测试了他的演示版(demo)均正常无比……我自己写的在IE 5.x中也测试通过,最后,在IE6中测试的时候,IE6竟然当掉(crash)了。不解,极为痛苦……仔细检查代码,原来他的demo没有任何DTD声明(即<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">这样的声明),莫非此方法只可以在怪癖模式(quirks mode)下起作用?我把我的HTML文件中的DTD去掉,果如其然。真是一个极大讽刺,想在标准下使用CSS却不能在标准下使用XHTML/HTML……这个方法,嗯,假如你的网页在quirks mode下使用,可以使用这个方法……但是,在IE 5.x下可以使用,无论是标准模式(standard mode)还是怪癖模式下。具体方法在其网页上,在此不列出。

第三种方案,恰恰相反,在IE6中十分完美,而且也不用担心CSS代码的合法性。请访问http://www.doxdesk.com/software/js/minmax.html。不像作者所说,可以支持非mac版的IE 5以上版本(make IE5+/Win support CSS min/max-width/height),我的测试结果,只有IE6起作用,而且十分完美。如果你的网页已经不再面向IE5.x,这个方法就是拯救你的灵丹妙药。方法十分简单,请下载http://www.doxdesk.com/file/software/js/minmax.js,在head区域添加 <script type="text/javascript" src="minmax.js"></script>就可以了。

从此,在IE7出来之前,你可以部分指望 min-width在IE中有用了。还有什么更好的办法,请留言,谢谢。

12 Responses to “让max-*, min-*在IE6中有效的解决方案”

  1. Aether Says:

    阿…正在找这个,居然忘记了自己google一把,真是郁闷阿;

  2. wx2 Says:

    NEO你好,能否做个友情链接? :)

  3. POPOEVER Says:

    expression并不“极为罕用”,相反非常常用,只是当“重构潮”来临之后,兼容性被重新摆到桌面上来,于是expression用得越来越少,其实expression有很多应用的领域,特别是在hta上仍然可以大展身手,关于expression,早年在经典论坛上有过一段时间非常流行对其深入的研究及讨论,有兴趣可以去翻翻

  4. Neo Says:

    to wx2,连接已经做好。 多谢你也连接了我的网页。

  5. lexrus Says:

    try to search “expression” in blueidea with teeni, some ideas are really interesting. but it’s now useless when we are spreading webstandards, right?

    btw: the rss feed you generated which includes invalid date format has not be supported by bxna. so i just removed your feed recently. hope you make some fix soon:)

  6. guoshuang Says:
  7. Neo Says:

    to lexrus,我没有修改过RSS文件,我也不知道怎么回事……

  8. lexrus Says:

    一, 28 Mar 2005 16:10:33 +0000
    it looks like that your host server is running in GMT. but the time it generated is be of chinese GMT+8. so your time always faster then the real time. i mentioned this popular problem in bxna faq:
    http://blog.blueidea.com/faq/#faq4

    and it seams that the system $lang or the locale of your blog is set to zh_CN.
    but we have no Chinglish supported to resolve “一, 28 Mar 2005″~

  9. Neo Says:

    >>lexrus,
    我已经把LANG改为默认的了……服务器时区问题我也无能为力了……不过RSS的时间是正确的……

  10. dNgpNg Says:

    不知道我这个算不算个办法(小弟接触Web Standard没多久:))。

    在一个100%的div里,对其中某个元素指定左右margin和宽度。左右margin和宽度值的和是想要的min-width。这样当窗口缩到这个值时自动出现横向滚动条,其它的元素最好是float或absolute的。此法有一些局限性,要根据页面的布局情况而决定,并不适用于所有情况,但在某些情况下还是比较好用的。而且IE5、IE6都支持。

    这个是我前些日子在为学校设计新首页时研究出来的。叶子暂时放在这里http://www.bjut.edu.cn/bjut_new/,感兴趣的话可以用IE5/6打开试试。

  11. wkz0712 » Blog Archive » 全窗口2栏布局 Says:

    [...] 推荐阅读:让max-*, min-*在IE6中有效的解决方案 [...]

  12. Anonymous Says:

    [...] (tags: css) No Comments so far Leave a comment RSS feed for comments on this post. TrackBack URI Leave a comment Line and paragraph breaks automatic, e-mail address never displayed, HTMLallowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> [...]

Leave a Reply


realazy (懒到死) is proudly powered by WordPress | Entries (RSS) and Comments (RSS)