媒体查询中的“屏幕”和“仅屏幕”有什么区别?


486

screenonly screen媒体查询有什么区别?

<link media="screen and (max-device-width: 480px)" rel="stylesheet" href="m.css" />
<link media="only screen and (max-device-width: 480px)" rel="stylesheet" href="m.css" />

为什么要求使用only screenscreen本身是否提供的信息不足以在屏幕上呈现?

我已经看到许多使用以下三种方式之一的响应式网站:

@media screen and (max-width:632px)
@media (max-width:632px)
@media only screen and (max-width:632px)

Answers:


542

让我们一一分解您的示例。

@media (max-width:632px)

max-width就是说您要应用这些样式的632px 的窗口。在这种情况下,大多数情况下,您所谈论的都是小于桌面屏幕的任何东西。

@media screen and (max-width:632px)

这是针对具有screenmax-width632px 窗口的设备应用样式的说法。这与上面的几乎相同,除了您要指定的screen是与其他 最常用的其他媒体类型不同之外print

@media only screen and (max-width:632px)

这是直接来自W3C的引文来解释这一点。

关键字“仅”还可以用于向较旧的用户代理隐藏样式表。用户代理必须处理以'only'开头的媒体查询,就像没有'only'关键字一样。

由于没有“仅”这样的媒体类型,因此较旧的浏览器应忽略样式表。

这是该页面上的示例9中显示的引用链接

希望这可以对媒体查询有所启发。

编辑:

请务必查看@hybrids出色的答案,了解如何only真正处理该关键字。


23
如果您想寻找一个更好的解释来解释为什么only关键字会隐藏旧浏览器中的样式表,请参见下面@hybrid的答案。他解释得很好。
JMTyler 2013年

1
hybrid的答案很好,但我也喜欢这个答案,因为它解决了CSS内部的媒体查询,而不是只解决medialink元素的属性。
chharvey

2
什么设备没有屏幕?
Kokodoko

3
@Kokodoko不需要一个。但是,严重的是,打印机和屏幕阅读器不一定具有屏幕。加上当前或将来无法识别screen的其他任何内容,例如其他媒体类型中列出的任何内容。
马修·格林

1
@Kokodoko CSS的存在是为了在内容和表示之间创建关注点分离。演示不仅涵盖屏幕上可以看到的内容。无论您打算做什么,都要牢记一个重要的区别。
马修·格林

230

以下是来自Adobe docs的内容


媒体查询规范还提供了关键字only,旨在隐藏旧版浏览器中的媒体查询。像一样not,关键字必须位于声明的开头。例如:

media="only screen and (min-width: 401px) and (max-width: 600px)"

无法识别媒体查询的浏览器期望使用逗号分隔的媒体类型列表,并且规范指出,它们在第一个非数字字符(连字符)之前立即截断每个值。因此,旧的浏览器应将上述示例解释为:

media="only"

因为没有仅这种媒体类型,所以样式表将被忽略。同样,旧的浏览器解释

media="screen and (min-width: 401px) and (max-width: 600px)"

media="screen"

换句话说,即使它不知道媒体查询的含义,也应将样式规则应用于所有屏幕设备。

不幸的是,IE 6-8无法正确实施该规范。

它没有将样式应用于所有屏幕设备,而是完全忽略了样式表。

尽管有这种行为,但仍建议仅在要从其他不那么常见的浏览器中隐藏样式时,才为媒体查询添加前缀。


因此,使用

media="only screen and (min-width: 401px)"

media="screen and (min-width: 401px)"

在IE6-8中将具有相同的效果:两者都将阻止使用这些样式。但是,它们仍将下载。

另外,在支持CSS3媒体查询的浏览器中,如果视口宽度大于401px并且媒体类型为screen ,则两个版本都将加载样式。

我不确定所有不支持CSS3媒体查询的浏览器是否需要该only版本

media="only screen and (min-width: 401px)" 

相对于

media="screen and (min-width: 401px)"

确保它不会被解释为

media="screen"

对于可以访问设备实验室的人来说,这将是一个很好的测试。


3
因此,如果我们谈论CSS文件中的媒体查询,则可以删除“ only”,因为较旧的浏览器根本无法理解媒体查询,我们可以吗?
1234ru

好,非常清晰的答案。谢谢!
亚历山大·苏拉菲尔

链接共享确实很有帮助。谢谢
拉斐尔16'6

根据我的经验,“仅”在Symbian OS(旧的诺基亚触摸电话)上可以正常工作。我经常使用它是因为这些浏览器在CSS3支持方面确实很糟糕,但是它仍然能够正确处理媒体查询中的“仅”和“最小/最大宽度”。
彼得·纳纳特

@PeterKnut为什么还要支持这样的旧设备?真是好奇。
普罗米修斯

41

要为许多具有较小屏幕的智能手机设置样式,您可以编写:

@media screen and (max-width:480px) {  } 

要阻止旧版浏览器查看iPhone或Android手机样式表,您可以编写:

@media only screen and (max-width: 480px;) {  } 

阅读本文以了解更多信息http://webdesign.about.com/od/css3/a/css3-media-queries.htm


3
我仍然不太清楚。我也更新了我的问题。你能举个例子吗?
Jitendra Vyas

4
如果您使用“移动优先”方法怎么办?因此,我们首先使用移动CSS,然后使用min-width定位较大的网站。我们不应该only在那种情况下使用关键字,对吗?
Ashitaka 2012年

这个答案很容易理解!:)唯一的只是保持旧的版本,如IE 6或歌剧5或6从装载有将要呈现的Android或Chrome 30或IE 10..Exellent答案桑迪普数据:)值得+1
Afzaal Ahmad Zeeshan 2013年

16

@hybrid的回答很有用,只是它没有解释@ashitaka提到的目的“如果使用Mobile First方法会怎样?因此,我们首先使用移动CSS,然后使用min-width定位较大的网站。我们不应该在这种情况下使用唯一的关键字,对吧?

想要在此处添加,其目的只是为了防止不支持的浏览器使用其他设备样式,就像它从“屏幕”开始一样,而不是将其用于屏幕,而好像它是从“仅”样式开始一样。

回答ashitaka的例子

<link rel="stylesheet" type="text/css" 
  href="android.css" media="only screen and (max-width: 480px)" />
<link rel="stylesheet" type="text/css" 
  href="desktop.css" media="screen and (min-width: 481px)" />

如果我们不使用“ only”,它仍然可以使用,因为桌面样式也将用于打击Android样式,但会产生不必要的开销。在这种情况下,如果浏览器不支持,它将回退到第二个样式表,而忽略第一个样式表。


1
@media screen and (max-width:480px) {  } 

screen这是设置媒体查询的屏幕尺寸。例如,显示区域的最大宽度为480px。因此,它指定的是屏幕,而不是其他可用的媒体类型。

@media only screen and (max-width: 480px;) {  } 

only screen 此处用于防止不支持带有媒体功能的媒体查询的旧版浏览器应用指定的样式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.