【入門編】 only-of-type疑似クラスの条件 – CSS実践ガイド

こんにちは!フロントエンドの現場を長年駆け抜けてきたチーフアーキテクトの私です。

CSSを書き始めたばかりの頃って、セレクタの海に溺れそうになりますよね。「あっちを赤くしたいのに、こっちまで赤くなっちゃった……」なんて、誰もが通る懐かしい道です。

今回は、そんなCSSの数あるセレクタの中でも、ちょっと名前がカッコよくて、いかにもプロっぽさの漂う「`:only-of-type(オンリー・オブ・タイプ)」という疑似クラスを取り上げます。

「名前からして難しそう……」なんて身構えなくて大丈夫ですよ!
実はこれ、私たちの日常生活の中にある「あるルール」と全く同じなんです。一緒に優しく紐解いていきましょう。

—

1. `:only-of-type` って、一体どんな子?

まずは、この難しそうな名前を日本語に翻訳してみましょう。

  • only = 唯一の、ただひとつの
  • of-type = 〜の種類の

つまり、「親御さん(親要素)の中で、その種類のタグが『ただひとつだけ』存在しているとき」にだけ、こっそりお返事をしてスタイルを適用してくれる、ちょっと気まぐれで健気なヤツなんです。

身近な例え話:クラスに「眼鏡っ子」が1人だけいたら?

想像してみてください。
とある学校のクラス(親要素)があります。そこに色々な生徒(子要素)がいます。

男子も女子もたくさんいますが、「赤い眼鏡をかけた生徒(特定のタグ)」が、そのクラスの中に「たった1人しかいない」とします。

このとき、先生がこう言いました。
「クラスの中で、眼鏡をかけている人が1人しかいないなら、その人にだけ特別な席をあげよう」

これがまさに `:only-of-type` の世界です!
もしクラスに眼鏡っ子が2人以上いたら、この特別ルールは発動しません。「他にもいるからダメね」とスルーされてしまいます。

—

2. 実際のコードで動きを見てみよう

百聞は一見に如かず。実際にコードを見てみましょう。
今回は、よくある「カード型のボックス(記事やプロフィール)」の中に、テキストや画像が入っているシチュエーションを想像してください。

サンプルHTML

重要なお知らせ

システムのメンテナンスを行います。

ご迷惑をおかけしますが、よろしくお願いいたします。

CSSの書き方

さて、ここで「段落(`

`タグ)が、そのカードの中にぽつんと1つだけあるときだけ、文字の色をちょっと目立たせる(青色にする)」という魔法をかけてみましょう。

/ カードの中にある

タグをターゲットにする /
.card p:only-of-type {
color: #0066cc; / 爽やかな青色にするよ /
font-weight: bold; / ついでに太字にしよう /
}

どんな結果になる?

  • パターンAのカード:

中にある `

` タグは1つだけなので、条件クリア! 文字が青色の太字になります。

  • パターンBのカード:

中にある `

` タグが「2つ」あります。「ただひとつだけ」というルールから外れてしまうため、このCSSは適用されず、普通の黒い文字のままになります。

「あ、これだけなんだ!」って思いませんでしたか?
そうなんです。仕組み自体はとってもシンプルなんですよ。

—

3. ここでよくある「うっかりミス」と優しい解説

現場で後輩から「センパイ、`:only-of-type` が効かないんです……」と泣きつかれることがよくあります。大体原因は決まっています。初心者のあなたが同じ罠にハマらないよう、こっそり教えちゃいますね。

罠その1:親要素の「種類」を見てることを見落とす

`:only-of-type` は、「同じ種類のタグの中でいくつあるか」を数えます。

例えば、こんなHTMLがあったとします。

見出しだよ

段落だよ

ここにスパンタグがあるよ

ここで `.box p:only-of-type` と書いたとします。
「`

`タグは、`

`や``と混ざってるけど、` `自体は1個だけだから効くはず!」 ……大正解です!これならちゃんと効きます。` `や``は別の種類(別種族)なので、` `の数を数えるときにはカウントされないからです。 逆に、同じ ` ` が2つあったら、もちろん動きません。 「種類(type)ごとにカウントする」という名前の由来を思い出してあげてくださいね。 罠その2:別のタグに包まれているとき

私はここにいます

この場合、`

`タグの親御さんは `.box` ではなく、直上の `

` になります。
「えっ、`.box` の中にあるから効くと思ったのに!」と焦りがちですが、CSSは直属の親しか見てくれません。家族の距離感にちょっと厳しいんですね。

—

4. どんなときに使うと便利?(実務での使いどころ)

「理屈はわかったけど、いつ使うの?」という声が聞こえてきそうです。

実務でよくあるのは、「CMS(WordPressなど)で、ユーザーが自由に入力するブログのパーツ」をスタイリングするときです。

例えば、画像(``)が記事の中に1枚だけポンと貼られているときは、きれいに真ん中に大きく配置したい。でも、何枚も並んでいるときは左詰めで並べたい……そんなとき、`:only-of-type` を使えば、わざわざ追加のクラス(`class=”center-image”`など)をHTMLに書き込まなくても、CSSだけで自動的に判定してレイアウトを変えることができます。

HTMLを汚さずに、CSSだけでスマートにデザインを制御できる――これぞ、私たちフロントエンドエンジニアの密かな快感だったりします。

—

さいごに

CSSの疑似クラスは、最初は呪文のようで難しく感じるかもしれません。
でも、今日お話しした `:only-of-type` のように、「あぁ、要するにこういうことね」と身近なイメージに置き換えてみると、途端に可愛らしい相棒に思えてきます。

もし実際の制作で「あれ、うまく動かないな?」と思ったら、親要素の範囲は合っているか、タグの種類を勘違いしていないか、そっとコードを覗いてあげてくださいね。

あなたのWeb制作の旅が、少しでも楽しく、軽やかなものになりますように。
チーフアーキテクトの私でした。また次の教室でお会いしましょう!

コメント

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