― 新しい if() 関数と、いま使うべきかどうかの判断基準 ―
「CSSに if はない」は、もう半分だけ正しい

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 段階と考えるのが妥当です。

フォールバック前提でどう考えるべきか
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;
}
}
CSS の if()
- 表示時(ブラウザ側) に判定
- 状態・環境に応じて変わる
- ユーザー環境に依存
目的もタイミングも、まったく別物 です。
そのため、CSSに if が来たから Sass は不要 という話にはなりません。
CSSだけでできること/できないこと
CSSだけで得意なこと
- 状態による見た目の変化
- レスポンシブ対応
- アクセシビリティ配慮
- 環境差分(hover可否など)
CSSだけでは苦手なこと
- 複雑なロジック
- データ処理
- 永続的な状態管理
- 動的な分岐制御
if() が入っても、この境界線は 変わりません。

