WebKit和它的传统前缀(WebKit and its legacy prefixes)

2019-09-20 09:53发布

我想通过编译前缀属性 -apple--khtml-这是/是由WebKit 哪个版本 ,他们最终放弃或引入支持。
什么是强加给他们的限制? 例如,你可以发现他们在document.body.style

我想只有在知道有人像记者这种错误可以为我们提供一个准确的名单。 但我更喜欢在这里问大家首先这种方式将从中受益?

一个很好的开始你的调查是本次修订 。

Answer 1:

介绍

这个问题并不像你想象的那么简单。 这是很容易比较支持的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.yCSSParser.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框对齐:r4704到r13874
  • -khtml盒方向:r4704到r13874
  • -khtml箱-FLEX:r4704到r13874
  • -khtml盒-FLEX-组:r4704到r13874
  • -khtml箱柔性组的过渡:r6758至r6802
  • -khtml箱线:r4704到r13874
  • -khtml-箱序组:r4704到r13874
  • -khtml-箱东方:r4704到r13874
  • -khtml盒包装:r4704到r13874
  • -khtml仪表板区域:r9101到r13874
  • -khtml流模式:r4704至r8041
  • -khtml-字体大小-Δ:r8382到r13874
  • -khtml有水平边框间距:R5200到r5212
  • -khtml线断:r7763到r13874
  • -khtml行钳:r9101到r13874
  • -khtml余裕底崩溃:r7362到r13874
  • -khtml余裕崩溃:r7362到r13874
  • -khtml余裕开始:r7708到r13874
  • -khtml余裕顶坍塌:r7362到r13874
  • -khtml-字幕:r5301到r13874
  • -khtml-选取框方向:r5301到r13874
  • -khtml-选取框增量:r5301到r13874
  • -khtml-选取框重复:r5301到r13874
  • -khtml-选取框速度:r5301到r13874
  • -khtml-帐篷式:r5301到r13874
  • -khtml匹配最接近的邮件,BLOCKQUOTE色:r8642到r13874
  • -khtml-NBSP模式:r7763到r13874
  • -khtml不透明度:r4704至r5340 *
  • -khtml-填充开始:r7708到r13874
  • -khtml-RTL排序:r12027到r13874
  • -khtml-文本装饰出现的效果:r8466到r13874
  • -khtml文本大小调整:r9101到r13874
  • -khtml用户拖拽:r6728到r13874
  • -khtml用户-修改:r5970到r13874
  • -khtml-用户选择:r6728到r13874
  • -khtml垂直边界间距:R5200到r5212

*虽然过时了, -khtml-opacity -and后-webkit-opacity -was解析器兑现的权利,直到CSSProperties.in介绍了别名支持r85212 ,并且仍然可以作为-webkit-opacity到最新版本。

一对夫妇的-konq前缀属性在非常早期的版本中支持:

  • -konq流模式:R4至r4704
  • -konq-JS-片段: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 -those性质已被替换与相应的解析器-webkit属性。)

彼得Beverloo建议,这些属性的支持,应删除或淘汰很短的时间所有的传统特性被禁用 ,与例外-apple-dashboard-region-apple-line-clamp ,但这仅仅两天后恢复 ,因为无数的兼容性问题。 在较新的版本 ,旧的-apple-khtml前缀禁止,除非有内置ENABLE(LEGACY_CSS_VENDOR_PREFIXES) 当启用该功能标志,解析器允许上述旧的行为。



Answer 2:

if("WebkitAppearance" in document.body.style) {}
if("KhtmlAppearance" in document.body.style) {}
if("MozAppearance" in document.body.style) {}


文章来源: WebKit and its legacy prefixes