:link、:visited、:hover、:active の記述順序とその覚え方
スタイルシートでa要素のリンクのデザインをする際に、次のように4つの擬似クラスを用いることが多いと思います。
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 とかどうかな?
About this entry
オススメ







No Trackbacks
trackback uri:コメントやトラックバックは承認待ちになる場合がありますので、すぐに反映されない場合はしばらくお待ちください。