Can I Use 查询
Can I Use(caniuse.com)是前端开发者日常使用频率最高的兼容性查询工具之一。它提供了几乎所有 Web 特性在各大浏览器中的支持率数据,帮助你在开发前快速确认某个 CSS 属性、HTML 元素或 JavaScript API 是否能在目标浏览器中正常工作。
前置知识
阅读本节前,建议先了解:浏览器兼容性
基础概念
Can I Use 是由 Alexis Deveria 创建并维护的开源兼容性数据库网站。它收集了大量 Web 特性(CSS、HTML5、JavaScript API、SVG 等)在不同浏览器版本中的支持数据,以直观的表格形式展示,是前端开发中确认兼容性的第一站。
网站概述
text
Can I Use 基本信息:
网站地址:https://caniuse.com/
创建者:Alexis Deveria
数据来源:MDN 兼容性数据 + 社区贡献 + 自动化测试
覆盖范围:CSS、HTML5、JavaScript API、SVG、HTTP 等
更新频率:随浏览器更新而更新
许可证:CC BY 4.0(数据可自由使用)详细说明
界面布局
打开 caniuse.com 后,你首先会看到搜索框和全球兼容性概览。
text
页面布局说明:
1. 搜索框(顶部中央)
→ 输入 CSS 属性名、HTML 元素名或 API 名称
→ 支持模糊搜索
2. 全球使用率统计(顶部)
→ 显示当前特性的全球浏览器支持百分比
3. 浏览器版本表格(主体)
→ 行:不同浏览器(Chrome、Firefox、Safari、Edge、IE 等)
→ 列:不同版本的浏览器
→ 颜色:绿色=支持,红色=不支持,黄色=部分支持
4. 资源链接(侧边栏)
→ MDN 文档链接
→ 规范文档链接
→ 兼容性相关文章表格颜色含义
Can I Use 使用直观的颜色系统表示支持状态:
text
颜色标识说明:
绿色背景(实心绿)
→ 完全支持该特性
黄色背景(渐变黄绿)
→ 部分支持(Partial Support)
→ 通常需要添加前缀,或有已知的行为差异
红色背景
→ 不支持该特性
灰色文字
→ 浏览器版本在特性发布之前
紫色/蓝色特殊标记
→ 需要启用特定标志(flag)才能使用
→ 如 chrome://flags 中的实验性特性如何查询特性
方式一:搜索框查询
text
操作步骤:
1. 打开 https://caniuse.com/
2. 在搜索框中输入要查询的特性名称
3. 从下拉建议列表中选择或直接回车
4. 查看兼容性表格常用查询关键词:
text
CSS 属性查询示例:
→ "css grid" - CSS Grid 布局
→ "flexbox" - Flexbox 布局
→ "backdrop-filter" - 背景滤镜
→ "aspect-ratio" - 宽高比
→ "container queries" - 容器查询
→ "subgrid" - CSS Grid 子网格
HTML 元素查询示例:
→ "dialog" - dialog 元素
→ "details" - details 元素
→ "picture" - picture 元素
→ "search" - search 元素
→ "template" - template 元素
JavaScript API 查询示例:
→ "fetch" - Fetch API
→ "intersectionobserver" - Intersection Observer
→ "resizableobserver" - Resize Observer
→ "web animations" - Web Animations API
→ "clipboard" - Clipboard API方式二:URL 直接查询
text
URL 格式:https://caniuse.com/{特性关键词}
示例:
→ https://caniuse.com/css-grid
→ https://caniuse.com/flexbox
→ https://caniuse.com/dialog
→ https://caniuse.com/fetch
→ https://caniuse.com/intersectionobserver理解支持率数据
text
全球支持率说明:
页面顶部显示的百分比数字:
→ 表示"全球用户中有多大比例使用的浏览器支持该特性"
→ 不表示"有多少浏览器支持该特性"
示例:如果 CSS Grid 的全球支持率为 96.5%
→ 意味着全球 96.5% 的浏览器用户访问时能看到正确的渲染
→ 3.5% 的用户可能看到布局异常
→ 这个数据基于 StatCounter 的浏览器市场份额统计查看部分支持的具体说明
对于黄色标记的"部分支持"特性,需要点击展开查看详细信息:
text
部分支持的常见原因:
1. 需要浏览器前缀
→ -webkit-、-moz- 等前缀才能使用
2. 已知的行为差异
→ 功能基本可用,但某些参数或边缘情况表现不同
3. 需要特定配置
→ 需要在服务器端配置特定的 HTTP 头
4. 功能受限
→ 基本功能可用,但高级特性不支持
查看详情方式:
→ 点击黄色单元格
→ 展开详细说明,包含具体的行为差异描述
→ 通常附带解决方案或替代方案建议多特性对比查询
Can I Use 支持同时查询多个特性的兼容性:
text
操作步骤:
1. 打开 https://caniuse.com/
2. 在搜索框中输入多个关键词,用逗号分隔
→ 如 "flexbox, grid, var"
3. 回车搜索
4. 结果页面会显示所有查询到的特性
浏览器选择器(页面左侧):
→ 可以选择只查看特定浏览器的数据
→ 如只看 "iOS Safari" 或 "Android Chrome"
→ 方便针对特定平台检查兼容性版本范围过滤
text
过滤功能:
1. 按浏览器版本过滤
→ 点击表格上方的浏览器名称
→ 选择要显示的版本范围
2. 按时间范围过滤
→ 可以设置只显示最近 N 个版本的浏览器数据
3. 移动端/桌面端切换
→ 可以分别查看桌面端和移动端的兼容性
→ 对移动端开发特别有用资源链接
每个特性页面底部通常包含以下参考资源:
text
资源链接说明:
1. MDN Web Docs
→ 指向 MDN 上该特性的详细文档
→ 包含使用方法、示例代码和兼容性数据
2. 规范文档
→ 指向 WHATWG 或 W3C 的规范原文
→ 用于了解特性的权威定义
3. Polyfill 链接
→ 如果有可用的 Polyfill,会提供链接
→ 方便快速找到兼容性补丁
4. Stack Overflow 链接
→ 常见问题讨论链接
5. Test Case 链接
→ 可以查看该特性的测试用例页面
→ 在真实浏览器中测试特性支持实战示例
示例:开发前的兼容性检查流程
text
标准开发流程中的兼容性检查:
1. 确定项目需要支持的浏览器范围
→ 根据 Google Analytics 数据确定用户浏览器分布
→ 如:Chrome 90+、Firefox 88+、Safari 14+、iOS Safari 14+
2. 查询计划使用的 CSS 特性
→ 在 Can I Use 上逐一查询
→ 记录不支持或部分支持的特性
3. 制定兼容性策略
→ 完全支持:直接使用
→ 部分支持:添加前缀或降级方案
→ 不支持:寻找替代方案或使用 Polyfill
4. 持续跟踪
→ 项目维护期间,定期检查兼容性变化
→ 当旧浏览器版本退出支持范围后,可以移除兼容代码示例:创建兼容性检查清单
以下是一个实际项目的 CSS 特性兼容性检查示例:
html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Can I Use 实践:兼容性检查清单</title>
<style>
:root {
--primary: #2563eb;
--success: #16a34a;
--warning: #f59e0b;
--danger: #dc2626;
--bg: #f8fafc;
--text: #1e293b;
--muted: #64748b;
--border: #e2e8f0;
--radius: 8px;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
background: var(--bg);
color: var(--text);
line-height: 1.6;
padding: 2rem;
}
.container { max-width: 800px; margin: 0 auto; }
h1 { color: var(--primary); margin-bottom: 0.5rem; }
.subtitle { color: var(--muted); margin-bottom: 2rem; }
table {
width: 100%;
border-collapse: collapse;
background: white;
border-radius: var(--radius);
overflow: hidden;
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
th, td {
padding: 0.75rem 1rem;
text-align: left;
border-bottom: 1px solid var(--border);
font-size: 0.9rem;
}
th {
background: var(--primary);
color: white;
font-weight: 600;
}
tr:hover { background: #f8fafc; }
.status {
display: inline-block;
padding: 0.15rem 0.5rem;
border-radius: 4px;
font-size: 0.8rem;
font-weight: 600;
}
.status-full { background: #dcfce7; color: #166534; }
.status-partial { background: #fef3c7; color: #92400e; }
.status-none { background: #fee2e2; color: #991b1b; }
.ciu-link {
color: var(--primary);
text-decoration: none;
font-weight: 500;
}
.ciu-link:hover { text-decoration: underline; }
.tip {
background: #dbeafe;
border: 1px solid #93c5fd;
border-radius: var(--radius);
padding: 1rem;
margin-top: 2rem;
line-height: 1.8;
font-size: 0.95rem;
}
.tip code {
background: #eff6ff;
padding: 0.1rem 0.3rem;
border-radius: 3px;
font-size: 0.9em;
}
</style>
</head>
<body>
<div class="container">
<h1>Can I Use 实践</h1>
<p class="subtitle">
项目开发前的 CSS 特性兼容性检查清单。
点击"查询"链接在 caniuse.com 上查看详细数据。
</p>
<table>
<thead>
<tr>
<th>特性</th>
<th>Can I Use</th>
<th>全球支持率</th>
<th>兼容性策略</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>CSS Grid</strong></td>
<td>
<a href="https://caniuse.com/css-grid" class="ciu-link" target="_blank">
查询
</a>
</td>
<td><span class="status status-full">~97%</span></td>
<td>直接使用</td>
</tr>
<tr>
<td><strong>Flexbox</strong></td>
<td>
<a href="https://caniuse.com/flexbox" class="ciu-link" target="_blank">
查询
</a>
</td>
<td><span class="status status-full">~99%</span></td>
<td>直接使用</td>
</tr>
<tr>
<td><strong>CSS 自定义属性</strong></td>
<td>
<a href="https://caniuse.com/css-variables" class="ciu-link" target="_blank">
查询
</a>
</td>
<td><span class="status status-full">~96%</span></td>
<td>直接使用</td>
</tr>
<tr>
<td><strong>Container Queries</strong></td>
<td>
<a href="https://caniuse.com/css-container-queries" class="ciu-link" target="_blank">
查询
</a>
</td>
<td><span class="status status-partial">~85%</span></td>
<td>提供降级方案</td>
</tr>
<tr>
<td><strong>backdrop-filter</strong></td>
<td>
<a href="https://caniuse.com/css-backdrop-filter" class="ciu-link" target="_blank">
查询
</a>
</td>
<td><span class="status status-partial">~92%</span></td>
<td>需要 -webkit- 前缀</td>
</tr>
<tr>
<td><strong>aspect-ratio</strong></td>
<td>
<a href="https://caniuse.com/mdn-css_properties_aspect-ratio" class="ciu-link" target="_blank">
查询
</a>
</td>
<td><span class="status status-full">~95%</span></td>
<td>提供 padding-top 降级</td>
</tr>
<tr>
<td><strong>:has() 选择器</strong></td>
<td>
<a href="https://caniuse.com/css-has" class="ciu-link" target="_blank">
查询
</a>
</td>
<td><span class="status status-partial">~87%</span></td>
<td>渐进增强</td>
</tr>
<tr>
<td><strong>dialog 元素</strong></td>
<td>
<a href="https://caniuse.com/dialog" class="ciu-link" target="_blank">
查询
</a>
</td>
<td><span class="status status-full">~95%</span></td>
<td>直接使用</td>
</tr>
</tbody>
</table>
<div class="tip">
<strong>使用建议:</strong><br>
1. 开发前先在 <code>caniuse.com</code> 上查询计划使用的所有特性<br>
2. 记录不支持或部分支持的特性,制定降级方案<br>
3. 使用 <code>Autoprefixer</code> 自动处理需要前缀的 CSS 属性<br>
4. 使用特性检测(而非浏览器检测)在 JS 中处理兼容性<br>
5. 定期更新检查清单,当旧浏览器版本退出支持范围后移除兼容代码
</div>
</div>
</body>
</html>示例:在开发流程中集成兼容性检查
text
完整开发流程中的 Can I Use 使用步骤:
1. 技术选型阶段
→ 在 Can I Use 上查询候选技术方案的兼容性
→ 对比多个方案的浏览器支持率
→ 选择兼容性最佳的方案
2. 编码阶段
→ 遇到不确定的特性,先查 Can I Use
→ 部分支持的特性查阅具体说明
→ 根据数据决定是否需要降级方案
3. 代码审查阶段
→ 审查代码中使用的 CSS 属性和 JS API
→ 确认每个特性的兼容性
→ 标记需要 Polyfill 的特性
4. 测试阶段
→ 在目标浏览器中验证实际效果
→ 重点关注 Can I Use 中标记为"部分支持"的特性
5. 上线后监控
→ 通过用户反馈和错误监控了解兼容性问题
→ 定期检查 Can I Use 数据更新注意事项
- 支持率数据是估算值:Can I Use 的数据基于多个来源的统计,实际用户群体可能因地区、行业等因素有所不同
- "部分支持"需要仔细查看说明:黄色标记的特性不一定能在你的使用场景中正常工作,务必点击查看具体的行为差异
- 数据可能滞后:新浏览器版本发布后,Can I Use 的数据可能需要数天到数周才能更新
- 不要过度追求 100% 兼容:对于非常旧的浏览器(如 IE),如果用户占比极低,可以接受优雅降级而非完美兼容
- 关注移动端数据:移动端浏览器的兼容性可能和桌面端不同,需要分别查看
最佳实践
- 将 Can I Use 加入开发工作流:遇到新特性时先查 Can I Use,形成习惯
- 使用 Browserslist 配置统一兼容范围:在项目中配置
browserslist,让 Autoprefixer、Babel、ESLint 等工具统一处理 - 定期更新兼容性数据:项目中使用
npx browserslist@latest --update-db更新浏览器数据库 - 根据实际用户数据决策:结合 Google Analytics 的浏览器分布数据,用 Can I Use 确定具体的兼容性策略
- 善用 Test Case 页面:Can I Use 为每个特性提供了测试页面,可以在目标浏览器中直接测试
下一节
继续学习:文档类型与 DOCTYPE