Skip to content

一文搞懂浏览器兼容性:清单与案例

· 3 min

兼容性不是“和浏览器打仗”,而是“在预算里买安心”。真有用户在用的版本,就兼容;没人用,就果断放弃。

一屏清单(先定目标,再动手)#


第一步:三分钟定兼容目标(决策树)#

  1. 业务问答
  1. 决策
# .browserslistrc(标准档)
> 0.5%
last 2 versions
not dead
iOS >= 14
Safari >= 14
# 进阶档:再覆盖一些旧安卓
> 0.3%
last 3 versions
not dead
iOS >= 13
Android >= 7
ChromeAndroid >= 90

[!tip] 跑一遍数据

Terminal window
npx update-browserslist-db@latest

保持 caniuse-lite 新鲜,减少“明明支持却被警告”的错觉。


第二步:CSS 兼容怎么落地(别扯,直接配)#

postcss.config.cjs
module.exports = { plugins: [require('autoprefixer')] };
/* :has 增强版,有就用;没有就退化 */
@supports selector(:has(*)) {
.card:has(img) { /* 高级选择器样式 */ }
}
/* 现代浏览器优先 */
.main { min-height: 100dvh; }
/* iOS 旧版兜底 */
@supports (-webkit-touch-callout: none) {
.main { min-height: -webkit-fill-available; }
}

第三步:JS 兼容怎么搞(两件事)#

Terminal window
npm i -D @babel/core @babel/preset-env core-js
babel.config.cjs
module.exports = {
presets: [['@babel/preset-env', {
targets: '> 0.5%, last 2 versions, not dead',
useBuiltIns: 'usage',
corejs: 3
}]],
};