Skip to content

css使用中遇到的一些坑 #8

Open
@AlexZ33

Description

@AlexZ33

无法修改颜色的 <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 的 &lt;a&gt; 标签</a>
<a>这是一个没有 href 的 &lt;a&gt; 标签</a>

https://codepen.io/AlexZ33/pen/VwwqXYz

测试下,没啥问题,然后我就很开心的用它来初始化 a 标签了。

直到有一天,我想把某个链接中的文字改成红色,然后我加了一段代码

<style>
  .red {
    color: red;
  }
</style>

<a href="baidu.com" class="red">这是一个应该显示成红色的 &lt;a&gt; 标签</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] 的样式覆盖掉。

这就是权重问题

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions