:link, :visited


It seems that :link and :visited have confusing implications due to the
fact that they are mutually exclusive.

:link applies to links. This is straightforward and as it should be.  
However :link does not apply to links that have been traversed by the user
agent (visited), even those where the endpoint of the link was reached by
some other route. This behaviour undermines the meaning of :link and also
makes no sense by itself, as "visited" tells you nothing about the element
it applies to in the way that "root" or "nth-child" does.

Consider :link and :link(visited). The first would *always* apply to
anything that was a link, whether the target of the link had been visited
or not. The second would apply to links where the target had been visited.  
It clearly still applies to link elements, not just any element, and the
thing that has been visited is the link, not the element. This is
extensible to :link(unvisited), :link(local), :link(external),
:link(cached), :link(self), or whatever other crazy values people may be
interested in (cached links and self links were recently brought up on the
list, and making a new pseudo-class like :cached or :self would only serve
to further muddy the waters. What does it mean for an element to be
cached? Or self?).

Sadly, perhaps it is too late to change the mutually exclusive nature of
:link and :visited, given their implementation and use over the years. A
compromise could be to deprecate :link and :visited and introduce :link()
and :link(visited), which would not invalidate existing implementations.

Just a thought :)

Michael Day

YesLogic Pty. Ltd.

Received on Sunday, 20 April 2003 22:42:02 UTC