在CSS中嵌套@media规则
支持似乎是不同的浏览器..
检查链接
Firefox:黑色,白色文字。
Opera,Chrome,IE9:蓝色,黑色文字。
这是正确的,我将如何使其一致?
代码
@media screen and (min-width: 480px) { body{ background-color:#6aa6cc; color:#000; } @media screen and (min-width: 768px) { body{ background-color:#000; color:#fff; } } }
有趣的是,似乎在条件@import
中嵌套媒体查询似乎是行得通的。
例如:
的index.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>Media test</title> <link rel="stylesheet" type="text/css" href="importer.css" /> </head> <body> <h1>Why is this not consistent.</h1> </body> </html>
importer.css
@import url(media.css) screen and (min-width: 480px);
media.css
body { background-color: #6aa6cc; color: #000; } @media screen and (min-width:768px) { body { background-color: #000; color: #fff; } }
简单的答案是,虽然在CSS3中允许嵌套@media
规则(而不仅仅是媒体查询),但在CSS2.1中是不允许的,主要是因为没有理由让媒体查询不能看到存在。
Firefox是第一个支持嵌套的@media
规则的网站,但是自从这个答案首次发布以来,其他浏览器已经慢慢赶上来了。 也就是说,Chrome(以及类似的Blink Opera)已经被更新以支持它。
据我所知,Safari和IE仍然不支持。
有一些术语混淆,需要清理,以便我们了解究竟发生了什么。
您所使用的代码是指@media
规则,而不是媒体查询 – 媒体查询本身就是@media
标记之后的组件,而规则则是由@media
组成的整个代码块,媒体查询和嵌套在大括号内的规则。
这可能会导致在CSS中使用媒体查询时出现混淆,以及在input样式表中的@media
规则正常工作的情况下,即使@import
伴随着另一个媒体查询。 请注意,媒体查询可能出现在@media
和@import
规则中。 它们是一样的,但是它们被用来以不同的方式限制性地应用样式规则。
现在,这里的实际问题是,嵌套的@media
规则在CSS2.1中无效,因为您不允许在@media
规则中嵌套任何 at-rules。 不过,CSS3中的东西看起来很不一样。 也就是说,条件规则模块非常清楚地表明@media
规则可以嵌套,甚至提供一个例子:
例如,使用这套嵌套规则:
@media print { // rule (1) #navigation { display: none } @media (max-width: 12cm) { // rule (2) .note { float: none } } }
对于打印介质,标记为(1)的规则的条件是成立的,并且当显示区域的宽度(对于打印介质是页面框)小于或等于(2)的规则的条件为真12厘米。 因此,无论何时将此样式表应用于打印介质,规则“#导航{display:none}”都适用,并且仅当样式表应用于打印介质时才应用规则“.note {float:none}”,宽度的页面框小于或等于12厘米。
此外,看起来Firefox是遵循这个规范并相应地处理规则,而其他浏览器仍然将其视为CSS2.1的方式。
尽pipe如此, 语法模块中的语法还没有更新以反映这一点。 它仍然不允许像CSS2.1一样在@media
规则中嵌套规则。 这个规范无论如何都是要重写的,所以我想这不重要。
基本上,CSS3允许它(等待重写语法模块),而不是CSS2.1(因为它既不定义媒体查询也不允许嵌套的@media
规则块)。 而至less有一个浏览器已经开始支持新的规范,我不会打电话给其他浏览器越野车; 相反,我会说,他们根本没有赶上,因为他们真的符合更老,更稳定的规格。
最后,您的@import
工作原因是@import
能够在媒体查询的帮助下有条件地工作。 但是,这与导入的样式表中的@media
规则没有任何关系。 这实际上是两个独立的东西,并被所有的浏览器对待。
为了让你的代码在不同的浏览器上一致地工作,你可以使用你的@import
语句,或者,因为你的两条规则都使用min-width
,只需删除@media
规则的嵌套:
@media screen and (min-width: 480px) { body { background-color: #6aa6cc; color: #000; } } @media screen and (min-width: 768px) { body { background-color: #000; color: #fff; } }