CSSのif構文は夢を見るか
2025/01/30(木)18:00-19:00
フロントエンド月1LT会
※これから紹介する構文はまだ実装段階ではないので大きく構文が変わるまたはそもそも実装されない可能性もあります
※Chrome137にはいった
Chrome 137 の新機能 | Blog | Chrome for Developers
https://gyazo.com/8e53f0612584bdc5aaf5c63a9841a9a5
CSSでif文が書けるようになる未来が来るかも??
Intent to Protypeは仕様、設計が書かれている段階
@intenttoship: Blink: Intent to Prototype: CSS if() function
https://t.co/TXr7Lvol7D
Explainer
Explainer: CSS if() function - Google Docs
code:css
if(
<if-condition>: <declaration-value>? ;
<if-condition>: <declaration-value>? ;
…
<if-condition>: <declaration-value>? ;
)
先頭から順番に条件を評価して、最初にtrueになった条件に対応するdeclaration-valueを返す
全部falseなら何も返さないという挙動
if-conditionの中には以下を含めることができる
@supports
@media
カスタムプロパティ
多分こんな感じ(ダークテーマ)
code:css
<style>
/* custom property */
:root {
--color: black;
}
/* dark theme */
.dark {
--color: black;
}
/* light theme */
.light {
--color: white;
}
.box {
color: var(--color);
/* if() function */
background-color: if(
style(--color: white): white;
else: black
);
padding: 10px;
margin: 5px 0;
}
</style>
<div class="box dark">Dark Theme</div>
<div class="box light">Light Theme</div>
多分こんな感じその2(レスポンシブ、メディアクエリ)
code:css
<style>
.box {
width: 200px;
height: 100px;
/* if() function */
background-color: if(
media(max-width: 767px): red;
else: blue
);
color: #fff;
display: flex;
justify-content: center;
align-items: center;
margin: 20px;
}
</style>
うーんいいじゃん!
https://gyazo.com/a417488affeac221eab7d32173cdde27
本当ですか?
セレクタレベルだったら:not()や:has()がある
メディアクエリならContainer Queries(コンテナークエリー)がある
Sassのif文を書けるようにしたいだけにも見える
Sass: @if and @else
CSSに条件を持ち込むことへの抵抗
そのif文自体が間違っているかの検知はCSS上ではできなそう(だってCSSだもん!)
複雑な条件を入れ込むことも可能でそうすると可読性が低くなりそう
一方でテーマなどの切り替えはif文で楽に書けそう
夢をみるか?
とてもおもしろいとは思うけど用法用量を守って正しくお使いくださいって感じ
SCSSのときにあったネストするのは1回までみたいな暗黙のルールが生まれそう
昨今テーマなどを管理する方法が充実しているので、そこまで必要性を感じていない。
賛否両論があることはいいことなので注目はします!
ご清聴ありがとうございました🙌🙌
追記
Intent to Ship: CSS if() function
Chrome136でShipされる
#CSS