CSSだけで「if」を考える時代が来た?

― 新しい if() 関数と、いま使うべきかどうかの判断基準 ―

Contents

「CSSに if はない」は、もう半分だけ正しい

CSS

CSSを学んでいると、必ず一度はこう言われます。

CSSに if 文はありません。条件分岐は JavaScript の役割です

この説明は、考え方としては正しいのですが、表現としては少し古くなり始めています。

最近、Chrome の開発者向け公式ブログで、CSS にネイティブの if() 関数を導入する提案・実装が公開されました。

これを見て、

  • CSSに if が書けるようになるの?
  • Sass の if と何が違う?
  • 教材や実務で使っていい段階?

と疑問を持った方も多いと思います。

この記事では、

  • JavaScriptを使わず
  • Sassも前提にせず
  • 「CSSだけ」で if をどう考えるか

を軸に、新しい if() 関数の位置づけと、現実的な判断基準を整理します。

そもそも「if」とは何か(処理ではなく考え方)

if 文とは、簡単に言えば 条件によって結果を変える という考え方です。JavaScript では次のように書きます。

if (isMobile) {
  size = 44;
} else {
  size = 30;
}

これを CSSの視点に置き換えると、 ある条件のときだけ、見た目が変わる という意味になります。

ここで重要なのは、CSSは「処理を実行する言語」ではないという点です。

CSSは 「もし〜なら処理する」
ではなく
「この条件では、こう表示する」 という 宣言型の言語 です。

実はCSSは、最初から「if的」だった

CSSに if はない、と言われがちですが、実は CSS は最初から条件だらけです。

:hover は if そのもの

button:hover {
  background: red;
}

意味はこうです。もし hover されていたら、背景を赤にする 完全に if の考え方です。

メディアクエリも if

@media (max-width: 768px) {
  body {
    font-size: 14px;
  }
}

これは、もし画面幅が 768px 以下なら、文字サイズを変える という条件分岐です。

:checked も状態による if

input:checked + .menu {
  display: block;
}

もしチェックされていたら、メニューを表示する。JavaScriptなしで、状態による表示切り替えが実現できています。

なぜ「CSSに if はない」と言われ続けてきたのか

理由はとてもシンプルです。CSSにはこれまで、「1つのプロパティの値を条件で切り替える書き方」が存在しなかったからです。

そのため、

  • 条件ごとにルールを分ける
  • @media を増やす
  • クラスを付け替える

といった 回り道 が必要でした。

新しく登場した CSS の if() 関数

そこで登場したのが、CSSネイティブの if() 関数です。

構文のイメージは次のような形です。

property: if(条件: 値A; else: 値B);

つまり、

  • 同じプロパティの中で
  • 条件によって値を切り替えられる

というのが最大の特徴です。

イメージ例

button {
  padding: if(media(any-pointer: coarse): 16px; else: 8px);
}

意味は、

  • もしタッチ操作が主なデバイスなら padding を大きく
  • それ以外なら小さく

という指定になります。

JavaScriptのifと「似ているが、別物」

ここは誤解しやすいポイントです。

CSS の if() は、

  • 変数に代入する
  • 処理を実行する
  • 状態を変更する

といったことは 一切できません。あくまで、条件に応じて「見た目の値」を選ぶための仕組みです。

つまりこれは、

  • JavaScript の代替ではなく
  • CSS設計を整理するための進化

と考えるのが正解です。

ブラウザ対応状況の現実ここからが、実務・教材で最も重要

ブラウザ

Can I Use の情報を見ると、CSS の if() 関数は 現時点では限定的な対応状況です。

対応しているブラウザ(2025年時点)

  • Chrome(比較的新しいバージョン)
  • Edge(Chromium 系)

対応していないブラウザ

  • Safari(macOS / iOS)
  • Firefox
  • 多くのモバイルブラウザ

つまり、「一部のブラウザでは動くが、全体ではまだ早い」という分類になります。

これは、experimental(実験的)〜 early adoption 段階と考えるのが妥当です。

can i use

フォールバック前提でどう考えるべきか

CSS の if() 関数は、現時点では「使えたらラッキー」ではなく「使えない前提で設計する」必要があります。

ここで重要なのは、

非対応ブラウザで壊れないこと

です。

基本的な考え方

  • if()上書き用・強化用
  • まず通常の CSS を書く
  • 対応ブラウザだけが恩恵を受ける

という プログレッシブ・エンハンスメント の発想が前提になります。

※ フォールバックとは?  新しい技術や機能が使えなかった場合に備えて、「代替手段」を用意しておく考え方のことです。

フォールバック例(考え方)

button {
  padding: 8px; /* まずは全ブラウザ共通 */
}

/* if() が使える環境だけ上書き */
button {
  padding: if(media(any-pointer: coarse): 16px; else: 8px);
}
  • 非対応ブラウザ → 8px
  • 対応ブラウザ → 条件に応じて切り替え

壊れない・安全 というのが最大のポイントです。

Sass の if と混同しないために

Sass の if

  • ビルド時 に判定
  • 書き出される CSS は固定
  • 開発者のための条件分岐
@if $theme == dark {
  body {
    background: #000;
  }
}

※ Sass(サス)について
SassはCSSをより書きやすくするための開発用言語です。ブラウザが直接読むのは、Sassから変換された(コンパイルされた)CSSになります。

CSS の if()

  • 表示時(ブラウザ側) に判定
  • 状態・環境に応じて変わる
  • ユーザー環境に依存

目的もタイミングも、まったく別物 です。

そのため、CSSに if が来たから Sass は不要 という話にはなりません。

CSSだけでできること/できないこと

CSSだけで得意なこと

  • 状態による見た目の変化
  • レスポンシブ対応
  • アクセシビリティ配慮
  • 環境差分(hover可否など)

CSSだけでは苦手なこと

  • 複雑なロジック
  • データ処理
  • 永続的な状態管理
  • 動的な分岐制御

if() が入っても、この境界線は 変わりません

  • URLをコピーしました!
Contents