【CSSセレクタ】E:visited
『セレクタ:visited』で、リンク先が訪問済みの要素の要素に適用できます。リンク先というものが存在する要素に指定されるものなので、主にa要素に対して使われます。こちらは一般に『擬似クラス』(:visited擬似クラス)と呼ばれます。
尚、他の擬似クラスに上書きされる可能性がありますので、記述する順番に注意が必要です。『:link』、『:visited』、『:hover』、『:active』の順番(『LVHA』の順)で記述するとバッティングせずにスタイルを適用させることができます。
特にこの『:visited擬似クラス』は『:link』よりも後に記述する必要がある点は注意が必要です。
概要
『:visited』擬似クラスを使うと、訪問済みリンクと未訪問リンクに異なるスタイルを適用できます。ただし、ブラウザのプライバシー保護のため、訪問履歴の有無を JavaScript から検出されないよう、適用できるCSSプロパティが制限されています。色関連のプロパティ(color, background-color, border-color, outline-color など)のみが有効です。
擬似クラスの記述順は、CSSのカスケード(後に書いたルールが優先)の影響を受けます。LVHA順(:link → :visited → :hover → :active)で記述することで、意図しない上書きを防げます。
サンプルコード
style.css
/* 基本: 未訪問は青、訪問済みは紫(ブラウザデフォルトに近い) */
a:link { color: #0000ee; }
a:visited { color: #551a8b; }
/* 訪問済みリンクの文字色を変更する(LVHA順で記述) */
a:link { color: red; }
a:visited { color: orange; }
a:hover { color: green; }
a:active { color: blue; }
/* 訪問済みリンクに背景色を設定する */
a:visited { color: gray; background-color: #f0f0f0; }
ブラウザでの表示結果
※以下のサンプルは、ブラウザの閲覧履歴を消去してから確認してみるとよいでしょう。
a:visited { color: red;} /* リンク先が訪問済みのa要素の文字色を赤にする */
<p><a target="_top" href="https://www.google.co.jp/">グーグルさんのページに飛びます。飛んだ後に戻ってくると色が変更されます。</a></p>
a:link { color: blue;}
a:visited { color: gray;}
<p><a target="_top" href="https://www.yahoo.co.jp/">訪問済みになると文字色が灰色に変化します。</a></p>
a:link { color: #0000ee; background-color: transparent;}
a:visited { color: #551a8b; background-color: #f0f0f0;}
<p><a target="_top" href="https://www.wikipedia.org/">訪問済みになると背景色も変化します。</a></p>
よくあるミス
LVHAの順番を守らずにスタイルが上書きされてしまう
擬似クラスは記述順序が重要です。『:visited』を『:link』より前に書くと、CSSのカスケードにより『:link』のスタイルで上書きされ、訪問済みリンクのスタイルが反映されない場合があります。LVHA(:link → :visited → :hover → :active)の順に記述することが推奨されています。
/* NG: :visitedが:linkより前にあるため:linkに上書きされる可能性がある */
a:visited { color: gray; }
a:link { color: blue; }
修正後は次の通りです。
/* OK: LVHA順で記述する */
a:link { color: blue; }
a:visited { color: gray; }
a:hover { color: green; }
a:active { color: red; }
プライバシー制限により一部のプロパティが反映されない
ブラウザのプライバシー保護のため、『:visited』に指定できるCSSプロパティは制限されています。色関連のプロパティ(color, background-color, border-color, outline-color)以外は適用されないことが多いです。
/* OK: 色プロパティは:visitedに適用可能 */
a:visited { color: purple; background-color: #f0f0f0; }
次のコードも別の記述例です。
/* NG: fontやpaddingなどは:visitedに適用されない */
a:visited { font-weight: bold; padding: 5px; }
対応ブラウザ
8 ○
7 ○
6 ○
2 以前 ×
Android Browser
4.4 以降 ○
3 以前 ×※ バージョン情報は MDN に基づいています。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。