编程

最新版 Chorme 开始支持 CSS 新增的 if() 函数

60 2025-08-26 01:04:00

CSS 越来越像真正的编程语言了。随着诸如 CSS 变量、calc()函数、伪类的 :has():is() 以及不断变化的 @media 查询等的引入,CSS 编写复杂的样式布局变得更为容易。

最近 CSS 又添加了一个新的 if() 函数。不过,目前,只有 Chrome 137 以上版本支持该函数。

CSS 中的 if() 函数

if() 函数允许你根据给定的条件应用样式,从而更容易编写响应式和自适应的设计。

其语法如下:

div {
    color: if(
                style(<some-condition>): <some-value>;
                style(<some-other-condition>): <some-other-value>;
                else: <default-value>;
            );
}

如上所示,在 if() 函数中,你可以指定多个条件及其相应的样式。如果所有条件都不匹配,则应用 else 值。

style() 函数定义了条件和条件为真时要应用的值。

用例

以下是 CSS 中使用 if() 函数的简单用例。

<div class="dark">dark</div>
<div class="light">light</div>

我们可以使用 if() 函数来基于元素的类条件性地使用背景色。如下:

div {
  color: var(--color);
  background-color: if(
                        style(--color: white): black;
                        else: pink
                    );
}

.dark {
  --color: black;
}

.light {
  --color: white;
}

上例中,if() 函数检测 --color 变量是否设置为 white。如果是,其北京市将设置为 black,否则将默认为 pink

更高级的示例

if() 函数在需要基于 HTML 属性应用不同样式的场景中表现出色。

例如,下例中,我们可以利用 data-status 属性动态更改元素的边框颜色、背景颜色,甚至网格列。

<div class="container">
  <div class="card" data-status="pending">
  </div>

  <div class="card" data-status="complete">
  </div>

  <div class="card" data-status="pending">
  </div>

  <div class="card" data-status="inactive">
  </div>
</div>

以下是如何使用动态样式。

.card {
  --status: attr(data-status type(<custom-ident>));
  border: 1px solid;
  border-color: if(
                    style(--status: pending): royalblue;
                    style(--status: complete): seagreen;
                    else: gray
                );

  background-color: if(
                        style(--status: pending): #eff7fa;
                        style(--status: complete): #f6fff6;
                        else: #f7f7f7
                    );

  grid-column: if(
                    style(--status: pending): 1;
                    style(--status: complete): 2;
                    else: 3
                );
}

浏览器支持

if() 函数在最新版本的 Chorme(v137 以上)开始获得支持。其他浏览器也在考虑在将来的版本中添加支持。请谨慎使用。

 

CSS