我正在尝试编译以 WebKit为前缀的属性,以及WebKit 支持/支持的属性,-apple-
以及它们最终被删除或引入的版本。
对他们施加的限制是什么?例如,你能在 中找到它们吗?-khtml-
document.body.style
我想只有像这个 bug的报告者这样的知情人士才能为我们提供准确的列表。但我更喜欢先在这里问,这样每个人都会从中受益……</p>
开始您的调查的一个好地方是这个版本。
问题并不像你想象的那么简单。比较受支持的 CSS 属性的“官方”列表的修订版并确定引入或停用它们的修订版是很容易的;但是,对使用遗留前缀的支持也取决于 CSS 解析器实现的处理方式。因此,您应该参考下面的时间线和遗留前缀属性的完整列表,以确定在给定的 WebKit 修订中如何处理支持。
-apple
并且简短地说-moz
!)将被标准化为-khtml
幕后。-webkit
添加为-khtml
.-webkit
属性都将使用旧前缀(即-apple
并-khtml
标准化为-webkit
)。-webkit
在此版本中,所有剩余的旧前缀都已更新。CSSGrammar.y
.CSSParser.cpp
-apple-dashboard-region
和
-apple-line-clamp
。-webkit
属性再次使用旧前缀。(先前的更改已还原。)下面的列表是从受支持属性列表的提交历史记录中收集的。第一个数字是对该属性的支持添加到列表中的版本;第二个是删除它的修订版。属性被重命名和被彻底删除之间没有区别。
r13874中删除的属性在前缀下存在了一段时间-webkit
,因此遗留前缀可能会继续工作,具体取决于解析器如何处理它们。(有关更多详细信息,请参阅上面的时间线。)
*虽然已被弃用,但-khtml-opacity
- 以及后来-webkit-opacity
- 直到 CSSProperties.in 在 r85212 中引入对别名的支持之前,解析器才接受它-webkit-opacity
,并且在最新版本中仍然可用。
-konq
在很早的版本中支持几个前缀属性:
从 r13874 开始,WebKit CSS 解析器简单地将任何遗留前缀规范化为-webkit
. 本质上,所有-webkit
带前缀的属性都使用-apple
or-khtml
前缀:
// If the prefix is -apple- or -khtml-, change it to -webkit-.
// This makes the string one character longer.
if (hasPrefix(buffer, length, "-apple-") || hasPrefix(buffer, length, "-khtml-")) {
memmove(buffer + 7, buffer + 6, length + 1 - 6);
memcpy(buffer, "-webkit", 7);
++length;
}
(这也解释了为什么你不能遍历这些属性——document.body.style
那些属性已经被解析器替换为相应的-webkit
属性。)
Peter Beverloo 建议应该删除或逐步淘汰对这些属性的支持在短时间内,所有遗留属性都被禁用,除了-apple-dashboard-region
and -apple-line-clamp
,但由于无数的兼容性问题,这在几天后被恢复了。在较新的版本中,除非使用. 启用此功能标志后,解析器将允许上述旧行为。-apple
-khtml
ENABLE(LEGACY_CSS_VENDOR_PREFIXES)
if("WebkitAppearance" in document.body.style) {}
if("KhtmlAppearance" in document.body.style) {}
if("MozAppearance" in document.body.style) {}