IE历来被web标准的拥护者所诟病,而当FireFox横空出世以后,更多的网页制作者开始关注web标准设计。看着FireFox的市场占有率不停的上升,微软终于推出了IE7。但IE7是否真的能够力挽狂澜,是否真的能够得到用户的信任,是否真的能够得到网页设计者的认可呢?
且看《IE7的web标准之道》系列文章,和你一起见证IE7的改变!
看看下面这幅图,感觉是不是很亲切呢?有种“信纸”的感觉吧。其实这种感觉真的很不错哦,很怀旧、很小资的味道(突然想起以前我写的那些情书了^_^)。但是,你游遍互联网,便会发现,很少有模拟信纸布局的网页。这到底是为什么呢?难道是大家都没有想到吗?难道是大家真的已经把“信”这种东西忘记了?还是因为互联网上没有邮局来寄出这些信件呢?
其实都不是,不是没有人想到,也不是没有人愿意用,而是被一种“虫”咬怕了。而这只“虫”就是我们今天要讲的——“置换元素与行距bug”。
这里有两个测试用的示例页面。第一个是文章主体没有包含置换元素(replaced element), bug不会作怪的例子。而第二个是文章主体中包含了置换元素(示例中为<img>)时,bug在IE6浏览器下会作怪的例子。
在举例之前,先让我们了解一下,什么是置换元素(replaced element)——
“An element for which the CSS formatter knows only the intrinsic dimensions. In HTML, IMG, INPUT, TEXTAREA, SELECT, and OBJECT elements can be examples of replaced elements. For example, the content of the IMG element is often replaced by the image that the "src" attribute designates. CSS does not define how the intrinsic dimensions are found.” 资料来源于W3C网站对replaced element的定义
一来自己的英语水平太烂,二来这段英语比较简单,所以俺这里就不翻译了,大致意思大家应该都看得懂。
让我们来看看示例页面1在IE6和IE7下的显示结果,可以看出其实没有什么区别的。(IE6和IE7的共存方法可以参看《IE6、IE7、IE8共存方法 》一文)——
在这个测试页面中,我们在文章主体部分放入了一个小的图片(一个红色的方形,在第四行文字中间)。而通过上面对置换元素(replaced element)的定义,我们知道<img>是一种置换元素。这样,就满足了bug出现的条件。于是,在IE6中,我们便能够看到这个bug了(第四行文字的上下文间距出现了问题,从而导致整个布局发生混乱)。截图如下——
首先让我们提两个概念:line-height和font-size,行高和字体大小。line-height减去font-size称之为“间距(leading)”。间距的一半,称之为“半间距”。而这个“半间距”会被加在每行文字的上面和下面,于是行与行之间的空隙(有上一段下面的半间距 和 下一段上面的半间距相加而成)就出来了。下面的这幅图片可能对你理解有所帮助。
之所以出现了这种bug,是因为IE6错误的将带有置换元素的那行文字的上下半间距,和相邻的上下两行的下上半间距合并到了一起。于是,带有置换元素的那行文字的上下行距就被减少了一半,所以页面出现了混乱。
注:虽然上面的文字很好的解释了bug产生的原因,但是,仅仅是一种参考,并非官方解释。
也许产生的原因并不重要,但是如何修复却是一定是重要的。毕竟现在IE6的市场份额还是不能忽视的。
非常遗憾,虽然有解决方案,但是并非完美。方法就是对那些置换元素设置margin-top和margin-bottom。以便把被“压缩”的行间距“撑开”。下面这个示例代码,供你参考。如果,你有更好的解决方案,请赐教,谢谢。(可以通过【博客园web标准设计小组】提交解决方案)
下面是修复后的效果截图——
修复中用到了针对IE6的css hack。关于css hack的知识,你可以阅读《实例讲解符合中国特色的和网络现状的实用CSS Hack(附源码) 》一文。
姓名:杨正祎(阿一)互联网工作者,专注于互联网项目开发与开发,擅长于符合Web标准的页面设计制作,互联网项目管理。现就职于上海沪江网
2011年6月
2010年10月
2009年8月
2008年3月
2007年6月
2006年2月
2005年4月
2004年11月
开心、困恼、畅快、郁闷,灵感、发现、思考,回忆、展望、幻想。想法与思维的轨迹,展现自己的人生经历。生活上,工作上,所有的,都想与他人分享。RSS订阅我的随笔,展现一个真实的自我。
JavaScript是B/S开发中必不可少的技能,利用JavaScript能够实现很多事情,现在Ajax的火热更是体现了JavaScript的无限可能性……RSS订阅此栏目,和我一起在此领域一起进步。
由于浏览器标准的不统一,非Web标准网站所展现出来的问题已经越来越严重,如何让尽可能多的浏览器能够正常浏览我们网站?RSS订阅此栏目,让我们一起在Web标准的道路上前进。
在B/S开发模式的舞台上,微软公司的MircoSoft Visual Studio 200X无疑是把最耀眼的利器,如何把这把斧头打磨锋利,达到事半功倍?RSS订阅此栏目,让我们一起打造最尖锐的工作利器。
Select …… Case …… Default ……。这里便是Default里面的东西啦。杂7杂8的东西,就像跳蚤市场一样。说不定就能淘到自己的所需。RSS订阅此栏目,一起在跳蚤市场中寻找宝贝。