写点什么

Chrome 引入了 CSS 的 If 函数,在 CSS 中原生支持条件样式

作者:Daniel Dominguez

  • 2025-08-17
    北京
  • 本文字数:1100 字

    阅读完需:约 4 分钟

大小:492.48K时长:02:48
Chrome引入了CSS的If函数,在CSS中原生支持条件样式

Chrome 137 引入了对新的CSS if函数的支持,首次在原生样式表中直接引入条件逻辑,减少了对预处理器或基于 JavaScript 回退的需求。这个特性允许开发人员直接在属性值中编写声明式条件样式。

 

if()函数是不断发展的 CSS 值和单位模块第 5 级规范的一部分,目前仅在 Chrome 137 及更高版本中独有。它支持使用三种内联条件类型进行条件-值评估:style()、media()和 supports()。它提供了一种灵活而强大的方式,根据自定义属性、媒体查询或特性支持动态应用样式。

 

熟悉SassPostCSS 的开发人员可能会发现这个函数特别有用,因为它将类似的逻辑带入了原生 CSS。一些开发人员认为这是消除对 Sass 等预处理器需求的关键一步。

 

这次发布中的一个主要功能是能够在不离开 CSS 文件的情况下使用 if()函数进行实时条件样式设置。语法允许开发人员传递一个条件,后跟一个值,以及可选的 else 子句。

 

通过将自定义属性与 HTML 元素上的 data-status 属性配对,以下示例展示了 if()如何根据属性的值为面板分配不同的背景颜色:

 

.panel {  --status: attr(data-status type(<custom-ident>));  background-color: if(    style(--status: proposed): blue;    style(--status: assigned): pink;    style(--status: progress): orange;    style(--status: complete): green;    else: gray  );}
复制代码

 

这个版本在开发者社区引起了不同的反应。一些评论者批评了这种语法,称其十分混乱一位开发人员将其比作三目运算符:

 

我真的不喜欢它的语法。它基本上就是一个三目运算符,只是 if()内部的所有内容都放在了 if()里面,而不是通常的 if (condition)。

 

与任何 CSS 新功能一样,if()函数也有其局限性。在撰写本文时,if()函数仅在 Chrome 137+中支持,与 Firefox 或 Safari 的对齐有限。因此,建议开发人员谨慎使用,并提供回退以确保兼容性。社区对兼容性和缺乏统一标准感到担忧,将 Chrome采取的方法比作微软的旧策略“拥抱、扩展和消灭”,即对于 Internet Explorer,他们会制定自己的标准。

 

其他人对这一变化持更积极的态度。在最近的一段视频中,Theo Browne 探索了这个新特性,并强调了它在大规模样式系统的优势,在使用传统方法时,一个位置错误或顺序错误的伪类可能会破坏 UI。有了 if(),这种风险降低了,因为条件逻辑包含在样式声明内部,一旦满足条件,浏览器就会应用匹配的值并忽略其余部分。Theo 总结说,他不仅对这个特性感到兴奋,而且感到“CSS 的未来从未如此光明”。

 

Chrome 137自 2025 年 5 月已起进入稳定版本状态。开发人员现在可以在支持的环境中开始使用 if(),并可以通过 W3C 的CSS值和单位模块第5级跟踪规范的进展。

 

原文链接:

https://www.infoq.com/news/2025/08/chrome-css-if-function/

2025-08-17 12:006311

评论

发布
暂无评论

「Postman教程 」功能介绍-1

Megatron7

测试 Postman

实现一个比LongAdder更高性能的计数器有多难?

捉虫大师

Java jdk LongAdder

你的c++团队还在禁用异常处理吗?

泰伦卢

c c++ C#

在Gitlab-ce的Docker中使用自定义端口

天飞

Docker gitlab

奇怪知识点系列:Office 365 CDN 揭秘

手艺人杨柳

Office 365 Microsoft 365 SharePoint Online

如何设计一款“高可用高性能”的发号器?

捉虫大师

Java 高可用 发号器 高性能 raft

「Postman教程 」接口测试-2

Megatron7

测试 Postman

从Deepl说起,聊一聊未来的“安全职业”

孤岛旭日

程序员 AI 职业

中小型城市商业银行数字化转型实践(一)整体技术架构转型(双态IT)

泡菜小仙

数字化转型 架构设计 技术架构

我的读书笔记-樊登读书法

lmymirror

学习 读书笔记 方法论 读书方式

生活就是这么讽刺,有时候你嘲笑他,有时候你想成为他......

代码诗人

中年危机 文艺 短片小说

Oracle 数据恢复一例

wong

oracle windows dbf

程序员的晚餐 | 5 月 19 日 蒜香鸡腿,味道令人惊讶

清远

美食

中小型城市商业银行数字化转型实践(三)数据中台建设思路和路径

泡菜小仙

数据中台 数字化转型 数据架构

linux文件系统-inode学习整理

戈坞昂

Linux inode

部门最漂亮的妹子离职了

Geek_6rptuk

团队管理 生涯规划 企业文化 职场

Kubernetes时代的云容器平台:各家云产品模式逐渐丰富

韩超

腾讯云 阿里云 Kubernetes IaaS PaaS

《零基础学 Java》 FAQ 之 9-Java里的各种数据类型占用多少内存空间

臧萌

Java

回“疫”录(21):你这样做的样子真丑

小天同学

疫情 心理 回忆录 现实纪录 纪实

比特币是新生事物吗?

Haiyung

比特币

SQL 生成斐波那契数列

zero

sql 斐波那契 MySQ

2020年5月19日 Java并发编程专题

瑞克与莫迪

Java

谁能让你安稳

Neco.W

工作 稳定性 努力工作

520 我用算法帮女朋友的闺蜜选男友

cherubines

Python 算法 数据分析 蒙特卡洛 最优解

Android | Tangram动态页面之路(四)vlayout原理

哈利迪

android

中小型城市商业银行数字化转型实践(二)集成关系ESB APIGateway ServiceMesh

泡菜小仙

架构设计 集成架构 ESB

MyBatis支持的jdbcType 枚举类型

Kevin Liao

看得懂的区块链及智能合约概念

石君

区块链 智能合约

MacOS 下使用VSCode进行GoLang Test报错

北纬32°

macos vscode Unit Test debug Go 语言

看完这篇 HTTPS,和面试官扯皮就没问题了

苹果看辽宁体育

https

关于键盘的一些事

BabyKing

vim 缓存 键盘 快捷键 karabiner

Chrome引入了CSS的If函数,在CSS中原生支持条件样式_大前端_InfoQ精选文章