I came across this issue when testing a stylesheet across different browsers, including IE6 (yes, I know..)
<head>
<style>
a:link, a:visited, a:hover, a:active { font-weight: bold; color: #000; text-decoration: underline }
.myclass a { color: red; text-decoration: none; }
</style>
</head>
<body>
<p>This is a <a href="1">test</a></p>
<div class="myclass">
<p>This is a <a href="2">test</a></p>
</div>
</body>
Results:
- In IE6, the
.myclass arule only applies to the unvisited link state - In other browsers (FF, Chrome), the
.myclass arule applies to all link states
I believe that IE6 is wrong and that .myclass a, with no pseudo-classes specified, should apply to all link states. However I came across this SO question where it says that a is equivalent to a:link. This would match the behaviour in IE6. However I cannot find any official reference confirming this.
Which one is right?
Update:
As noted in the comments, the accepted answer to the question referenced above has since been updated.
The other browsers are right; IE6 is wrong.
The selector
ashould match any<a>elements, whilea:linkonly matches<a>elements that are unvisited hyperlinks (the HTML 4 document type defines hyperlinks as<a>elements with ahrefattribute). Nowhere does it state in either specification thatashould automatically translate toa:linkor vice versa.Since there’s no such translation going on, your two CSS rules have equally specific selectors (your class selector shares equal specificity with each of your pseudo-classes). So, your second rule is supposed to override the first rule for any
<a>elements withindiv.myclass, regardless of their link state, thereby making it always red and with no text decoration.By the way, IE7 also fails to apply the
font-weight: boldstyle when you test with an<a>element indiv.myclassthat isn’t a link, even though it’s supposed to as there is no overridingfont-weightstyle in your second rule: