[4] [DFN[[CODE(CSS)@en[:link]]]] [[擬似クラス]]は、未訪問の[[リンク]]を表します [SRC[>>3]]。
[DFN[[CODE(CSS)@en[:visited]]]] [[擬似クラス]]は、訪問済みの[[リンク]]を表します [SRC[>>3]]。

* 仕様書

[REFS[
- [3] [CITE@en[Selectors Level 3]] ([TIME[2011-09-29 22:16:17 +09:00]] 版) <http://www.w3.org/TR/selectors/#the-link-pseudo-classes-link-and-visited>
- [29] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2011-11-12 00:22:26 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#pseudo-classes>
]REFS]

* 意味

[5] [CODE(CSS)@en[[[:link]]]] は未訪問の[[リンク]]を表し、 [CODE(CSS)@en[[[:visited]]]]
が訪問済みの[[リンク]]を表します。両者は互いに排他的です。
[[利用者エージェント]]は訪問してから十分時間が経った[[リンク]]を未訪問扱いとして構いません。
また両者を区別することにより[[利用者]]の許諾なく訪問済み如何を[[著者]]が判定できてしまうため、
すべてを未訪問の[[リンク]]として扱うなどの方法をとって、かつ両者を区別して[[レンダリング]]したりしても構いません。
[SRC[>>3]]

* ハイパーリンク始点アンカー

[15] これらの[[擬似クラス]]は[RUBYB[[[ハイパーリンク始点アンカー]]]@en[hyperlink source anchor]]に適用されます。

;; [16] ということが [[CSS2]] では明記されていません。また [[Selectors3]] では言及すらされていません・・・。

[17] 何が[[ハイパーリンク始点アンカー]]であるかは[[文書言語]]によります [SRC[>>14]]。

** HTML

[30] [[HTML]] では次の[[要素]]が [CODE(CSS)@en[[[:link]]]], [CODE(CSS)@en[[[:visited]]]]
のいずれかに[[一致]]しなければ[['''なりません''']] [SRC[>>29]]。
- [CODE(HTMLe)@en[[[a]]]] [[要素]]で [CODE(HTMLa)@en[[[href]]]] [[属性]]のあるもの
- [CODE(HTMLe)@en[[[area]]]] [[要素]]で [CODE(HTMLa)@en[[[href]]]] [[属性]]のあるもの
- [CODE(HTMLe)@en[[[link]]]] [[要素]]で [CODE(HTMLa)@en[[[href]]]] [[属性]]のあるもの

** XLink

[18] [[XLink]] では[[探索]]が可能な[[局所要素]]であって [CODE(XMLa)@en[[[actuate]]]] が
[CODE(XML)@en[[[onRequest]]]] であるかのように扱われるものが[[ハイパーリンク始点アンカー]]として扱われるべきだと提案されています [SRC[>>1]]。

;; [19] なぜ [[XLink]] を規定する仕様書がこれを規定せずに提案しているに留まっているのか謎ですが・・・。

[35] 現在の [[Webブラウザー]]は [[SVG]] や [[MathML]] の一部として以外 [[XLink]]
に対応していないので、 [CODE(CSS)@en[[[:link]]]] や [CODE(CSS)@en[[[:visited]]]]
もその場合のみ適用されます。

;; [36] 以前は [[Gecko]] はそれ以外の[[単純リンク]]にも対応していたので、これら[[擬似クラス]]適用されていたかもしれません
(未確認)。

[REFS[
- [37] [[SVG]] の [CODE(XMLa)@en[[[xlink:href]]]] [[属性]]の例
<http://suika.fam.cx/~wakaba/-temp/test/xml/xlink/selectors-link-2.xml>
]REFS]

* 既読管理

[49] [[既読URLリスト]]参照。

* 歴史

** CSS1

