【发布时间】:2012-11-18 00:44:30
【问题描述】:
级联使 CSS 变得特别而强大。但在媒体查询的情况下,重叠可能似乎有问题。
考虑以下 CSS(继续 rules for CSS media query overlap):
/* 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 宽时,根据标准 CSS 层叠在 45em will be treated 处重叠:
- 将首先应用所有
max-width: 45em定义, - 之后将应用所有
min-width: 45em。
考虑这两个条件:
- 所有文本通常都是
black,但查询A是唯一的并且具有color: red。 - 由于 查询 B 用于更大的视口,它的文本具有 CSS
font-size: larger。
因此,在正好 45em 的宽度上,我们会得到大而红色的文本。 避免这种情况的最佳解决方案是什么?
我看到了两种可能性:
在 查询 B 中重新声明文本以具有
color: black,但是如果您选择在将来更改color,那么您将管理两个声明。 (当然,这一行代码没有这样的问题,但想象一下还有很多其他的声明和选择器。)通过使用像
max-width: 799px和min-width: 800px这样的像素值来避免重叠,但是你使用的是像素——我猜它们可能分别是49.9375em和50em。虽然如果默认值不再是 16em 并且某些东西被四舍五入怎么办?我们是still not certain 在那个间隙发生了什么。 (打破时空连续性的黑洞?)
两者都有各自的缺点......还有其他想法吗?
【问题讨论】:
-
你分析过度了:你永远不会写出那样的样式。媒体查询通常用于处理相关视口的元素。没有理由选择像 49.9375em 这样的数字作为断点而不是 49.99999em。
-
@cimmanon,我的意思更多是作为一个侧面(随意忽略奇怪的
em值,只是为了保持问题的一致性——我考虑在@987654335 中写下整个问题@但我更喜欢em) -
@Baumr--我认为 cimmanon 的观点是你应该使用你的#2 解决方案,但在
max-width上将值设置为49.99999em,这样你就不应该有“差距”处理(就像你可能处理的49.9375em)。 -
浏览器在计算像素值时会四舍五入,据我所知,
50em仍然适用。
标签: css responsive-design media-queries fluid-layout