WebKit及其遗留前缀

Knu*_*Knu 4 javascript css webkit vendor-prefix

我试图编译性质由前缀-apple--khtml-是/是由WebKit的支持,其哪个版本,他们最终放弃或引入.
对他们施加的限制是什么?例如,你能找到它们document.body.style吗?

我想只有像这个臭虫的记者知道的人可以为我们提供准确的清单.但我更喜欢先问这里每个人都会从中受益......

这个版本是开始调查的好地方.

Jor*_*ray 6

介绍

问题并不像你想象的那么简单.很容易比较受支持的CSS属性的"官方"列表的修订版,并确定它们被引入或退出的修订版; 但是,对遗留前缀的使用的支持也取决于CSS解析器实现如何处理它们.因此,您应该查阅下面的时间轴和旧的前缀属性的完整列表,以确定在给定的WebKit修订版中如何处理支持.

解析器的时间线与遗留属性支持相关的更改

引入/停用的旧版属性和修订列表

以下列表是从支持的属性列表提交历史记录中收集的.第一个数字是修订,其中对此属性的支持已添加到列表中; 第二个是删除它的修订版.重命名的属性与完全丢弃的属性之间没有区别.

r13874中删除的属性在-webkit前缀下存活了一段时间,因此传统前缀可能会继续工作,具体取决于解析器处理它们的方式.(有关详细信息,请参阅上面的时间表.)

  • -apple-dashboard-region: r7588到r9101
  • -apple-line-clamp: r6391至r9101
  • -apple-text-size-adjust: r6805到r9101
  • -khtml-appearance: r9828到r13874
  • -khtml-binding: r5967到r13874
  • -khtml-border-horizo​​ntal-spacing: r5212到r13874
  • -khtml-border-vertical-spacing: r5212到r13874
  • -khtml-box-align: r4704到r13874
  • -khtml-box-direction: 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-dashboard-region: r9101至r13874
  • -khtml-flow-mode: r4704到r8041
  • -khtml-font-size-delta: r8382到r13874
  • -khtml-horizo​​ntal-border-spacing: r5200到r5212
  • -khtml-line-break: r7763至r13874
  • -khtml-line-clamp: r9101到r13874
  • -khtml-margin-bottom-collapse: r7362至r13874
  • -khtml-margin-collapse: r7362至r13874
  • -khtml-margin-start: r7708至r13874
  • -khtml-margin-top-collapse: r7362至r13874
  • -khtml-marquee: r5301到r13874
  • -khtml-marquee-direction: r5301至r13874
  • -khtml-marquee-increment: r5301到r13874
  • -khtml-marquee-repetition: r5301到r13874
  • -khtml-marquee-speed: r5301至r13874
  • -khtml-marquee-style: r5301至r13874
  • -khtml-match-nearest-mail-blockquote-color: r8642到r13874
  • -khtml-nbsp-mode: r7763到r13874
  • -khtml-opacity: r4704至r5340 *
  • -khtml-padding-start: r7708到r13874
  • -khtml-rtl-ordering: r12027至r13874
  • -khtml-text-decorations-in-effect: r8466至r13874
  • -khtml-text-size-adjust: r9101到r13874
  • -khtml-user-drag: r6728到r13874
  • -khtml-user-modify: r5970到r13874
  • -khtml-user-select: r6728到r13874
  • -khtml-vertical-border-spacing: r5200到r5212

*虽然已被弃用,但-khtml-opacity后来-webkit-opacity得到了解析器的尊重,直到CSSProperties.in在r85212中引入了对别名的支持,并且仍然可-webkit-opacity用于最新版本.

-konq在很早的版本中支持了几个带前缀的属性:

  • -konq-flow-mode: 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;
}
Run Code Online (Sandbox Code Playgroud)

(这也解释了为什么你不能迭代这些属性 - document.body.style-sose属性已被具有相应-webkit属性的解析器替换.)

Peter Beverloo建议应该删除或逐步取消对这些属性的支持.短暂的时间内所有遗留属性都被禁用,但是除了-apple-dashboard-region和之外-apple-line-clamp,但由于无数的兼容性问题,这几天后就恢复了.在较新的版本中,除非使用,否则禁用旧版-apple-khtml前缀.启用此功能标志后,解析器将允许上述旧行为.ENABLE(LEGACY_CSS_VENDOR_PREFIXES)