Переопределение: посещенные переопределения: link: hover: active

рассмотрите эти стили:

a:link { color: blue }
a:visited { color: red }
a:hover { color: green }
a:active { color: black }
#special:link { color: pink }

И теперь эта разметка:

<a href="#">Normal link</a>
<a href="#" id="special">Special link</a>

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

Почему это происходит? Как я могу это исправить? Спасибо.

Ответы

Ответ 1

Я считаю, что это связано с CSS приоритетом.

Поскольку #special - это идентификатор, он затмевает любой применяемый стиль на уровне элемента. (Это можно проверить в Firefox Firebug/Chrome Inspector и как унаследованные таблицы стилей полностью написаны стилем ID).

Хотя, учитывая, что нет "настоящего стиля", применяемого для: active,: visited и т.д. Было бы разумно, что эти стили все равно будут не затронуты. Тем не менее, внесение следующего изменения в ваш наведение, кажется, оттолкнуть его обратно на передачу:

a:hover { color: green !important; }

Ответ 2

Почему это происходит?

Стили для псевдокласса :link применяются ко всем состояниям ссылок, поэтому он включает в себя :hover, :visited и :active

Это то, что я наблюдал с тех пор, как начал использовать CSS несколько лет назад. Я не знаю, как это работает, но я видел, как он работал и ожидал, что он сработает.

Итак, когда вы устанавливаете стиль для #special:link, этот стиль также применяется к #special:hover, #special:visited и #special:active

Обратите внимание, что использование идентификатора здесь не сильно меняется.
Если вы попробуете его с помощью CSS ниже, у вас будут две ссылки розовые... даже для :hover state

a:link { color: blue }
a:visited { color: red }
a:hover { color: green }
a:active { color: black }
a:link { color: pink }

Как я могу его исправить?

Вы можете использовать !important, как было предложено Брэдом, или установить стили разных состояний для #special вместе с регулярными ссылками.

a:link { color: blue }
#special:link { color: pink }
a:visited, #special:visited { color: red }
a:hover, #special:hover { color: green }
a:active, #special:active { color: black }

Ответ 3

Его отягчающие... и порядок имеют значение здесь:

a:hover{
color:green;
}

a:visited{
color:red;
}

Это означает, что невидимые ссылки станут зелеными, когда вы наведите курсор мыши на них, а посещаемые ссылки останутся красными, когда вы на них наведите указатель.

Переключатель:

a:visited{
color:red;
}

a:hover{
color:green;
}

Это означает, что и посещаемые ссылки, и невидимые ссылки станут зелеными, когда вы наведете их. Я ненавижу, что порядок этих свойств изменяет поведение; стиль зависания должен действовать независимо.

a:link{
    color:blue;
}

a.one:hover{
    color:green;
}
a.one:visited{
    color:red;
}

a.two:visited{
    color:red;
}
a.two:hover{
    color:green;
}
<a href=#ddd class=one>One (wont change color on hover when visited)</a> |
<a href=#ddd class=two>Two (always turns green on hover)</a>

Ответ 4

Вот еще один быстрый способ:

Вы можете использовать :not(:hover).

#special:link:not(:hover) { color: pink }

DEMO

Ответ 5

Нет, он не будет использовать другие цвета из-за своего идентификатора, в таком случае вы должны добавить остальные действия и цвета в ID.

Например, ссылка, которую у вас есть, "специальная", когда будет сказано.

Хорошо, я 'a'... link... и мой идентификатор... специальный, поэтому я сохраню специальные параметры.

Вот почему это не изменится.

Надеюсь, что это поможет,