CSS if () 函数是 CSS Values and Units Module Level 5 中的新兴特性,允许在属性值中直接嵌入条件逻辑,支持 style ()、media () 和 supports () 三类查询。该函数语法简洁,按顺序评估条件,返回首个匹配值,未匹配则 fallback 到 else 分支,实现纯 CSS 下的声明式条件样式。
与传统 JavaScript 类切换或预处理器 mixin 相比,if () 无需运行时开销,避免了 DOM 操作和重排风险,提升性能并简化维护。结合 @supports 规则(特性查询),可优雅处理浏览器兼容:不支持 if () 的浏览器忽略整个块,支持则激活条件逻辑。
例如,检测容器查询支持时动态调整布局:
@supports (if(supports(container-type: inline-size): true)) {
.container {
container-type: inline-size;
width: if(
style(--theme: dark): 80%;
container(width > 600px): 60%;
else: 100%
);
}
}
caniuse 数据显示,Chrome/Edge 137+ 已支持,覆盖主流现代浏览器,但 Firefox/Safari 暂无计划。实际部署需渐进增强:先默认样式,再 @supports 覆盖。
风险包括浏览器碎片化和语法敏感(如缺少 else 导致无效值)。回滚策略:用 @supports 包裹,嵌套不超过 2 层,避免循环依赖。
工程参数:
- 阈值:media (width>= 768px) 为平板断点,container (height > 400px) 适配视口。
- 清单:1. 定义 CSS 变量如 --state: pending;2. style (--state: complete): green;3. 测试 caniuse 覆盖率 >80%;4. 监控 devtools 支持查询。
- 监控点:computed 值显示条件分支;性能:无 JS 零开销。
来源:caniuse.com/css-if;MDN Web/CSS/if;news.ycombinator.com (2025-12-05 帖子);drafts.csswg.org/css-values-5/#if-fun。