[REFS[
- [27] [CITE[Cascading Style Sheets: a draft specification]] ([TIME[1995-10-07 10:35:41 +09:00]] 版) <http://www.w3.org/Style/CSS/draft4.html#pseudo>
- [22] [CITE[Cascading Style Sheets, level 1]] ([TIME[2008-04-10 02:23:32 +09:00]] 版) <http://www.w3.org/TR/CSS1/#anchor-pseudo-classes>
]REFS]

[28] これらの[[擬似クラス]]は >>27 で追加されました。

[23] [[CSS1]] では [CODE(CSS)@en[[[:link]]]], [CODE(CSS)@en[[[:visited]]]], [CODE(CSS)@en[[[:active]]]]
の3つのいずれか1つの状態であるとされていました。

;; [26] これは [[HTML]] の [CODE(HTMLe)@en[[[body]]]] [[要素]]の[[属性]]に基づく当時の[[Webブラウザー]]の処理モデルに由来しています。

[24] [[CSS1]] では [[HTML]] の [CODE(HTMLe)@en[[[a]]]] [[要素]]の [CODE(HTMLa)@en[[[href]]]]
[[属性]]があるものに適用されるとされていました。

** CSS2

[REFS[
- [14] [CITE@en[Selectors]] ([TIME[2011-06-07 13:09:52 +09:00]] 版) <http://www.w3.org/TR/CSS2/selector.html#link-pseudo-classes>
]REFS]

[25] [[CSS2]] では [[HTML]] 以外への適用も考慮し、適用対象は[[マーク付け言語]]によって決まるとされました。

** XLink

[REFS[
- [1] [CITE@en[XML Linking Language (XLink) Version 1.1]]
([TIME[2008-04-04 00:59:29 +09:00]] 版)
<http://www.w3.org/TR/xlink11/#intro>
]REFS]

[33] [[XLink]] 仕様書は [[XLink]] への適用について言及していました。

** 選択子3

[REFS[
- [32] [CITE@en[Selectors Level 3]] ([TIME[2011-09-29 22:16:17 +09:00]] 版) <http://www.w3.org/TR/selectors/#the-link-pseudo-classes-link-and-visited>
]REFS]

** HTML

[REFS[
- [31] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2011-11-12 00:22:26 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#pseudo-classes>
]REFS]

[34] [[HTML]] 仕様書は [[HTML]] の[[要素]]への適用について言及しています。

* 不思議解釈

[21] [[HTML]] の[[属性名]]に引きずられて [CODE(CSS)@en[[[:vlink]]]] [[擬似クラス]]が存在しているとする解説もあります。

* 関連

[20] 元々 [[HTML]] の [CODE(HTMLa)@en[[[link]]]] [[属性]]や [CODE(HTMLa)@en[[[vlink]]]]
[[属性]]に相当する機能として導入されたようです。

* メモ

[2] [CITE@ja[CSS によるブラウザ履歴の漏えいを防ぐ取り組み « Mozilla Developer Street (modest)]]
([TIME[2010-05-01 01:24:29 +09:00]] 版)
<https://dev.mozilla.jp/2010/04/plugging-the-css-history-leak/>

