允许使用-ms-filter和过滤CSS规则的语法

时间:2014-05-13 16:17:39

标签: css css3 internet-explorer syntax sass

我试图让我的CSS通过验证,我有很多样式规则,如下所示:

-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(
    src='../../../public/images/circ_logo_trans_50.png',
    sizingMethod='crop')";
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(
    src='../../../public/images/circ_logo_trans_50.png',
    sizingMethod='crop');

当代码如上所示时,验证器似乎会抛出错误。但是当我删除换行符时,它会通过。

我的理解是-ms-filter后跟一个带引号的字符串,而filter则不应该。

到目前为止,我所说的是正确的吗?这个语法有什么不对的吗?

我在尝试缩小CSS sass in.scss:out.css --style compact时偶然发现了这个问题。当所有代码都在一行上时,最后的样式停止工作,因为前面有一些无效的东西。我很确定它已连接到这些过滤器。

1 个答案:

答案 0 :(得分:3)

您对-ms-filterfilter属性的理解绝对正确。

CSS的重要问题在于字符串的语法。 spec明确声明字符串不能直接包含换行符。为了在源本身的多行中断一个字符串,只需在每行的末尾添加反斜杠(除了最后一行(发生结束报价)):

-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(\
    src='../../../public/images/circ_logo_trans_50.png',\
    sizingMethod='crop')";

这将允许验证器正确解析您的CSS而不会出现阻塞。它不应该为IE造成问题,因为它试图解析字符串供自己使用;不幸的是,我不能肯定地说它不会。如果它确实有问题,那么你可能需要

  • 完全取消换行符,或
  • 删除反斜杠并使这些声明无效。下次验证时,请注释掉这些行以防止验证器解析器阻塞。

请注意,未加前缀的filter属性对于验证仍然存在问题,因为它是一个不带前缀的非标准属性(前缀为the standard way of declaring non-standard properties,可以这么说)。当然,这是您不必担心的事情,因为您知道您正在使用广泛认可的非标准形式的房产。