在IE中,-ms-filter和filter都用于渐变效果吗?

3

我正在使用以下代码,但现在我不知道是否需要同时使用这两个:

filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#46494F', endColorstr='#141A1E',GradientType=0);

-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#46494F', endColorstr='#141A1E',GradientType=0)";} 

让我更加困惑的是,VS2010报告了以下信息:“Validation CSS 2.1 - filter is not a known property name。”

有人使用过这些遇到类似问题吗?IE9及以上版本呢?这些属性还在使用中还是浏览器使用新的CSS标准?

2个回答

2

filter-ms-filter是由微软发明的专有CSS属性,仅用于IE浏览器,因此验证信息不会受到影响。

filter用于IE8以下版本,而IE8+采用前缀版本-ms-filter


我不知道整个故事,但我知道filter在IE8中也可以工作。有什么想法吗?http://jsfiddle.net/UPuPR/ - thirtydot
@thirtydot:这也是我发现的,但我不知道它是否与 OP 报告的 Visual Studio 警告有关。也许 Visual Studio 忽略了供应商前缀(它们本来就不标准),所以微软决定采用这种方式。 - BoltClock
谢谢。那么像IE9这样的新浏览器呢?该浏览器是否仍在使用-ms-filter,还是已更改为与CSS3相一致的内容? - Hiroki
@Hiroki:它使用“-ms-filter”(“filter”也可以,但如你所说,VS会抱怨)。 - BoltClock
@Hiroki - IE9不再支持filter-ms-filter,您必须使用CSS3样式。 - Spudley
有一条关键信息缺失:存在一个标准的filter属性 - Knu

1
微软在IE8中用-ms-filter 取代了filter,原因是他们需要对其进行不兼容的语法更改。 -ms-filter 允许您将整个滤镜字符串用引号括起来,而旧的 filter风格则不行。
这很重要,因为许多过滤器包含例如 progid:(由于冒号无效CSS)等字符串。在filter样式中包含这些过滤器,没有引号可能会导致其他浏览器窒息整个样式表。
IE9已完全放弃对filter-ms-filter的支持。如果要在IE9中使用这些效果,必须使用标准CSS3。

部分正确;它确实是无效的CSS。更正:他们将filter替换为-ms-filter的原因是为了符合CSS 2.1标准——所有专有扩展都变成了供应商前缀,如-ms-behavior-ms-scrollbar等。在CSS中,无效的规则应该被忽略,没有浏览器应该因为一个属性值包含额外的:而“窒息于整个样式表”。 - Andy E
@Ande E -- 我曾经在使用旋转元素时看到Firefox 3.6在处理带有progid:的滤镜时出现问题。FF忽略了滤镜后面的所有样式。唯一可行的解决方案是将滤镜样式放在CSS文件的最后一个样式中,或将其移动到专门针对IE的CSS文件中。-ms-filter没有问题,因为它可以用引号括起来,但是filter无法修复。 - Spudley
我并不怀疑一两个解析器可能会在IE滤镜上出现问题,但这真的是解析器的问题,因为它存在漏洞并且在错误的位置有冒号而崩溃。这就是为什么我使用了“应该”这个词 :-) 我也不会争辩说切换到供应商前缀提供了修复语法的机会,但真正的原因是CSS 2.1兼容的吹嘘权利(需要正确的语法和供应商前缀)。你可以在博客上自己看到。 - Andy E
1
+1,但是在IE9中filter似乎仍然无法工作。http://ipinfo.info/netrenderer/ + http://fiddle.jshell.net/UPuPR/show/light/(http://jsfiddle.net/UPuPR/) - thirtydot

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接