Я думаю, что это из-за специфики; span
(.button) менее специфичен для ссылки, чем a:link
, поэтому применяются стили a:link
(правильно в соответствии со спецификацией: http://www.w3.org/TR/CSS2/cascade.html).
Если вы хотите переопределить стили a:link
для этой одной кнопки (или ... ну, любым другим способом аналогичным образом), добавьте класс к тегу <a>
, а не к его родительскому элементу.
Хотя вы можете сойти с рук:
.button > a:link {/* styles */}
Что должно стать конкретным, поскольку этот <a>
является потомком диапазона класса .button
.
Edit:
Стоит отметить, что селектор '>
' применяется только к непосредственным потомкам, поэтому это повлияет на a
внутри элемента класса .button
, однако a
внутри div в свою очередь внутри элемент класса .button
не будет затронут.
Также этот селектор не поддерживается IE (конечно, ниже версии 7, и я не знаю о версии 7 - или, действительно, версии 8). Вместо этого можно использовать оператор '*
':
.button * a:link {/* styles */}
с учетом того, что хотя это поддерживается, я думаю, в IE, по крайней мере, после версии 5.x, оно немного шире, так как оно нацелено на все a
внутри элемента класса .button
, независимо от любые промежуточные элементы, и все равно, вероятно, будет менее конкретным, чем любое правило, применяемое к a:link
s.