【发布时间】:2018-04-13 12:59:50
【问题描述】:
我一直在四处寻找我的问题的答案,但根本找不到其他人解决我的问题,所以我决定求助于堆栈溢出。
我正在为@media print 添加 CSS 规则,但偶然发现了一个我无法理解的问题。我正在尝试使用 * 选择器将 background-color: white 应用于所有元素,但某些元素会忽略该规则并继续使用先前定义的颜色,从而覆盖打印媒体规则。
这是可以重现问题的最简单的 CSS 文件:
footer {
background-color: lightblue;
}
@media print {
* {
background-color: white;
}
}
在我的 HTML 中,我有简单的页脚标签,没有任何类或 ID。
...
<footer>
Footer content here
</footer>
...
我已经检查了 HTML 和 CSS 的有效性,所以它不应该是语法错误
如果我使用 Chrome 开发工具选项 Emulate CSS Media: print 或选中 Background colours and images 的打印预览,页脚元素会保留其浅蓝色颜色。
如果我使用开发者工具检查元素,它显示@media 打印规则已被覆盖:
背景色:白色;
我不明白为什么上面的页脚规则会覆盖 * 规则。据我所知,这两条规则具有相同的特殊性,所以最后一个应该是应用的那个。但事实并非如此。如果我在媒体查询下编辑规则以明确声明该规则也应应用于页脚元素,则它可以工作:
*, footer {
background-color: white;
}
但对我来说这似乎很奇怪,因为我认为 * 已经包含页脚元素。我当然可以将 CSS 与规则中指定的页脚一起使用,但我仍然很想知道为什么仅使用星号是不够的。
【问题讨论】:
标签: html css media-queries css-specificity