Open
Description
无法修改颜色的 <a>
标签
有一天,我想重新定义 标签的样式,因为 HTML5 里 href 不再是必要属性,所以我想让有 href 和没有 href 的元素使用不同的样式,于是写了下面一段代码
<style>
a {
color: #333;
text-decoration: none;
}
a[href] {
color: #00cccc;
text-decoration: underline;
}
</style>
<a href="baidu.com">这是一个有 href 的 <a> 标签</a>
<a>这是一个没有 href 的 <a> 标签</a>
https://codepen.io/AlexZ33/pen/VwwqXYz
测试下,没啥问题,然后我就很开心的用它来初始化 a 标签了。
直到有一天,我想把某个链接中的文字改成红色,然后我加了一段代码
<style>
.red {
color: red;
}
</style>
<a href="baidu.com" class="red">这是一个应该显示成红色的 <a> 标签</a>
但是它居然没有任何变化!!!demo在此,大家有看出来问题吗?
大家可以先思考一下。这个问题和字体、文本没啥关系,但我觉得这个坑是有必要提一下的。
最后回答下最开始的问题,这跟选择器的特殊性有关,参考选择器特殊性的计算方法
选择器中的每个元素增加的特殊性为 0, 0, 0, 1
而每个类和每个属性选择增加的特殊性都是 0, 0, 1, 0
因此选择器 a 的特殊性为 0, 0, 0, 1
选择器 a[href] 的特殊性为 0, 0, 1, 1
而选择器 .red 的特殊性只有 0, 0, 1, 0
.red 的特殊性并没有超过 a[href],因此无法把 a[href] 的样式覆盖掉。
这就是权重问题