news 2026/4/23 15:46:43

我没想到 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/4/23 11:48:15

【IEEE出版】第二届能源系统与电气工程国际学术会议(ESEE 2026)

第二届能源系统与电气工程国际学术会议(ESEE 2026)由南华大学主办,将于2026年3月27-29日在衡阳举办。会议主要围绕能源、电气电力领域展开讨论。大会旨在为从事相关行业的专家、科研学者、技术人员共享科研成果和前沿技术,让大家了解学术发展…

作者头像 李华
网站建设 2026/4/22 22:20:05

范桢复古写真曝光 清冷氛围诠释复古浪漫

近日,演员范桢工作室工作室分享一组写真。照片中,范桢身穿缀满碎钻的亮片短裙,在冷调光线中泛着细碎星光,与蕾丝手套的朦胧肌理相互映衬,化身九十年代美式甜心,复古惊艳,时髦有范儿。这组写真以高饱和度的克…

作者头像 李华
网站建设 2026/4/16 9:06:49

无需联网!Z-Image i2L本地化AI绘图解决方案体验

无需联网!Z-Image i2L本地化AI绘图解决方案体验 在AI图像生成工具层出不穷的今天,多数用户面临一个现实困境:要么依赖云端服务,担心隐私泄露和数据上传风险;要么尝试本地部署,却卡在显存不足、模型加载失败…

作者头像 李华
网站建设 2026/4/16 9:04:39

AnimateDiff效果展示:自然光线下水波折射+涟漪扩散物理模拟效果

AnimateDiff效果展示:自然光线下水波折射涟漪扩散物理模拟效果 1. 这不是特效合成,是AI“算”出来的水波动态 你有没有试过盯着一池静水发呆?阳光斜射下来,水面泛起细碎金光,指尖轻点,一圈圈涟漪由中心向…

作者头像 李华