[8] [CITE[Bug 147777 &#8211; :visited support allows queries into global history]] ([CODE[2008-10-23 23:45:21 +09:00]] 版) <https://bugzilla.mozilla.org/show_bug.cgi?id=147777>

[9] [CITE@ja[「visited疑似クラスのビーコンを拾うサービスが登場」@水無月ばけらのえび日記]] ([TIME[2008-10-23 21:33:55 +09:00]] 版) <http://bakera.jp/ebi/topic/3298>

[10] [CITE@ja-JP[高木浩光@自宅の日記 - 楽天CERTに対するブラウザの脆弱性修正を阻害しない意思確認]] ([[高木浩光]] 著, [TIME[2008-12-14 23:26:14 +09:00]] 版) <http://takagi-hiromitsu.jp/diary/20081213.html#p01>

[11] [CITE@en-US[Preventing attacks on a user's history through CSS :visited selectors]]
([TIME[2010-04-07 13:03:44 +09:00]] 版)
<http://dbaron.org/mozilla/visited-privacy>

[12] [CITE@en-us[Privacy and the :visited selector - MDC]]
([TIME[2010-06-01 08:08:04 +09:00]] 版)
<https://developer.mozilla.org/en/CSS/Privacy_and_the_%3avisited_selector>

[13] [CITE@en[HTML5 Revision Tracker]]
([TIME[2010-08-03 23:55:56 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=5229&to=5230>

[7] [CITE[IRC logs: freenode / #whatwg / 20110202]]
( ([TIME[2011-03-19 11:10:11 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20110202>


[38] [CITE@en-US[Preventing attacks on a user's history through CSS :visited selectors]]
( ([TIME[2010-04-07 04:03:44 +09:00]] 版))
<http://dbaron.org/mozilla/visited-privacy>

[39] [CITE@en[Web Applications 1.0 r2778 Defined how pseudo-classes match HTML concepts. Redid how rtl/ltr changes are marked. Stopped <legend> centering for <figure>. Removed <multicol> support. Removed <basefont> support. Removed obsolete notes. Fixed minor typos.]]
( ([TIME[2009-02-11 16:36:00 +09:00]] 版))
<http://html5.org/r/2778>

[40] [CITE@en[Web Applications 1.0 r2778 Defined how pseudo-classes match HTML concepts. Redid how rtl/ltr changes are marked. Stopped <legend> centering for <figure>. Removed <multicol> support. Removed <basefont> support. Removed obsolete notes. Fixed minor typos.]]
( ([TIME[2009-02-11 16:36:00 +09:00]] 版))
<http://html5.org/r/2778>

[41] [CITE@en[Web Applications 1.0 r8865  links should be cursor:pointer]]
( ([TIME[2014-11-27 09:31:00 +09:00]] 版))
<https://html5.org/r/8865>

[FIG(quote)[
[FIGCAPTION[
[6] [CITE[IRC logs: freenode / #whatwg / 20150529]]
([TIME[2015-05-30 11:27:51 +09:00]] 版)
<http://krijnhoetmer.nl/irc-logs/whatwg/20150529>
]FIGCAPTION]

> 
> # '''['''14:21''']''' <IZh> Hi. I read about one-time possible privacy attack allowing to discover, what sites user visited. The idea is to measure time of loading favucon.ico from various sites. If it is in a cache, it will load sifnificantly faster. What you think?
> # '''['''14:23''']''' <IZh> And the time could be compared with favicon.ico?someRandomValue
> # '''['''15:04''']''' <gsnedders> IZh: such things have been vaguely plausible for years, and somewhat known of

]FIG]


[FIG(quote)[
[FIGCAPTION[
[42] [CITE@ja[:visited - CSS | MDN]]
( ([TIME[2015-09-06 18:48:23 +09:00]]))
<https://developer.mozilla.org/ja/docs/Web/CSS/:visited>
]FIGCAPTION]

> プライバシー上の理由で、この擬似クラスで選択される要素から適用できるスタイルには、ブラウザが厳しい制限をかけています: color、background-color、border-color、border-bottom-color、border-left-color、border-right-color、border-top-color、outline-color、column-rule-color、fill、stroke だけです。アルファ値が無視されることにも注意してください: 未訪問のリンクのルールのアルファ値が代わりに使われます(不透明度が 0 の場合を除きます。この場合指定した色全体が無視され、未訪問のルールの色が使われます)。
> 色を変えることができますが、getComputedStyle メソッドは嘘をついて、常に未訪問のリンクの色を返します。

]FIG]


[43] [CITE@ja[プライバシーと :visited セレクタ - CSS | MDN]]
( ([TIME[2014-03-25 21:22:37 +09:00]]))
<https://developer.mozilla.org/ja/docs/Web/CSS/Privacy_and_the_:visited_selector>