WebKit 及其遗留前缀
-
13-12-2019 - |
解决方案
介绍
问题并不像你想象的那么简单。比较受支持的 CSS 属性的“官方”列表的修订并确定它们被引入或停用的修订是很容易的;然而,支持 使用 遗留前缀的数量还取决于 CSS 解析器实现处理它们的方式。因此,您应该查阅时间线和下面的旧版前缀属性的完整列表,以确定如何在给定的 WebKit 修订版中处理支持。
与遗留属性支持相关的解析器更改的时间表
- 2003 年 5 月 5 日 (r9101):
-apple
(并简要地-moz
!) 将被标准化为-khtml
在幕后。 - 2005 年 8 月 30 日 (r10397):
-webkit
添加作为替代-khtml
. - 2006 年 6 月 14 日 (r13874): 全部
-webkit
特性 将使用旧前缀(即-apple
和-khtml
被标准化为-webkit
)。所有剩余的旧前缀均已更新为-webkit
在本次修订中。 - 2008 年 2 月 19 日 (r30393):旧版前缀处理移自
CSSGrammar.y
到CSSParser.cpp
. - 2010 年 7 月 21 日 (r63854): 不 除非
-apple-dashboard-region
和-apple-line-clamp
. - 2010 年 7 月 26 日 (r64071): 全部
-webkit
特性 再次使用旧前缀。(以前的变化恢复了。) - 2012 年 4 月 10 日 (r113795): 不 除非明确启用,否则支持旧式前缀。
遗留属性和引入/淘汰的修订列表
下面的列表是从 支持的属性列表的提交历史记录. 。第一个数字是修订版,其中对此属性的支持已添加到列表中;第二个是删除它的修订版。重命名属性与彻底删除属性之间没有区别。
删除的属性 r13874 在以下情况下生活了一段时间 -webkit
前缀,因此旧前缀可能会继续工作,具体取决于解析器如何处理它们。(有关更多详细信息,请参阅上面的时间表。)
- -苹果仪表板区域: r7588 至 r9101
- -苹果线夹: r6391 至 r9101
- -苹果文本大小调整: r6805 至 r9101
- -khtml-外观: r9828 至 r13874
- -khtml-绑定: r5967 至 r13874
- -khtml-边框-水平间距: r5212 至 r13874
- -khtml-边框-垂直间距: r5212 至 r13874
- -khtml-box-align: r4704 至 r13874
- -khtml-box-方向: r4704 至 r13874
- -khtml-box-flex: r4704 至 r13874
- -khtml-box-flex-group: r4704 至 r13874
- -khtml-box-flex-group-transition: r6758 至 r6802
- -khtml-box-lines: r4704 至 r13874
- -khtml-box-ordinal-group: r4704 至 r13874
- -khtml-box-orient: r4704 至 r13874
- -khtml-box-pack: r4704 至 r13874
- -khtml-仪表板区域: r9101 至 r13874
- -khtml-流模式: r4704 至 r8041
- -khtml-字体大小-增量: r8382 至 r13874
- -khtml-水平边框间距: r5200 至 r5212
- -khtml换行符: r7763 至 r13874
- -khtml-线夹: r9101 至 r13874
- -khtml-margin-bottom-collapse: r7362 至 r13874
- -khtml-边距-折叠: r7362 至 r13874
- -khtml-边距-开始: r7708 至 r13874
- -khtml-margin-top-collapse: r7362 至 r13874
- -khtml 选取框: r5301 至 r13874
- -khtml-选取框方向: r5301 至 r13874
- -khtml 选取框增量: r5301 至 r13874
- -khtml-选取框-重复: r5301 至 r13874
- -khtml-选取框速度: r5301 至 r13874
- -khtml 选取框样式: r5301 至 r13874
- -khtml-match-nearest-mail-blockquote-color: r8642 至 r13874
- -khtml-nbsp-模式: r7763 至 r13874
- -khtml-不透明度: r4704 至 r5340 *
- -khtml-填充-开始: r7708 至 r13874
- -khtml-rtl-排序: r12027 至 r13874
- -khtml-text-decorations-in-effect: r8466 至 r13874
- -khtml-文本大小调整: r9101 至 r13874
- -khtml-用户拖动: r6728 至 r13874
- -khtml-用户修改: r5970 至 r13874
- -khtml-用户选择: r6728 至 r13874
- -khtml-垂直边框间距: r5200 至 r5212
* 虽然已被弃用, -khtml-opacity
-然后 -webkit-opacity
—直到 CSSProperties.in 引入对别名的支持之前,解析器一直很荣幸 r85212, ,并且仍然可用 -webkit-opacity
到最新版本。
几个 -konq
很早的版本就支持前缀属性:
- -konq-流模式: r4 至 r4704
- -konq-js-clip: r798 至 r3695
今天的故事
自 r13874 起,WebKit CSS 解析器只是将任何旧版前缀标准化为 -webkit
. 。本质上,所有 -webkit
前缀属性与 -apple
或者 -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
和 -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) {}