IE与:active的小故事

IE4发明了a元素(链接)上的:hover与:active(pseudo-class,伪类),它成为了CSS1的标准。

CSS2把这个标准扩展至所有元素,IE是最晚支持它的浏览器,直到IE8才加入。

本来这个故事已经完结,然而IE却不想让故事画上句号——

今天在开发时遇到一个奇怪的问题:CSS按钮,在鼠标按下时本该有“:active”的属性,然而IE9却不卖帐,按中间总是没反应(:active属性不触发),按边缘却可以。

同样的问题,我尝试在Twitter Bootstrap等网站重现,却怎么都不成功。

研究了半天CSS和Javascript源码,依旧毫无进展。

直到我对比自己的HTML和Bootstrap演示的HTML,才明白过来——

我的设计比Bootstrap多一个span元素在链接里。

这时再查对应测试,果然IE8,IE9以及IE10,都是不支持从子元素触发:active的(不向上传播)这个问题亦存在于Opera,但只有在子元素为display:block时才触发

解决办法?

  • 避免在CSS按钮下增加占用大面积的元素(Twitter Bootstrap的icon很小,所以问题不明显);
  • 用“类”代替“伪类”,再用Javascript补救缺失的事件。

参考:

本日金句

For example, building a new browser for the ten-year old version of Windows that came with IE6 didn’t make sense to us because of the limitations of its graphics and security architectures.

举个例子吧,我们没有理由为一个存在了十年的内置IE6的古老Windows版本开发浏览器,有鉴于它图像处理的局限性与系统构架的安全性。

– Dean Hachamovitch, Corporate Vice President, Internet Explorer

……No comment.

via IEBlog

IE6必须死(官方版)

对IE6的意见,在微软内部,3-5年前可能还有分歧——分成希望“平稳过渡用户群”与“迅速分发新版本”的两派。但在管理层的努力下,这个意见基本统一了——IE6曾经是微软的英雄,但它现在是前进的负担,影响微软公众形象的存在。期待毒瘤自己消散是不可能的,微软的商业应用在2007系列后抛弃了对IE6的完全兼容,开始在企业中推广IE8。现在趁着Windows 7和IE9的势头,官方主动煽动普通消费者停用IE6,这也算是微软向前迈出的一步吧。

最大的阻碍,自然是XP横行天下的中国,网页标准地狱的日本,以及同样“热爱老传统”的亚洲各国。若能成功把亚洲的IE6使用量下降至1%,那XP世代就真正宣告结束了。这对于微软来说,其实是一种解放与机遇。对中国来说,这更是对新科技的必要接纳。

PS:在我看来,这就是主攻商业应用与主攻消费者应用之间的重要区别。后者不会有这种负担,因为消费者总想着最新最热门的产品;而商业应用,需要的却是无缝的功能与效能升级。两种需求,造就了两种不同的运营心态;它们对公司商业决策的影响,直接反应在市场占有率上。

(免责声明: 本人系微软雇员,本文言论不代表官方意见. 哎?到底是不是官方意见啦!)

为什么IE的盒子模型是错的

ppk曾经说IE的传统盒子模型比W3C的定义好理解,但为什么IE的盒子还是比W3C的糟糕呢?因为IE盒子的定义连IE盒子的支持者自己都搞不清楚。与文中所述相反,IE盒子并不包括margin,而只是纯粹的计算padding与border的占位。为什么IE传统盒子这么烦?因为需要反向推导一个盒子的内容宽度,而浏览器渲染时期望尽快知道内容的宽度。再有,IE传统盒子硬是把微软自己的开发团队都搞晕了,有些bug还穿越出现在标准模式下,哦,你不知道IE6的标准模式使用W3C的盒子定义

支持IE传统盒子的同学,没有为IE5.x开发过的同学,请你考虑这个问题:如今CSS3支持图片border了,使用IE盒子模式,浏览器应该怎么计算内容宽度?CSS3是为设计者方便提供帮助,请不要以box-sizing为借口,为IE5.x的顽固不化辩护。

延伸阅读:

IEBlog的作者Herman Ng

ie8withsomebars

我祝你永远别被我的统计学导师遇上,否则你一定会被他往死里批斗。你连续两次发布所谓的Failure Curve图表,不仅缺乏实质统计意义(”The data is based on snapshots taken 50 days after each IE8 pre-release”,你们把每个发布版本的错误报告重叠起来干什么),更是利用条状图迷惑读者(事实上,”To date, we have fixed 80% of all the reported crashes and hangs in IE8″,还有20%的错误报告没能解决),让笔者怀疑你是怎么当上微软产品经理的。没有价值的文章请你找PR的人去写,读起来至少动听些。

IEBlog的作者们,请不要再写这种伪技术文了