html - <footer> 忽略的 CSS 样式

标签 html css css-specificity

直到现在我使用 <div> s 用于页眉和页脚,但随着我转向 HTML5,我想用 <header> 替换它们和 <footer>标签。旧版本有样式定义

#footer a {
  text-decoration: none;
}

删除链接的下划线。这按预期工作。但是改成<footer>之后标签:

footer a {
  text-decoration: none;
}

样式被忽略。我究竟做错了什么?

(完整的代码,包括样式,可以在 here 中找到)

最佳答案

特异性。

#footer a 是一个 ID (#footer) 和一个元素 (a)。

ID 比类更具体,类比元素更具体。

footer a 不起作用,因为它是两个元素,这是非常低的特异性,它被 a:link 覆盖,从技术上讲,它是一个元素和一个 ( psuedo)class,意味着它比两个元素具有更高的特异性。

您需要做的就是增加 footer a 声明的特异性 - 给页脚一个类或一个 ID,或者做 footer a:link, footer a:visited.

基本上它归结为 ID 总是覆盖类总是覆盖元素。我相信它是 255 个元素 = 1 个类和 255 个类 = 1 个 ID(但您永远不需要那么具体)。内联样式和 !important 样式比任何东西都更具体,包括 ID。计算特异性的基本方法是计算 0,0,0 表示法(IDs 、类、元素)。

#footer a 是 1,0,1。

a:link 是 0,1,1。

页脚 a 为 0,0,2。

那些是从最高到最低的特异性组织的。要使 footer aa:link 更具体,您需要在声明中至少添加 1 个类或 1 个 ID,例如像 footer#footer a, footer.bottom a, footer a:link, footer a:visited 等等(类或相应地添加到 HTML 标记中的 ID)。最后一个选项不需要更改任何 HTML 标记,因为您只是覆盖了 :link:visited 伪类(就特异性计算而言,它们被视为真实类,就像像 :before:after 这样的伪元素算作元素。

所有解决方案中最简单的是将 a:link, a:visited 样式声明更改为简单的 a,这意味着该声明将不如页脚中的一个,您无需更改任何其他内容即可开始工作。

特异性可以说是您在 CSS 中需要掌握的最重要的概念。这里有一些很好的资源来了解更多信息:

关于html - &lt;footer&gt; 忽略的 CSS 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19819811/

相关文章:

html - 覆盖列表样式

c# - 如何将 ASP.NET MVC 中的 HTML <select> 多个属性的更新值插入到数据库?

python - 如何使用 python 从非结构化 HTML 创建结构化数组

html - 首次打开页面时如何调整 div 的动画大小

CSS 特异性 - 定义类和 ID

html - 计算选择器的特异性(CSS)

java - Selenium 单击复选框 -React::before

javascript - 如何将通过 ajax 加载的元素附加到之前通过 ajax 加载的另一个元素?

asp.net - 将鼠标悬停在图像上时需要 CSS 效果,以便在其上方显示另一个图像和/或文本

html - 音频播放器上的 CSS3 过渡