让max-*, min-*在IE6中有效的解决方案
max-width、max-height、min-width和min-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中有用了。还有什么更好的办法,请留言,谢谢。
March 28th, 2005 at 16:44
阿…正在找这个,居然忘记了自己google一把,真是郁闷阿;
March 28th, 2005 at 16:52
NEO你好,能否做个友情链接?
March 28th, 2005 at 17:17
expression并不“极为罕用”,相反非常常用,只是当“重构潮”来临之后,兼容性被重新摆到桌面上来,于是expression用得越来越少,其实expression有很多应用的领域,特别是在hta上仍然可以大展身手,关于expression,早年在经典论坛上有过一段时间非常流行对其深入的研究及讨论,有兴趣可以去翻翻
March 28th, 2005 at 17:17
to wx2,连接已经做好。 多谢你也连接了我的网页。
March 28th, 2005 at 20:11
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:)
March 28th, 2005 at 20:42
http://msdn.microsoft.com/workshop/author/dhtml/reference/properties/minheight.asp?frame=true
March 29th, 2005 at 14:27
to lexrus,我没有修改过RSS文件,我也不知道怎么回事……
March 30th, 2005 at 13:45
一, 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″~
March 30th, 2005 at 18:11
>>lexrus,
我已经把LANG改为默认的了……服务器时区问题我也无能为力了……不过RSS的时间是正确的……
April 28th, 2005 at 12:25
不知道我这个算不算个办法(小弟接触Web Standard没多久:))。
在一个100%的div里,对其中某个元素指定左右margin和宽度。左右margin和宽度值的和是想要的min-width。这样当窗口缩到这个值时自动出现横向滚动条,其它的元素最好是float或absolute的。此法有一些局限性,要根据页面的布局情况而决定,并不适用于所有情况,但在某些情况下还是比较好用的。而且IE5、IE6都支持。
这个是我前些日子在为学校设计新首页时研究出来的。叶子暂时放在这里http://www.bjut.edu.cn/bjut_new/,感兴趣的话可以用IE5/6打开试试。
March 9th, 2007 at 16:19
[...] 推荐阅读:让max-*, min-*在IE6中有效的解决方案 [...]
March 28th, 2007 at 20:25
[...] (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> [...]