news 2026/5/24 10:48:51

我没想到 CSS if 函数这么强

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
我没想到 CSS if 函数这么强

如果 CSS 能像 JavaScript 一样进行条件判断会怎样?

你可能会想,只是个条件判断,能有什么用?

那你就太小瞧这个功能了!

这篇文章带你展示它的强大。

PS:目前 CSS if() 函数已在 Chrome 137 中正式发布。

1. 基本用法

property:if(condition-1:value-1;condition-2:value-2;condition-3:value-3;else:default-value);

函数会按顺序检查条件并应用第一个匹配的值。如果没有条件匹配,则使用 else 值。

2. 3 大使用场景

2.1. 深色模式

以前实现深色模式,要么用 JavaScript 切换 class,要么写两套样式。

现在你可以直接这样写:

body{--theme:"dark";/* 通过 JavaScript 或用户偏好切换 */background:if(style(--theme:"dark"):#1a1a1a;else:white);color:if(style(--theme:"dark"):#e4e4e4;else:#333);}

2.2. 响应式布局

以前写响应式:

.container{width:100%;}@media(min-width:576px){.container{width:540px;}}@media(min-width:768px){.container{width:720px;}}@media(min-width:992px){.container{width:960px;}}/* 还有更多... */

现在你可以这样写:

.container{width:if(media(width >= 1400px):1320px;media(width >= 1200px):1140px;media(width >= 992px):960px;media(width >= 768px):720px;media(width >= 576px):540px;else:100%);padding-inline:if(media(width >= 768px):2rem;else:1rem);}

代码更优雅,性能更快,维护起来也方便。

2.3. 优雅降级

假设你想用最新的颜色函数lch(),但又担心旧浏览器不支持。以前你可能要这样写:

.element{border-color:rgb(200,100,50);/* 兜底方案 */border-color:lch(50% 100 150);/* 新浏览器会覆盖 */}

现在可以用supports()明确地检测:

.element{border-color:if(supports(color:lch(0 0 0)):lch(50% 100 150);supports(color:lab(0 0 0)):lab(50 100 -50);else:rgb(200,100,50));}

浏览器会按顺序检查:支持lch()就用lch(),不支持就看看支持不支持lab(),都不支持就用传统的rgb()

3. 浏览器支持度

截至 2025 年 8 月:

  • ✅ Chrome/Edge:从版本 137 开始

  • ✅ Chrome Android:从版本 139 开始

  • ❌ Firefox:开发中

  • ❌ Safari:在路线图上

  • ❌ Opera:尚未支持

所以如果你现在就想用,记得写好 fallback:

.button{/* 所有浏览器的回退 */padding:1rem 2rem;background:#007bff;/* 现代浏览器会自动覆盖 */padding:if(style(--size:small):0.5rem 1rem;style(--size:large):1.5rem 3rem;else:1rem 2rem);background:if(style(--variant:primary):#007bff;style(--variant:success):#28a745;style(--variant:danger):#dc3545;else:#6c757d);}

4. 技术在进步

写到这里,我想起自己刚学前端那会儿。

每次看到新技术出来,就觉得“完了,我又落后了”。

后来慢慢发现,技术是用来解决问题的,不是用来制造焦虑的。

CSSif()函数确实很酷,但它解决的问题——条件判断、响应式布局、浏览器兼容——这些问题我们用现有的方法也能解决,只是可能麻烦一点。

新技术的意义,不是让你觉得“我必须马上学会”,而是让你知道“原来还可以这样做”。

所以,如果你现在项目里用不上if()函数,没关系。把它收藏起来,等哪天浏览器支持好了,或者你遇到了它能解决的问题,再拿出来用。

前端学习是个长跑,不是短跑。慢慢来,别着急。

我是冴羽,10 年笔耕不辍,专注前端领域,更新了 10+ 系列、300+ 篇原创技术文章,翻译过 Svelte、Solid.js、TypeScript 文档,著有小册《Next.js 开发指南》、《Svelte 开发指南》、《Astro 实战指南》。

欢迎围观我的“网页版朋友圈”,关注我的公众号:冴羽(或搜索 yayujs),每天分享前端知识、AI 干货。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 10:28:21

【实习】钉钉端银行经理新增与二维码功能开发复盘

钉钉移动端银行经理新增与二维码功能开发复盘 1. 需求概述2. 整体流程2.1 时序图2.2 流程图 3. 方案演进3.1 初期方案:弹窗显示二维码(❌ 失败)3.2 最终方案:独立页面(✅ 成功) 4. 核心代码解析4.1 数据流对…

作者头像 李华
网站建设 2026/5/14 7:08:03

阿里云Qwen3-ASR-1.7B实战:会议录音转文字保姆级教程

阿里云Qwen3-ASR-1.7B实战:会议录音转文字保姆级教程 1. 为什么你需要这个模型——从“听不清”到“一字不落”的真实痛点 你有没有经历过这样的场景: 刚开完一场两小时的跨部门会议,白板写满思路,但没人记得谁说了什么关键结论…

作者头像 李华
网站建设 2026/5/22 5:29:21

Qwen3-ForcedAligner-0.6B在语音翻译系统中的关键作用

Qwen3-ForcedAligner-0.6B在语音翻译系统中的关键作用 1. 为什么语音翻译需要“时间标尺” 你有没有遇到过这样的情况:一段会议录音转成文字后,想快速定位某位发言人提到的关键数据,却只能逐字阅读?或者在制作双语字幕时&#x…

作者头像 李华
网站建设 2026/5/20 23:54:48

Yi-Coder-1.5B与GitHub协作开发实战

Yi-Coder-1.5B与GitHub协作开发实战 1. 当代码助手遇上协作平台:为什么需要这场组合 团队开发中最常见的场景是什么?不是写新功能,而是反复修改、评审、合并、解决冲突。当一个PR被提交后,开发者要花时间理解上下文,…

作者头像 李华
网站建设 2026/5/20 14:31:40

MusePublic大模型VLOOKUP智能数据匹配增强

MusePublic大模型VLOOKUP智能数据匹配增强 1. 当Excel的VLOOKUP开始“读懂”你的意思 你有没有遇到过这样的情况:在财务报表里查供应商名称,输入“北京智云科技有限公司”,但表格里写的是“北京智云科技”,结果VLOOKUP直接返回#…

作者头像 李华