浏览器引擎前缀

浏览器厂商过去常常为实验性或非标准的 CSS 属性和 JavaScript API 添加前缀,以便开发者可以尝试新想法。理论上,这有助于防止在标准化过程中,这些实验性功能被过度依赖,从而导致网页开发者的代码崩溃。

尽管是实验性的,网页开发者仍将带前缀的功能包含在生产网站中。这使得浏览器厂商在开发新功能时更难确保兼容性。包含带前缀的功能也损害了小型浏览器厂商,他们最终不得不添加其他浏览器的前缀才能渲染流行的网站。

现在,浏览器中的实验性功能都被“放在一个标志后面”。这允许开发者更改浏览器配置来测试即将推出的功能。浏览器现在将实验性功能放在用户可控制的标志或偏好设置后面。可以为较小的规范添加标志,从而更快地达到稳定状态。

CSS 前缀

你在旧代码库中会看到的最常见的浏览器 CSS 前缀包括:

  • -webkit- (Chrome、Safari、新版本的 Opera 和 Edge,几乎所有 iOS 浏览器,包括适用于 iOS 的 Firefox;基本上,任何基于 WebKit 或 Chromium 的浏览器)
  • -moz- (Firefox)
  • -o- (旧的 WebKit 之前的 Opera 版本)
  • -ms- (Internet Explorer 和 Microsoft Edge,在 Chromium 之前)

使用示例

css
-webkit-transition: all 4s ease;
-moz-transition: all 4s ease;
-ms-transition: all 4s ease;
-o-transition: all 4s ease;
transition: all 4s ease;

如果在代码库中遇到上述代码,你可以安全地移除除了最后一行之外的所有内容。所有浏览器都支持不带供应商前缀的transitions

css
transition: all 4s ease;

API 前缀

从历史上看,浏览器厂商也为实验性 API 使用前缀。如果整个接口都是实验性的,那么接口的名称会带前缀(但其中的属性或方法不会)。如果向标准化接口添加了实验性属性或方法,那么单个方法或属性会带前缀。

接口前缀

接口名称的前缀采用大写

  • WebKit (Chrome、Safari、新版本的 Opera 和 Edge,几乎所有 iOS 浏览器(包括适用于 iOS 的 Firefox);基本上,任何基于 WebKit 和 Chromium 的浏览器)
  • Moz (Firefox)
  • O (旧的 WebKit 之前的 Opera 版本)
  • MS (Internet Explorer 和 Microsoft Edge,在 Chromium 之前)

属性和方法前缀

属性和方法的前缀采用小写

  • webkit (Chrome、Safari、新版本的 Opera 和 Edge,几乎所有 iOS 浏览器(包括适用于 iOS 的 Firefox);基本上,任何基于 WebKit 和 Chromium 的浏览器)
  • moz (Firefox)
  • o (旧的 WebKit 之前的 Opera 版本)
  • ms (Internet Explorer 和 Microsoft Edge,在 Chromium 之前)

使用示例

js
window.requestAnimationFrame =
  window.requestAnimationFrame ||
  window.mozRequestAnimationFrame ||
  window.webkitRequestAnimationFrame ||
  window.oRequestAnimationFrame ||
  window.msRequestAnimationFrame;

如果在代码库中遇到上述代码,你可以安全地移除除了第一行之外的所有内容。所有浏览器都支持不带供应商前缀且不带 windowrequestAnimationFrame

js
requestAnimationFrame(callback);

另见