CSS - if()

目次

概要

形式if([ <if-branch> ; ]* <if-branch> ;?)
詳細<if-branch> = <if-condition> : <value>? <if-condition> = style( style-conditions ) | media( media-conditions ) | supports( supports-conditions ) | else
サポートhttps://caniuse.com/mdn-css_types_if

説明

CSS の中で if 文を使用できる機能です。Chrome 137 でサポートされました。

style()

下記の例は、背景色は --mode の値が dark であれば黒、さもなくば白に、文字色は --mode の値が dark であれば白、さもなくば黒に指定します。

CSS
.dark {
  --mode: dark;
}
.light {
  --mode: light;
}
div:is(.dark, .light) {
  padding: 8px;
  background-color: if(style(--mode: dark): black; else: white);
  color: if(style(--mode: dark): white; else: black);
}
HTML
<div class="dark">Dark mode</div>
<div class="light">Light mode</div>
表示
Dark mode
Light mode

media()

@media によるメディアクエリと同様の判断を行います。下記の例では、ブラウザの横幅が 768px より狭いときはブロックレイアウト(縦並び)を、さもなくばフレックスレイアウト(横並び)を指定しています。

CSS
.my-container {
  display: if(media(width < 768px): block; else: flex);
  & > div {
    flex: 1;
    border: 1px solid #ccc;
    text-align: center;
  }
}
HTML
<div class="my-container">
  <div>AAA</div>
  <div>BBB</div>
  <div>CCC</div>
</div>
表示
AAA
BBB
CCC

supports()

指定したCSSをブラウザがサポートしているか否かを判断します。Chrome 137 でもまだサポートされていないようです。@supports を用いることで機能としては代替できます。

CSS
.grid {
  display: if(supports(display: grid): grid; else: block;);
}

else

else は前述の条件のいずれにもマッチしなかった時の値を指定します。

CSS
.my-container {
  display: if(media(width < 768px): block; else: flex);
}

複数条件

下記の様に複数の条件を記述することもできます。

CSS
.my-test {
  color: if(
    style(--mode: cool): blue;
    style(--mode: hot): red;
    style(--mode: eco): green;
    else: black;
  );
}

and, or, not条件

下記の様に and, or, not を用いた条件文を記述することもできます。

CSS
.my-test {
  color: if(style((--mode: hot) or (--mode: fire)): red; else: black);
}