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/22 6:03:29

【EV 录屏】电脑录屏神器!高效录屏神器 | 大学生及职场必备好用工具(十一)——EV录屏上手指南

软件获取地址 EV录屏 本篇分享的是录屏工具——EV录屏,这个软件是我大学一直在用的录屏工具,使用方便且大部分功能免费,一般会用在简单的网页录屏上。 功能介绍 这是安装后打开软件的首页,左下角是直接录屏,但一般会…

作者头像 李华
网站建设 2026/4/17 13:38:44

手把手教你使用DeepSeek-OCR实现图片文字智能提取

手把手教你使用DeepSeek-OCR实现图片文字智能提取 你是否遇到过这样的场景:手头有一张扫描版PDF截图、一张会议白板照片、一份带表格的合同扫描件,或者一页手写笔记——想快速把里面的内容变成可编辑的文字,却只能手动一个字一个字敲&#x…

作者头像 李华
网站建设 2026/3/31 12:05:04

Qwen3-ASR-1.7B应用案例:如何快速转录采访录音

Qwen3-ASR-1.7B应用案例:如何快速转录采访录音 1. 引言 1.1 场景痛点:采访录音转文字,为什么总是卡在“最后一公里”? 你刚结束一场两小时的深度访谈,录音文件已存好,但打开文档准备整理时却犯了难—— …

作者头像 李华
网站建设 2026/4/16 10:08:45

MelonLoader启动故障诊断与修复全流程指南

MelonLoader启动故障诊断与修复全流程指南 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 1. 问题诊断:启动故障现象…

作者头像 李华
网站建设 2026/4/23 12:31:01

Jimeng AI Studio效果实测:float32 VAE解码带来的细节锐利度提升

Jimeng AI Studio效果实测:float32 VAE解码带来的细节锐利度提升 1. 为什么这次实测值得你花三分钟看完 你有没有遇到过这样的情况:明明提示词写得挺用心,生成的图也构图完整、色彩协调,但放大一看——衣服纹理糊成一片&#xf…

作者头像 李华