浏览器引擎前缀
浏览器厂商过去常常为实验性或非标准的 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;
如果在代码库中遇到上述代码,你可以安全地移除除了第一行之外的所有内容。所有浏览器都支持不带供应商前缀且不带 window 的 requestAnimationFrame。
js
requestAnimationFrame(callback);