5

相信大家都知道,Internet Explorer 可以处理简单的渐变。以下是 Twitter Bootstrap 的一个片段,例如:

filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);

但是,我看到有些人使用两种 CSS 规则(一种用于 IE < 8,另一种用于 IE 8),如下所示:

filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#7fbf4d', endColorstr='#63a62f'); /* For Internet Explorer 5.5 - 7 */
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#7fbf4d', endColorstr='#63a62f')"; /* For Internet Explorer 8 */

我的问题是,第二条规则真的有必要吗?Twitter Bootstrap 非常彻底,但它不使用任何“-ms-filter”规则。根据this page-ms-filter属性是CSS的扩展,可以用作IE8标准模式下过滤器的同义词。

4

3 回答 3

3

我的建议:

使用 CSS3Pie -- http://css3pie.com/

这是一个适用于 IE6、IE7 和 IE8 的 JavaScript 库,它为支持多个 CSS3 特性(包括渐变)提供了补丁。

是的,如果你愿意,你可以使用可怕的 IE 特定filter样式,但是 CSS3Pie 允许你对这些特性使用标准的 CSS 样式。容易得多。

要实际回答您的直接问题:

是的,-ms-filter样式通常是必需的。IE8 将始终使用它而不是filter,它主要用于 IE6 和 IE7。在某些情况下filter会在 IE8 中工作,但不是全部,因此最好使用-ms-filter以确保 IE8 兼容性。

[已编辑] 他们为什么要更改它?因为当他们发布 IE8 时,微软强调要“符合标准”。

为了使浏览器符合标准,它应该为它支持的任何不是最终 W3C 标准的 CSS 属性使用供应商前缀。因此,通过添加-ms-前缀,微软试图(迟来的)消除他们对全局 CSS 命名空间的污染。

另外,加了引号,因为filter不带引号的旧语法是无效的CSS(主要是冒号后面的progid),并导致一些浏览器出现问题。(前段时间,我在 Firefox 3.6 中遇到过一个实例,它会按照filter旋转元素的样式删除所有样式 - 需要很长时间才能弄清楚发生了什么)。

微软保留与原始语法的向后兼容性这一事实filter在很大程度上是一个实用主义问题。MS 无法使用旧语法破坏所有站点。但微软强烈暗示开发人员应该同时使用这两种方式,因为他们会filter在后续版本的 IE 中放弃对旧样式的支持。事实证明,他们一举放弃了对这两种语法的支持,但在 IE8 发布时给出的含义足以使其成为推荐做法,即在样式表中同时提供这两种语法filter-ms-filer

在 IE8 发布时,XHTML 是本月的新风格,编写完美验证的代码是许多开发人员的首选。这可能是更改语法以包含引号的强大驱动力。由于杂散的冒号,不可能编写使用旧filter样式验证的 CSS。相反,使用新-ms-filter样式允许人们编写有效的 CSS。作为好主意,这个并没有真正奏效,因为当然人们无论如何都必须继续使用旧语法,但意图是好的。

值得指出的是,其他专有样式也得到了相同的处理。例如,您可以-ms-behavior在 IE8 中使用而不是旧behavior样式。没有人使用它。为什么?我真的不知道。

另一个值得了解的事实是 W3C 正在标准化一个名为filter. 它将与 Microsoftfilter风格完全不同,工作方式也完全不同。如果/当它被标准化并且浏览器开始支持它时,这两种语法之间将会有明显的冲突。

于 2012-04-03T21:52:27.583 回答
0

好像你回答了你自己的问题。是的,他们是需要的。微软试图更符合标准意味着某些版本的 IE 对过滤器属性有自己的略有不同的语法规则。

在 IE7filter:后面跟着progid:DXIma...etc 就可以了。但是对于 IE8+,它可以在兼容模式下使用 IE7 后备,以及更合适-ms-的过滤器前缀属性,表示供应商特定的 css 属性,以及它在 qoutes 中的值。

于 2012-04-03T21:41:07.283 回答
0

把它留在里面会有什么害处?

如果浏览器不理解 CSS 行,它将忽略它。

这两行 CSS 几乎相同。我会大胆猜测微软决定从 IE8 开始使用其他浏览器一直用于 yonks 的 - (连字符)前缀来更改专有 CSS 的语法。

从技术上讲,无论哪种方式,CSS 都不符合 W3C,因此另一行专有 CSS 不会造成任何伤害。

在最好的时候尝试理解 IE 是不值得的!

于 2012-04-03T21:45:52.160 回答