您可以把本篇当做是《与臭虫为友——浏览器补救办法,臭虫以及解决方案 》三 系 列的第四系列。
其实,对于专职于web标准的人来说,我们在IE7 Beta1的时候就准备好了,XD。不信可以看看针对IE7的CSS Hack,如果你是沉迷于各种hacks的人,务必务必要看!各位知道我从不转载的作风,所以,给old9一个机会,狠狠地点击吧
IE7这个版本极度提升了对CSS的支持,外加一个长久以来备受抱怨的透明PNG支持。除了没有CSS generate content以外,其实没有什么好抱怨的,抛弃hacks的时代真的来临了,条件注释的方式将是您最好的伙伴。实际上,一直以来,在我的项目中,我只有一个ie6patch.css(我一直对这个命名引以为豪),是不是需要引入一个ie7patch.css?在大部分情况下,已经没有必要的了,我前面说过,IE7对CSS的改进是有目共睹的,但不可避免,作为MS的产品,没有缺陷是卖不出去的 XD。
自动清除浮动问题
一个自动清除浮动最安全的做法是使用 :after,而这正是IE7缺少的支持。在IE6中,们使用 height: 1% 来达到相同目的。解释一下这条hack的原理吧,height的值可以是任意的,它只是用来触发IE特有的hasLayout(没错,还是old9的),而在IE6中,height实际上等同于min-height。遗憾的是,IE7已经修正了height这个bug。幸运的是,IE的hasLayout还存在,我们也可以给高度通过指定一个数值来触发它。IE7新支持的min-height可以帮忙。所以,在IE7中,这句可以帮您搞定自动清除浮动的问题:min-height: 1px;。(在我看来1px要比1%安全,您随自己的喜好吧)。
如何做?
* html .wantoclear { height: 1%; } /*ie6*/
*+html .wantoclear { min-height: 1px; }/*ie7*/
这对于小型项目来说可以quick and dirty,但是大型项目中,我个人的建议是,还是使用条件注释的方式吧,在ie7patch.css的中只需写 .wantoclear { min-height: 1px; },更方便于维护。
另外,清除浮动的方式有多种,比如使用overflow,但实践证明,只有上述方式是最安全的。其他方式可以酌情使用。参看:闭合浮动元素(还是old9!)。总之,您现在看到您的项目页面不能正常显示,十有八九是它导致的,按照我的方法,Get ready for IE7吧
百分比宽度问题
这个问题让头痛,从IE5起,到IE7,遗憾的是并没有修正。当您使用百分比作为宽度单位时,IE的计算总是差那么几个像素。在一般应用中,这倒不会导致什么问题。但依靠浮动来布局的话,这确实致命的,因为稍微有1像素的差异,IE不像Firefox, Opera还能让布局保持,它会将另外超出父元素的元素狠狠地甩到下一行中,导致布局的错落。举个简单的例子,假设我们有一堆的li元素,我们需要每行放置4个。用百分比的方式来做,则可以一句很简单的li { float: left; width: 25%; }搞定,且具有巨大的灵活性。但是IE……wtf…有时候确实正常给你每行排列4个,有时候却只有3个。你看到比你预期的少一个,那就是它计算宽度的误差导致的。
解决方法其实很简单,把宽度减少 0.1% – 0.5%就可以了。就是说,你可以在ie7patch.css写上li { float: left; width: 24.9%; }。
IE7还存在这么多问题,而且不知道到IE8会不会修正,这就是为什么还需要使用条件注释的原因。
IE7即将通过“高优先级更新”来入侵用户电脑,我们还是提前做好准备吧。
另外,目前的实践经验还不是很多,很多问题尚在发现中,这是一篇不断更新的blog,欢迎大家补充,谢谢。
2006-11-16更新:
根据Three reasons sites break in Internet Explorer 7, 导致IE7出问题的三个可能理由是:
- 在Doctype之前使用了导致IE6使用Quirks mode的XML声明,IE7已经修复这个问题,相同的CSS而不同的渲染模式,因此IE7可能会出问题。
- 网站构建基于大量的hacks,而这些hacks在IE7中已经修复。
- 使用没有判断浏览器版本的条件注释来引入CSS,导致IE7也引入了那些本不该是修复IE7的CSS。
另外,推荐阅读Internet Explorer 7: Were you ready?。
2006-11-23更新:
November 7th, 2006
by sike
那些花时间翻译的人都是要感谢的,:p
November 7th, 2006
by sike
我这里收集有一些:http://del.icio.us/sike/ie7
November 8th, 2006
by 小甲
又来这里偷师……今天开始正式脱离组织对么……
你这段时间导航换得很频繁啊……
看错了……那个目录若隐若现的……不好意思啊……灌了三潭水……
November 8th, 2006
by xw
呵呵 终于写了 ~~~ ~~ ie还是不错 蛮爽~~~
~~~~~~~~~~~~~~~~~ 应该是ie7蛮爽的 ~~~补充 上面~~
November 9th, 2006
by 笑笑生
非常好,收录到20ju.com
November 9th, 2006
by DF
如果本身就在为兼容多浏览器做设计,那IE7的出现应该不会产生太大问题。
我觉得IE7带来的最大问题已不是Web Layout而是Object。Flash之类必须用javascript嵌入网页,否则必须点击才能激活,这对于用户来说才是最大的问题。
另外有两个问题想请教realazy:
1. W3C推荐CSS定义font的时候尽量不要使用px等与浏览者显示器标准有关的值,但是当今显示器远比浏览器“标准”(除了分辨率),反之使用浏览器类的normal, x-small; 或是em + %等方式在ie/ff/opera下看着都不一样,实在很难统一,中英文混杂时也有显示问题。如果不想大量用hack或conditional comments,应该如何选择?
2. CSS opacity, CSS3的草案出来好一阵子了,opacity依旧没加入到css validator里,估计支持opacity的浏览器更是寥寥可数。现在除了同时使用filter + -moz-opacity + opacity外别无办法吗?(我自己还没有测试过,IE7支持opacity么,FF2呢,Opera9支持html元素的opacity吗?)
November 9th, 2006
by realazy
The Author
回复DF:
-moz-opacity是不需要使用了。遗憾的是IE7不支持,还是老老实实使用IE5.5+的相关滤镜吧。有一个统一的办法,那就是使用半透明的png,这个IE7也支持了。November 9th, 2006
by awflasher
inserting Flash is not the problem now, using SWFObject it is so eazy to do such things.
November 9th, 2006
by DF
感谢帮助。只可惜png办法不适用啊,我需要改变元素本身的不透明度,要用js渐变opacity才行。
to awflasher: yeah it’s one nifty tool, yet again it’s written in javascript, so that doesn’t make me statement untrue. XD
November 12th, 2006
by Aether
貌似我上次正好在群里问到height:1px这个问题…
排队 XD
November 21st, 2006
by Rlog
IE7出来有一阵子了,看看它诱人的光亮的图标,想想它对标准更好的支持。真是很诱人呀,还是忍不住装了,由于操作系统不是正版还特意向Makle索要了破解版的真是历尽千辛万苦把它装上了。
IE7用了有一阵子了,再仔细想想,真的有必要装它吗?我只是从一个Web标准的爱好者角度来稍加分析:
或许你会说ie7对标准能够更好的支持当然用喽,可是我感觉他并没ff对标准支持的更好。曾经在Rralazye看到一篇文章《谁在意什么标准》真的感触颇深。标准是给谁用的呢?当然很大程度上是为了浏览者更舒适的用户体验而产生的。但是往往我在ie7里面测试正常的页面拿到ie6里根本无法浏览,页面乱七八糟。难道这就是标准的好处吗?更何况80%以上的Windows用户目前,甚至更长远一段时间仍然使用的是IE6.0. 想想IE7带来的是什么?
或许有人会说,那么我用IE7来测试我的页面是否符合标准。但是往往有很多页面在IE7显示正常但是在FF里显示混乱。业界普遍认为FF是对标准支持最好的浏览器,所以用IE7来测试我的页面是否符合标准这种做法我认为是不明智的。
所以我毅然将IE7于2006年11月21日从我的电脑里赶了出去。并且至少是一年内不会再去安装IE7了。只用IE6和FF。
November 23rd, 2006
by 破日志
微软IE7.0中文版放出…
IE7全面支持中文域名,就是”中文.com”这种形势。很不错的说嘿嘿~~ Internet Explorer 7 功能 查看以下功能,以了解在 Internet Explorer 7 中对易用性、安全性和开发平台所做的改进。 使日常工作更容…
December 7th, 2006
by 周健
大侠们你们好,我是一个普通用户,尝鲜安了一个IE7,现在看新浪宽频之类的在网页上的那类视频都看不了。怎么样可以解决啊?
还有在看yahoo中文网页的时候图片全部不能显示,而且很像上面所说的宽度问题。
哪位大大知道能发电邮告诉我怎么解决吗?damofeihu@yahoo.com.cn
December 7th, 2006
by realazy
The Author
周健,如果网站还没有为ie7准备好,你还是用回ie6或者换用Firefox吧,呵呵。网站的我们无法从自身解决。
December 26th, 2006
by awflasher
可以用standalone的ie6。realazy介绍过。
January 16th, 2007
by 什么是基金
正在头痛这个问题,网站用了CSS+DIV(初学),在IE6里正常,在FW里面就乱了!
January 18th, 2007
by dxy
谢谢,改版正好用啊,谢谢
April 3rd, 2007
by Nicole
realazy一点也不懒!
May 25th, 2007
by 火狐浏览器
我用火狐浏览器,会不会落后哦