CSS: a:link или просто a (без части :link)

Таким образом, мы должны использовать следующий порядок для псевдоклассов привязки CSS:

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

Но мой вопрос: зачем возиться с частью a: link? Скорее, есть ли какое-либо преимущество вышеизложенного (кроме, возможно, ясности) перед:

a { color:red; } /* notice no :link part */
a:visited { color: blue; }
etc.,etc.

person Rob    schedule 14.04.2010    source источник


Ответы (4)


:link выбирает непросмотренные ссылки, то есть: привязки с атрибутом href, которые не посещались браузером (для любого определения, которое поставщик браузера имеет для «посещений»).

Если у него есть :link, то он никогда не будет соответствовать <h1><a name="foo">A foo to be linked to</a></h1>

(Хотя сейчас вам следует использовать <h1 id="foo">A foo to be linked to</h1>.)

Кроме того, это делает более ясным, для чего это.

a         { color: orange }
a:link    { color: blue }    
a:visited { color: indigo }  
a:hover   { color: green } 
a:active  { color: lime }
  <a>my anchor without href</a>
  <br><br>
  <a href="http://somelinkhere.com">my anchor without href</a>

(Они также имеют разные уровни специфичности)

person Quentin    schedule 14.04.2010
comment
Можете ли вы объяснить, что стопы соответствуют части, пожалуйста, немного подробнее? Не уверен, что понимаю. - person Rob; 14.04.2010
comment
a соответствует всем якорям. a:link соответствует якорям, которые являются непосещенными ссылками. a:visited соответствует якорям, которые являются посещенными ссылками. <a name="foo"> — это анкор, который не является ссылкой. - person Quentin; 15.04.2010
comment
@Квентин: Правда? Я не могу найти это в характеристиках. - person feklee; 27.01.2013

Просто «a» относится ко ВСЕМ возможным ссылкам (непосещенным, посещенным, наведенным и активным), тогда как «a: ссылка» относится только к обычным непосещенным ссылкам.

Если вы используете «a» вместо «a: ссылка», вы устанавливаете CSS по умолчанию для ВСЕХ ссылок на то, на что установлено «a». В этом конкретном случае, поскольку вы указываете каждый возможный псевдокласс, по существу не имеет значения, говорите ли вы «a: link» или просто «a».

Итак, в первой группе, где вы записываете все псевдоклассы (a:link, a:visited и т. д.), вы указываете CSS для каждого возможного случая ВНУТРИ "a"

a:link    { color: red }     //set unvisited links to red 
a:visited { color: blue }    //set visited links to blue
a:hover   { color: yellow }  //set hovered links to yellow
a:active  { color: lime }    //set active links to lime

Во второй группе, где вы просто пишете «а», вы фактически устанавливаете CSS по умолчанию для всех ссылок на то, что вы пишете в первой строке, а затем переопределяете CSS для других псевдоклассов.

a    { color: red }          //set ALL links to red!
a:visited { color: blue }    //hm, never mind, let's set visited links to blue
a:hover   { color: yellow }  //hm, never mind, let's set hovered links to yellow
a:active  { color: lime }    //hm, never mind, let's set active links to lime
person Community    schedule 14.04.2010
comment
:link соответствует не только непросмотренным ссылкам, а всем ссылкам. - person OdraEncoded; 07.11.2013
comment
@OdraEncoded :link не всегда соответствует всем ссылкам, например. :visited и a имеют приоритет (именно в таком порядке). :link будет соответствовать только всем ссылкам (в некоторой степени), если ни :visited, ни a не совпадают. Поэтому более вероятно, что :link будет соответствовать "только" непросмотренным ссылкам. - person WynandB; 08.11.2013
comment
@Wynand :link всегда соответствует всем ссылкам. Да, :visited имеет более высокий приоритет, но если есть :link и :visited, то оба совпадают, и эффекты селектора :visited применяются после эффектов селектора :link. Как и в любом другом случае совпадения с несколькими селекторами. В CSS не бывает такого, чтобы один селектор не совпадал, потому что существует другой селектор. jsfiddle.net/z9X54/1 - person OdraEncoded; 08.11.2013
comment
@OdraEncoded Я думаю, что мы на самом деле говорим здесь одно и то же. Я неверно истолковал ваше понимание и решил, что вы предположили, что :link имеет приоритет над :visited. Кстати, я понимаю концепцию каскадных таблиц стилей. - person WynandB; 11.11.2013

http://www.w3schools.com/css/css_pseudo_classes.asp

:link — это когда ссылка не посещена. Итак, когда есть якорь с атрибутом href, и пользователь никогда не был на странице за якорем.

person remi bourgarel    schedule 14.04.2010
comment
Это не отвечает на вопрос. - person Quentin; 15.04.2010
comment
@Quentin На самом деле, этот ответ точен. - person WynandB; 18.09.2013
comment
@Wynand нет, это не так, :link соответствует большему количеству непросмотренных гиперссылок. - person OdraEncoded; 07.11.2013
comment
@OdraEncoded Это зависит. Если вы предполагаете, что :link соответствует как посещенным, так и не посещенным гиперссылкам в всех случаях, проверьте его в сочетании с :visited и a. Вы должны увидеть, что сопоставлены не более чем непросмотренные гиперссылки. - person WynandB; 08.11.2013

Селектор :link — это селектор псевдоэлементов для гиперссылок, будет найден любой элемент, являющийся гиперссылкой. Селектор a будет соответствовать «только» якорным элементам.

Обычно каждый элемент a также является гиперссылкой, и я сам не знаю, как создать гиперссылку в HTML без использования привязки, поэтому вы, вероятно, можете использовать любой из них в большинстве случаев.

Однако использование только a будет соответствовать якорным элементам, которые не являются гиперссылками. Например, элемент привязки, написанный таким образом <a name=sign-up>Sign up form</a>, не будет соответствовать селектору псевдоэлемента гиперссылки :link, но будет соответствовать селектору a.

person OdraEncoded    schedule 07.11.2013