编程语言
首页 > 编程语言> > javascript – WebKit及其遗留前缀

javascript – WebKit及其遗留前缀

作者:互联网

我正在尝试编译以-apple-和-khtml-为前缀的属性,这些属性由WebKit支持,并且最终会删除或引入它们的版本.
对他们施加的限制是什么?例如,您可以在document.body.style中找到它们吗?

我想只有知情人才能像this bug的记者那样为我们提供准确的清单.
但我更喜欢先问这里每个人都会从中受益……

开始调查的好地方是this revision.

解决方法:

介绍

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

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

> 5 May 2003 (r9101):-apple(简称-moz!)将在幕后规范化为-khtml.
> 30 Aug 2005 (r10397):-webkit作为-khtml的替代添加.
> 14 Jun 2006 (r13874):all -webkit
属性将与遗留前缀一起使用(即-apple和-khtml规范化为-webkit).在此修订版中,所有剩余的旧版前缀都已更新为-webkit.
> 19 Feb 2008 (r30393):遗留前缀处理从CSSGrammar.y移至CSSParser.cpp.
> 21 Jul 2010 (r63854):没有旧版前缀
支持除了-apple-dashboard-region和
– 苹果线钳.
> 26 Jul 2010 (r64071):all -webkit
属性再次使用旧版前缀. (以前的变化
回复.)
> 10 Apr 2012 (r113795):没有遗留前缀
除非特别启用,否则支持.

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

下面的列表是从commit history for the list of supported properties收集的.第一个数字是修订,其中对该属性的支持被添加到列表中;第二个是删除它的修订版.重命名的属性与完全丢弃的属性之间没有区别.

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;
}

(这也解释了为什么你不能在document.body.style中迭代这些属性 – 这些属性已经被具有相应-webkit属性的解析器所取代.)

Peter Beverloo建议对这些属性的支持应该是removed or phased out短暂的时间all legacy properties were disabled,除了-apple-dashboard-region和-apple-line-clamp,但由于无数的兼容性问题,这是reverted mere days later.在newer revisions中,传统的-apple和-khtml前缀是disabled unless built with ENABLE(LEGACY_CSS_VENDOR_PREFIXES).当启用此功能标志时,解析器允许上面概述的旧行为.

标签:javascript,css,webkit,vendor-prefix
来源: https://codeday.me/bug/20190620/1248619.html