我刚刚对此进行了更多研究,它看起来更像是一个 Chrome 错误,而不是 IE。
以下是spec 关于transition-property 中无法识别和不可动画的属性的说法:
如果列出的标识符之一不是可识别的属性名称或不是动画属性,则实现仍必须在列表中的动画属性上使用持续时间、延迟和计时函数在它们各自的索引处开始转换“transition-duration”、“transition-delay”和“transition-timing-function”的列表。换句话说,无法识别或不可动画的属性必须保留在列表中以保持索引的匹配。
规范似乎没有考虑到 none 指定的属性受支持或可动画化的情况,甚至在转换 propdefs 之后的部分中也没有考虑。看起来 IE 将声明视为有效,尽管没有要转换的受支持属性,从而覆盖先前的声明,并有效地使声明等同于 transition-property: none(即结果相似,但正如您观察到的值实际上并不计算到none)。
Firefox 的行为方式似乎与 IE 相同,将声明视为等同于 transition-property: none。
此外,如果您将不带前缀和带前缀的 transform 属性名称放在同一个声明中,IE 和 Firefox 会很好地为转换设置动画(顺序无关紧要):
transition: -webkit-transform 1s, transform 1s;
但是,如果您将任何其他您希望与导致 Chrome 丢弃声明的无法识别的属性一起使用的属性放置......它仍然丢弃该声明。是的,如果 IE 和 Firefox 在上述声明中正确应用了转换,Chrome 会完全忽略它。
不过,似乎只有未知属性名称才有这个问题。例如,如果您指定一个受支持但不可动画化的属性,例如background-image:
transition: -webkit-transform 1s, background-image 1s;
Chrome 能够很好地为变换设置动画。
话虽如此,我仍然不能完全确定规范是否模棱两可,或者 IE 和 Firefox 中显示的行为实际上是否正确。听起来它可以使用任何一种方式进行一些澄清,所以我已经继续并emailed CSSWG 关于这个。