供应商前缀
浏览器供应商过去常常为实验性或非标准的CSS属性和JavaScript API添加前缀,以便开发人员可以尝试新想法。理论上,这有助于防止他们的实验被依赖,然后在标准化过程中破坏Web开发人员的代码。
Web开发人员在生产网站上包含了带有前缀的功能,尽管它们是实验性的。这使得浏览器供应商在开发新功能时更难以确保兼容性。包含带有前缀的功能还会损害较小的浏览器供应商,他们最终不得不添加其他浏览器的前缀才能呈现流行的网站。
现在,浏览器中的实验性功能“置于标志之后”。这允许开发人员更改浏览器配置以测试即将推出的功能。浏览器现在在用户控制的标志或首选项后面添加实验性功能。可以为较小的规范添加标志,以便更快地达到稳定状态。
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;
如果您在代码库中遇到上述代码,则可以安全地删除除最后一行以外的所有行。所有浏览器都支持过渡,无需供应商前缀
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;
如果您在代码库中遇到上述代码,则可以安全地删除除第一行以外的所有行。所有浏览器都支持requestAnimationFrame
,无需供应商前缀,也无需window
js
requestAnimationFrame(callback);