【入門編】 :has() リレーショナル疑似クラス – CSS実践ガイド

こんにちは!フロントエンドの現場で日々コードと格闘しているチーフアーキテクトです。

CSSを学び始めたばかりの皆さん、毎日お疲れ様です。「CSSって、自分の思い通りに動いてくれない!」と頭を抱える瞬間、ありますよね。大丈夫です、私も最初はそうでした。

今日は、そんな皆さんのCSSライフを劇的に楽にする、「CSS界の革命児」こと `:has()` という魔法のセレクタを紹介します。「親要素を操作したいのに、CSSにはそんな機能がない…」と涙を飲んだ夜とも、これでお別れです。

—

1. `:has()` って何? 身近な例えで考えてみよう

これまでのCSSは、「親から子へ」命令を伝えるのは得意でした。「リストの中の文字を赤くして」というのは簡単ですよね。でも、「もしこのリストの中に『おすすめ』っていうアイコンが入っていたら、枠線を金色にして目立たせたい!」というような、「中身を見てから親の見た目を決める」ことは、実はとても大変でした。

ここで登場するのが `:has()` です。これを例えるなら、「中身を覗き込むスパイ」です。

  • 「バッグの中にお財布が入っているか確認して、入っていたらバッグを特別に光らせる」
  • 「お皿の中にケーキが乗っているか確認して、乗っていたらお皿の縁を可愛く装飾する」

こんなふうに、「中身(子)の状況を見て、親の姿を変える」ことができる。それが `:has()` の正体です。

—

2. なぜこれが「革命」なのか?

今まで、こうした「中身の条件による変化」を実現するには、JavaScriptというプログラミング言語を使って、「中身があるかチェックして、あったらクラス名を付け替えて…」という面倒な準備が必要でした。

でも、`:has()` ならCSSだけで完結します。ブラウザが自動的に「あ、中身が変わったからスタイルも更新しなきゃ!」と頑張ってくれるんです。これ、本当にすごいことなんですよ。

—

3. さっそく書いてみよう!実用的なサンプル

例えば、よくある「カード型レイアウト」で考えてみましょう。「画像があるカードだけ、ちょっと背景色を変えておしゃれにしたい」という場合です。

写真

素敵な風景です

テキストだけのシンプルなカードです

これまではJavaScriptが必要でしたが、今はこう書くだけです。

/ 「imgタグを持っている .card だけ」スタイルを変更する /
.card:has(img) {
border: 2px solid #ffcc00; / 金色の枠線をつける /
background-color: #fffdf0; / 背景をほんのりクリーム色に /
box-shadow: 0 4px 10px rgba(0,0,0,0.1); / 少し浮き上がらせる /
}

たったこれだけ。「もし img があったら…」という条件を `:has()` のカッコの中に入れてあげるだけで、親である `.card` が反応してくれます。どうですか?シンプルすぎて驚きませんか?

—

4. つまずきやすいポイント:焦らなくて大丈夫

`:has()` を使うときに一つだけ覚えておいてほしいことがあります。それは、「まだ対応していないブラウザもあるかも?」という点です。

ただ、今のモダンなブラウザ(Chrome, Edge, Safariなど)はほとんど対応しています。現場でも、「もし対応していなかったらどうしよう?」と不安になることがありますが、そんな時は「もし使えなくても、見た目が少しシンプルになるだけ」というデザインにしておけば、ユーザーは誰も困りません。

「完璧を目指さず、まずはできるところから使ってみる」。これが、プロの現場で生き残るコツですよ。

—

まとめ:あなたの武器を一つ増やそう

`:has()` は、これまでの「CSSの限界」を軽々と飛び越えるツールです。

  • 「中身を覗き込んで、親を変える」という直感的な操作ができる。
  • JavaScriptを書かなくても、複雑な条件分岐ができる。
  • コードがスッキリして、後から見直した時も「何をしたいのか」が一目でわかる。

最初は難しく感じるかもしれませんが、まずは「これ、`:has()` でできるかも?」と頭の片隅に置いておくだけで十分です。CSSは、触れば触るほどあなたの味方になってくれます。

これからも、一緒に少しずつ、CSSの旅を楽しんでいきましょう!応援していますよ。

コメント

タイトルとURLをコピーしました