:link、:visited、:hover、:active の記述順序とその覚え方

スタイルシートでa要素のリンクのデザインをする際に、次のように4つの擬似クラスを用いることが多いと思います。

a:link { color: blue; }
a:visited { color: purple; }
a:hover { color: red; }
a:active { color: yellow; }

実はこの4つの擬似クラスの記述順序には注意が必要で、上記のように link、visited、hover、active の順番で記述しないと意図した結果にならなかったりします。この順序についてちょっと調べてみたので、まとめてみたいと思います。

なぜこの順番じゃなければダメなのか?

実践Web Standards Design(通称ホップ本)には、次のように書かれています。

:hover擬似クラスと:active擬似クラスは一連の動作であるので、スタイルシート内でもこの順番で記述しないと有効にならない点に注意してください。

3章 3.3/CSS管理のコツ」より

擬似クラスの記述順序には注意が必要です。(略)常に最後の指定で上書きされるということに注意し、link、visited、hover、active の順番で記述しておくと問題ないでしょう。逆に、すでに訪問済みのリンクは背景画像を変えたくないということであれば、visited を最後に記述するとよいでしょう。

7章 16/背景画像を利用して訪問済みリンクを一工夫する」より

擬似クラスの記述順序にルールがあるというのを知ったのは、実はこの本がきっかけでした。それまでは「hover が効かない!」とか「訪問済みのリンクの色が変わらない!」とかいった問題に出くわしてハマッた経験が何度かあったので、書く順番が原因だったことがわかったときは思わず「そうだったのか!」とひざを打ってしまいました。

で、勢いづいてもう少し調べてみると、CSS の権威である Eric Meyer 氏のサイトでも同じ内容に関する解説を見つけました。

» Link Specificity – meyerweb.com

カンタンにまとめてみると、

  • セレクタの固有性(specificity)は4つとも同じ。
  • なので、最後に書かれたものから優先的に適用される。
  • 例えば、link、active、hover、visited の順番で記述しているとすると・・・
  • 未訪問リンクの場合は、active を hover が打ち消すので active は無効になる。
  • 従って、active は hover の後ろに記述しなければならない。
  • 訪問済みリンクの場合は、active も hover も一番最後の visited が打ち消してしまって無効になる。
  • 従って、visited は hover や active の前に記述しなければならない。
  • つまり、link、visited、hover、active の順番で書くべし。
  • ちなみに、link と visited は打ち消しあうことがないので順番はどっちでもOK。
  • link はあくまで「未訪問(unvisited)」のリンクのみに適用される擬似クラスで、「リンク全般」に適用されるものじゃないので要注意。
  • link じゃなくて unvisited にすればいいのにね。

順番の覚え方

海外では、この記述順序ルールを link-visited-hover-active の頭文字をとって「LVHA」と言うようです。ちょっと覚えづらいなぁと思っていたのですが、たまたま見かけた海外のブログにうまい覚え方が紹介されていました。

» How To Remember The Order of Selectors: LOVE and HATE – CSS Tricks

Just think ‘LOVE’ (LV) and ‘HATE’ (HA)….

LOVE and HATE かぁ。ちょっと意味深だし覚えやすいですね。

他にも「こんなふうに覚えてるよ」というのがあれば是非教えてください。live happily とかどうかな?

:link、:visited、:hover、:active の記述順序とその覚え方」への5件のフィードバック

  1. Yoshihide

    > LvHA(れべるえいちえー)
    Lvを「レベル」と覚えるのはいいですね!
    他の人はいかがでしょう?意外とそのまま「えるぶいえいちえー」と覚えてたりするのかな?

    返信
  2. リョウ

    ラブ?ハァ!?(愛だって?何言ってんの!?)
    ↓↓ ↓↓
    L V H A

    こんな感じで覚えるといいよってどこかのサイトで言ってるのを見て以来、この覚え方が抜け切れません(笑)

    返信
  3. Yoshihide

    > ラブ?ハァ!?(愛だって?何言ってんの!?)

    これは頭に焼き付いちゃいますね。
    LOVE and HATE より覚えやすいかも。

    返信
  4. HeavenHades

    なるほど、やっと疑問がとけました。そういうことだったんですね。
    リンク関連は順番にも気を配らないといけなかったんですね。
    どうもありがとうございました。

    返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>