级联使 CSS 变得特别而强大。但在媒体查询的情况下,重叠似乎有问题。
考虑以下 CSS(CSS 媒体查询重叠的连续规则):
/* Standard - for all screens below 20em */
body { color: black; font-size: 1em; }
/* Query A - slightly wider, mobile viewport */
@media (min-width: 20em) and (max-width: 45em) {
body { color: red; } /* supposed to be unique for this width */
}
/* Query B - everything else */
@media (min-width: 45em) {
body { font-size: larger; } /* because viewport is bigger */
}
所以当屏幕正好是 45em 宽时,45em 处的重叠将按照标准 CSS 级联处理:
max-width: 45em
将首先应用所有定义,min-width: 45em
之后将全部应用。
考虑这两个条件:
- 所有文本通常都是
black
,但查询 A是唯一的并且具有color: red
。 - 由于查询 B用于更大的视口,因此它的文本具有 CSS
font-size: larger
。
因此,在正好 45em 的宽度处,我们会得到大而红色的文本。避免这种情况的最佳解决方案是什么?
我看到两种可能性:
重新声明要
color: black
在Query Bcolor
中具有的文本,但是如果您选择在将来更改,那么您将管理两个声明。(当然,这一行代码没有这样的问题,但想象一下还有很多其他的声明和选择器。)max-width: 799px
通过使用和之类的像素值来避免重叠min-width: 800px
,但是你使用的是像素——我猜它们可能分别是 49.9375em 和 50em。虽然如果默认值不再是 16em 并且某些东西被四舍五入怎么办?而且我们仍然不确定在那个间隙会发生什么。(打破时空连续性的黑洞?)
两者都有其缺点......还有其他想法吗?