用于包含高分辨率图形,但仅限于可以使用它们的屏幕。“Retina”指的是“2x”。
@media
(-webkit-min-device-pixel-ratio: 2),
(min-resolution: 192dpi) {
/* Retina-specific stuff here */
}
或者其他高分辨率屏幕。
/* 1.25 dpr */
@media
(-webkit-min-device-pixel-ratio: 1.25),
(min-resolution: 120dpi){
/* Retina-specific stuff here */
}
/* 1.3 dpr */
@media
(-webkit-min-device-pixel-ratio: 1.3),
(min-resolution: 124.8dpi){
/* Retina-specific stuff here */
}
/* 1.5 dpr */
@media
(-webkit-min-device-pixel-ratio: 1.5),
(min-resolution: 144dpi){
/* Retina-specific stuff here */
}
旧内容(不要使用,保留以供参考)
@media
only screen and (-webkit-min-device-pixel-ratio: 2),
only screen and ( min--moz-device-pixel-ratio: 2),
only screen and ( -o-min-device-pixel-ratio: 2/1) {
/* Retina-specific stuff here */
}
这更具前瞻性……
@media
only screen and (-webkit-min-device-pixel-ratio: 2),
only screen and ( min--moz-device-pixel-ratio: 2),
only screen and ( -o-min-device-pixel-ratio: 2/1),
only screen and ( min-device-pixel-ratio: 2),
only screen and ( min-resolution: 192dpi),
only screen and ( min-resolution: 2dppx) {
/* Retina-specific stuff here */
}
笔记
- 超级奇怪的
min--moz-device-pixel-ratio
可能是错误的,可能想加入-moz-min-device-pixel-ratio
以防他们修复了它但保留了前缀。 - 这是关于 分辨率单位的规范。
示例
假设您的设计中有三个主要断点。这个设计还有一个很大的背景图片,您希望它在任何屏幕上(Retina 或非 Retina)都看起来最好,并且不浪费任何带宽。您需要设置 6 个媒体查询,每个断点一个,每个 Retina 断点一个。然后,您需要一直覆盖背景图像。
@media only screen and (min-width: 320px) {
/* Small screen, non-retina */
}
@media
only screen and (-webkit-min-device-pixel-ratio: 2) and (min-width: 320px),
only screen and ( min--moz-device-pixel-ratio: 2) and (min-width: 320px),
only screen and ( -o-min-device-pixel-ratio: 2/1) and (min-width: 320px),
only screen and ( min-device-pixel-ratio: 2) and (min-width: 320px),
only screen and ( min-resolution: 192dpi) and (min-width: 320px),
only screen and ( min-resolution: 2dppx) and (min-width: 320px) {
/* Small screen, retina, stuff to override above media query */
}
@media only screen and (min-width: 700px) {
/* Medium screen, non-retina */
}
@media
only screen and (-webkit-min-device-pixel-ratio: 2) and (min-width: 700px),
only screen and ( min--moz-device-pixel-ratio: 2) and (min-width: 700px),
only screen and ( -o-min-device-pixel-ratio: 2/1) and (min-width: 700px),
only screen and ( min-device-pixel-ratio: 2) and (min-width: 700px),
only screen and ( min-resolution: 192dpi) and (min-width: 700px),
only screen and ( min-resolution: 2dppx) and (min-width: 700px) {
/* Medium screen, retina, stuff to override above media query */
}
@media only screen and (min-width: 1300px) {
/* Large screen, non-retina */
}
@media
only screen and (-webkit-min-device-pixel-ratio: 2) and (min-width: 1300px),
only screen and ( min--moz-device-pixel-ratio: 2) and (min-width: 1300px),
only screen and ( -o-min-device-pixel-ratio: 2/1) and (min-width: 1300px),
only screen and ( min-device-pixel-ratio: 2) and (min-width: 1300px),
only screen and ( min-resolution: 192dpi) and (min-width: 1300px),
only screen and ( min-resolution: 2dppx) and (min-width: 1300px) {
/* Large screen, retina, stuff to override above media query */
}
Mozilla 团队是否知道声明中的错误?
哈哈
开发团队知道这一点,并且从 Firefox 16 开始,他们建议使用上述未来版本中的内容。
我们是否需要对非 Retina 显示屏使用媒体查询,以便 Retina 显示屏不会下载两次背景图像?
是的,这将是一个好主意。
但是,不支持像素比(或任何媒体查询)的设备将看不到您的“正常”分辨率样式?
如果您关心用户需要下载多少内容,请不要实施 Retina 税。
更多像素并不是强制通过缓慢的移动网络传输巨大图像的借口,这会浪费用户的金钱,或者对于“无限”数据套餐,这会让他们在本月早些时候达到数据限制,从而导致网络速度变慢。
在像素比高的情况下,当用户缩小时,设备会有更多像素来使页面可读。满足于此,不要在 Retina 特定图像上浪费时间和金钱。当有一种方法可以检测到快速网络和高像素比时,也许那时才是合理的。
使用内联样式在 WordPress 主题中动态加载图像作为背景,当前使用 data-src 和 data-2x 方法。不过,它似乎不能很好地降级到 IE8。关于 IE8,如果 data-src 属性小于 32kb,它只会接受该属性?
有人知道如何让这种方法在 IE8 上工作吗?
这些是很棒的代码片段,并且很好地利用了它们。
但是,再仔细想想,这不是在做无用功吗?这会在哪里结束?现在市场上出现了能够实现 4k 和 8K 分辨率的消费级 LCD。是否有更好的解决方案来快速支持这种广泛的 DPI?
SVG 是唯一可行的面向未来的解决方案吗?
我同意你的观点,Rob,这太疯狂了,em 应该是字体管理的标准,而 svg 应该是图像的标准,网络只是一堆拼凑的黑客,似乎没有回头路了。这曾经很有趣,但现在至少可以说变得很烦人了。
我相信网络一直是一堆黑客的集合!还记得表格被用来构建布局的时候吗?用图像来显示良好的排版?
在很多方面,我们现在比以往任何时候都不那么依赖黑客了!
(是的,SVG 和图标字体在图形方面有着激动人心的未来,但在照片方面则不然。)
我理解你的感受,Rob!我喜欢 Joel 的观察。今天的小技巧是明天公认的惯例。
您是否希望为 1.5 倍屏幕比例提供相同的图像?现在有一些 Android 设备的比例很奇怪,我通常会为 1.5 倍比例以上的所有设备指定 2 倍图像,并使用背景大小来包含它们。
正如有人指出的那样,这种方法还需要考虑如何支持没有媒体查询的旧浏览器……移动优先默认、IE 样式表或功能检测类也许可以?(我赞成后者)
我对此思考了很久,直到我在网上找到了一些 JS,它基本上可以为我们阻碍快速通道的爷爷 IE 添加媒体查询支持。
我首先开发通用的基本样式,并确保在 1024-1280 像素宽的范围内一切正常,因为这种低分辨率很可能出现在那些仍在使用旧 IE 的人身上。我将 body 设置为最大宽度 1280 像素,以便在旧 IE 在更大的屏幕上运行时停止缩放。然后,我在媒体查询中将最大宽度设置回 100%,以便它可以使用所有可用的空间。我添加了我上面提到的 JavaScript,然后立即关闭 IE,并停止对其进行任何调整,开始为真正的浏览器构建。在网络客户端基本上需要在一个界面中包含四个界面的时代,假设您可以为手机、平板电脑、SD、HD、“Retina”iPad(说真的……购买 iPad 的人不需要 3000 像素的显示屏——这太荒谬了——他们用它来上 Facebook)编写代码,并且最重要的是,还要支持 Internet Explorer 7,这是不可行的。我明白,它应该向后兼容,但事实并非如此。
如果客户要求在上述所有内容之上支持 IE8,我们必须收取更多费用,因为它会增加大量的项目时间。如果他们还要求支持 IE7,我们会收取 1.5 倍于 IE8 支持费用的费用,这就是他们的旧浏览器支持成本。通常,当我们进行用户分析并查看趋势时,他们会意识到:a.) 旧版 IE“已经死了”,b.) 调整和修改所有内容以在旧版 IE 上正常/良好显示的成本与时间、投资或代码混乱程度相比微不足道,因为 c.) 使用 IE7 的人显然不在乎/没有注意到网络对他们来说看起来/用起来很糟糕(否则他们现在早就升级了),以及/或者他们不知道如何使用计算机来有效地找到网络信息,并且不会有效地接收网站的目的,如果不是迷路了或漫无目的地浏览。唯一仍在使用旧版 IE 的人可能是 IT 领导能力不足的公司的企业员工,他们将用户锁定在旧版 IE7 上以“确保安全”(什么?!),或者有一个由粗心的傻瓜编写的旧网络应用程序,该应用程序只能在 IE7 中运行(并且还没有找到如何在 IE9 中使用兼容模式)。请记住,这种企业用户非常非常少见,除了基本操作之外,做任何支持 IE 的事情都是徒劳的。那些廉价到无法放弃他们在 2001 年购买的网络应用程序(该应用程序可能从未工作过,并且在他们使用它的 10 年里一直阻碍着工作流程)的企业可能不会追求现代 HTML5 响应式网络应用程序或任何需要此类网站进行营销的东西。如果他们这样做了,他们会得到他们需要的信息——只是不是你的设计师想要的方式。你不可能为了支持世界上所有的古老技术而延长项目时间。如果您一开始就构建正确,它将“足够好”地支持旧版 IE 以提供信息——这就是网络的用途。如果我们要支持 IE7,那么是什么阻止客户要求 AOL 支持。大多数人只是在看到更长的项目时间和旧版成本之前,根本不知道需要做哪些工作。当所有的工作都完成了,但他们仍然有糟糕的体验,因为他们还没有升级,这是没有意义的。如果有必要,请在页脚中添加一条消息,说明由于他们还没有升级,因此无法正常显示。
IE 落后了,你知道还有什么也落后了吗?这个 BS。
-webkit-min-device-pixel-ratio: 2
min--moz-device-pixel-ratio: 2
-o-min-device-pixel-ratio: 2/1
min-device-pixel-ratio: 2
现在 Windows 8 已经发布,IE10 也已经可用,我们又多了一个。
-ms-min-device-pixel-ratio: 2
我真想抽 Mozilla 一巴掌,为什么他们要搞一些与众不同的随机声明。还有 Opera,居然用 Webkit 条件编译,理由是“Web 开发者太懒了,没有把所有条件都写上”。首先,代码明明就在那里,而且重复了五次,你只是因为这代码还没“标准化”就不愿意去读基础声明,这怎么能怪 Web 开发者省略代码呢,W3C 的 CSS 工作组也该醒醒了,赶紧像当初搞 HTML 那样,给 CSS 弄个滚动标准出来;其次,压根就没人用 Opera。我故意省略 Opera 的代码,就是故意的。别在我这儿装得好像是我懒,实际上在我的分析报表里,你们的用户份额只有 0.2%。可能只有一个连话都说不清、不小心点进我网站的 Opera 用户会看到回退后的效果。哎呀!太糟糕了!谁在乎呢。
大多数情况下,我只写 Webkit 条件编译是因为声明是针对移动设备的。用这种写法,一拳就能打中安卓、iOS 和黑莓。Opera,你干得好啊,给 iPhone 用的样式你也要应用。真是失败。我知道,我知道 Mozilla 做了个 Firefox for Android,但那玩意儿根本不好用;Opera 在安卓市场上有 15 个浏览器,但没人用,而且他们还为各种老古董的掌上设备做了浏览器,那些设备既不支持 CSS3,也没人用,而且屏幕小得可怜,只有两个像素,除了显示你网站的 logo 什么也显示不了。只有使用量足够高,我才会费劲去改我的代码,至于移动版 IE 嘛,用户量还没多到让我在乎的程度,不值得我再在其他移动声明里加上 500 行“-ms-stupid-conditional-code-killer”。别跟我扯什么 Web 开发者懒惰,就因为这些破事,CSS 代码量膨胀了 5 倍,还导致了各种层出不穷的问题,比如 Mozilla 就没法和其他浏览器保持一致的格式。不,我们才不喜欢去谷歌搜索每个浏览器对每个小属性的奇葩 hack 叫什么名字。不,我不会为那些使用量少到我都不屑于测试的浏览器写那么多代码。Opera,你就尽管读 -webkit- 声明吧,别忘了这根本无关紧要,因为我的用户中根本就没人会看到它。我不想听到“Opera 只是说很多开发者不知道他们忘了...”这种屁话。没人会忘记它。很多人从教程里复制粘贴代码片段的时候都会把它删掉。这就是我们构建回退方案的原因。我们没有忘记。我们也不懒。我们不在乎。
我真不敢相信都这个年代了,我们还得处理这种事情,我敢肯定,将来我们还会为了什么时候该停止这种做法而争论不休,但有一件事是肯定的——我想痛扁那些不解决开发者问题的人,就因为他们没有像我们在 21 世纪初那样,以标准化的方式解决问题...想当初,Web 被各种垃圾代码搞得支离破碎。浏览器已经准备好了,因为我们一直在使用它。我们的客户已经准备好了,他们多年来一直在要求它。用户已经准备好了,他们已经在 4 英寸的屏幕上使用它了。许多新的 CSS 规范已经准备好了,就等着标准化了。对我来说,这些已经是标准化的了,因为它们在所有浏览器上的显示效果都一样,而且在网络上被大量使用。如果在我敲着键盘,把 500 行代码扩展成 2500 行,就为了支持当今实际使用的技术时,还要听到“向后兼容”这种鬼话,我非杀了谁不可。醒醒吧。电子产品制造商生产的技术最多只能用 5 年(如果是手机或 Macbook 的话,可能只有两年),从市场总监到信息档案管理员,谁也不会鸟那些已经被扔进垃圾填埋场的 90 年代的技术不识别他们的 CSS。如果不识别,那就忽略该声明,生活还得继续,到最后,甚至没有人会知道其中的区别,就算他们知道了,他们也不会在乎,就算他们在乎,他们也不会用该死的 Wii 上网。信息在标记里,如果标记在那里,那么 Web 就完成了它的工作。我理解他们的逻辑,但我只是觉得他们又一次破坏了 Web,他们强制推行主要版本标准化,不了解现实世界以及他们正在开发的 Web 实际上是如何管理的,而且他们的行动速度比技术本身慢了几十倍。他们的小型实验性 hack 方案已经成为未来十年的 CSS 的永久组成部分,并且已经开始造成破坏。
懒惰的开发者...去你的 Opera。
@Andrew
我对自己说这话已经很久了,我一直觉得我只是一个懒惰的网站开发者,喜欢用简单的方法做事,觉得去他的奇葩浏览器、老旧浏览器、IE 等等。对我来说,只要能用,能覆盖“大多数浏览器”的一段代码,我就会用它,然后告诉自己:如果某个浏览器需要调整(hack),那就是它的错,不是我的错,它可以忍受偶尔出现的错位等等。如果那些用户有一天真的尝试了其他浏览器,发现他们选择的浏览器显示的网页像垃圾一样,那么他们可以用脚投票,换一个浏览器,或者就这样将就着用吧。
很高兴读到你的帖子,我很喜欢!
干杯。
^ 他说的对。
嘿,Chris,我刚刚写了一些关于如何简化你面向未来的示例的想法。我一直觉得所有这些带厂商前缀的媒体查询都很烦人。当我仔细研究了一下之后,我意识到在你的视网膜/高分辨率媒体查询中只需要进行两次检查。希望这对其他开发者也有帮助。
把这个作为 SASS 的分辨率 mixin:http://blog.14islands.com/post/37259603246/sass-resolution-mixin
感谢 David 提供的 mixin;
上面提到的这种定义似乎在 IE9 中有问题。
在我的测试中,如果包含以下代码行,IE9 会加载媒体查询内的声明
其他人能重现这个问题吗?
我遇到了同样的问题。你设法解决这个问题了吗?
你解决这个问题了吗?我们在一些运行 IE9 的电脑(不是所有电脑,很奇怪?)上也遇到了同样的问题。
在我的本地开发站点上,ie9 表现正常,然后我将代码推送到一个公开的服务器上作为测试站点,在测试站点上,ie9 在第一次加载页面时认为自己是视网膜屏幕,但在刷新页面后就恢复正常了,从那以后就一直正常工作。
我不知道为什么只在第一次加载时会出现这种情况,也不知道如何修复它;我对这个话题还很陌生。
这是我的代码
使用两组不同的代码来定义标准分辨率和高分辨率的背景图片(以防止冗余的资源下载)。
除非所有浏览器厂商都坐下来,拿出一个统一的解决方案,否则我们将永远在设备兼容性问题上发泄我们的愤怒。苹果,你那些漂亮的设备上显示的信息可能很美观,但你也该为那些不得不使用这种技术的設計师们想想。现在我们不得不制作两张图片,而实际上只需要一张就够了......
好吧,Andrew。
你就不能直说你的真实想法吗?
;)
@Andrew:好吧,你说的已经够直白了... ;) 给他们一个纯文本文件就行了。
这些解决方案对于你可以在样式中识别的图像很有效,但是对于那些放置在内容区域(如通过 WordPress 发布的博文)中的图像,最好的解决方案是什么呢?
我遇到的问题是,图像可能会通过 RSS 在合作伙伴的网站上联合发布。
@Jess 你可以看看 Hammy:http://wordpress.org/extend/plugins/hammy/
关于视网膜屏幕,我根本就没有。我在乎吗...啊,随便吧。那么,如果我们看不到效果,我们开发者怎么知道它是否有效呢?这有什么技巧吗?
如果能在非视网膜屏幕上看到图像的变化,以确认它是否有效以及对齐是否正确,那就太好了。编写代码没问题,只是需要能够看到更改是否正常并且已修复。
嗨,Anthony。回复晚了,但如果你还在为这个问题困扰...如果你手边没有设备,就用 Chrome 的开发者工具模拟一个具有高像素比的设备。检查图像,看看它是否加载了正确的图像。我认为其他浏览器也可以做到这一点。
W3C 博客上有一篇文章说
由于
dppx
(每像素点数)的新实现以及比率低于 2 的一些问题,我们可以写@Andrew – 我完全同意 – 精彩的咆哮!哈哈
我认为这只会变得越来越复杂。这对设备制造商或浏览器引擎来说应该是个难题。
因为
1. 不是所有开发人员都能负担得起设备和测试的费用。
2. 当有大型制造商时,一切都会变得更加复杂。
我们可以为制造商或浏览器制定规则,但不能为开发人员制定规则。
我完全同意 Bijay 的观点
我需要下载视网膜屏幕适用的图标.. 它像文本格式还是矢量格式?哪里有视网膜屏幕适用的图标?
使用 FontAwesome 获取图标
我认为苹果、三星和任何创建 Retina(和其他高分辨率品牌名称)设备的人都应该负责图像(而不是文本)的正确 dpi。
* 制造商可以很容易地在硬件中检测并进行图像分辨率提升。
* 使用 ImageMagick 从具有常规分辨率的图像创建两组图像是一件痛苦的事情。天哪,它只是宽度 x2 和高度 x2。它甚至没有模糊。ImageMagick 可以预先创建放大的图像,而不会在没有硬件加速图形处理的服务器上费力。
* 媒体查询是一项永无止境的维护负担。
* 较旧/预 Retina 网页也会被具有 Retina 显示屏的设备访问。(谢谢大家。)
* 当公司推出新硬件时,他们不能将所有负担都交给开发人员:“这是一种新型屏幕。我们不关心它会给你带来更多(猜测)的工作。去处理它。”
* 制造商制造设备/小工具的寿命最多为 18-24 个月。尤其是苹果公司对此感到内疚(但并非唯一一家),当你意识到你的设备不再获得 iOS 更新时。那么为什么要 bother 追求完美呢?足够好就行了。
* 优化网页的速度和大小,因为它们将由带宽有限的设备处理,然后用 x2 图像(实际上是常规大小的 4 倍)填充它会适得其反。如果不是完全愚蠢的话。制造商的一大败笔。他们阻止自动播放视频以保护客户端带宽,并允许自动下载兆字节的 Retina 图像。虽然他们可以 upscaled,在硬件中,我们的常规 dpi 图像到设备的高物理 dpi。
这就是我可能不再为高分辨率设备制作第二套图像的原因。如果苹果、三星和其他公司对新旧内容在这些设备上的外观漠不关心,那我为什么要 bother 呢?这不是我的产品。
提出并向我们提供新的供应商属性以将具有常规 dpi 的图像放大到 Retina 显示屏的物理 dpi 有多困难?
作为开发人员,我们只需要在常规 dpi 图像上指定此供应商属性。
在后台,制造商甚至可以针对其运行的特定设备优化此 dpi 放大。
为什么他们能如此聪明地想出并生产出 Retina 显示器,却如此愚蠢地不去思考和实施 dpi 的硬件放大呢?
附言
用 Retina 替换三星和其他公司对其高分辨率屏幕技术的称呼。
这不是对苹果公司的抨击,只是 Retina 已经成为一种产品技术的名称。(类似于胡佛。)
我认为问题在于硬件供应商实际上确实调整了它们的分辨率,但他们假设网站设计的最低共同点。他们希望使设备尽可能多地与页面一起使用。因此,直到您将网页设置为 1 倍时,媒体查询才会开始工作,从而覆盖制造商设置的任何纵横比。所以现在你的 flex 设计起作用了,但是现在你有责任(设计师)让事情在不同设备上都能正常工作!
解决方案很简单,但似乎没有人看到它。让我们回到我们过去在纸上做的事情:实际测量值(厘米、英寸)。它完全将像素密度排除在外。当然,图像在 Photoshop 中仍然以像素为单位,但在 CSS 中以实际大小标记。然后可以在浏览器和操作系统之间处理渲染作者意图的软件层。这样,媒体查询就可以按预期的方式工作:判断用户将在其中查看页面的屏幕大小。
还有一件事……对于那些担心为不同设备制作多张图像的人来说。真的有必要吗?Adobe Illustrator 和 Photoshop 都有一个“存储为 Web 所用格式”功能,您可以在其中将图片保存为 PNG 格式。我一直在使用它,并以小文件大小制作了一些非常高质量的图形(有时也是图片)。128 色的图形看起来很棒,有时甚至比 256 色的图形还要好。对于高质量的图片,也许你可以使用像云缩放这样的东西?只是一些建议。
png 文件是矢量图形的最佳选择,但不是照片。虽然有人建议使用更像 eps 文件的 svg,但并非所有浏览器都支持 svg。PNG 已经存在很长时间了,并且较新的版本包含一个透明层,因此实际上它就像使用 eps 文件一样,eps 文件当然只能用于打印而不能用于网络。
视网膜显示器问题在这个阶段真的很混乱,没有人系统能给出明确的答案,如果浏览器之间有更多的统一性就好了!
Chris,我只想告诉你感谢你为这个网站所做的努力。你提供了一些非常宝贵的信息,我真的很感激。c
强烈附议;具体来说,我真的很感谢你回去用最新的发展来更新你的旧帖子。在一个旧博客文章可以登上搜索结果榜首并继续向人们提供过时信息的世界里,这一点非常重要。
如果你有时间,请帮忙。
好的,我正在为 Retina 设备使用一种非常标准的媒体查询。
@media
(-webkit-min-device-pixel-ratio: 2),
(min-resolution: 192dpi) {
/* Retina 特定的内容在这里 */
}
在某些 Android 设备/浏览器(特别是运行 Chrome 的 S3)中,看起来 Retina 图像正在加载,但没有加载 background-size 属性。所以图像占用的空间超过了它应该占用的空间。
有没有人遇到过这样的情况,或者有资源可以为我指出解决方案。
谢谢大家。
你的 css 中有 background-size 标签吗?我认为这对于防止某些浏览器放大背景以补偿分辨率是必要的。因此,如果你的视网膜特定背景图像是 200px x 200px,你应该声明“background-size: 100px 100px”。
这是否意味着你需要一系列图像
2560px 宽
1920px 宽
1540px 宽
960px 宽
480px 宽
用于背景封面图像
如果在分辨率为 1.5 倍的移动设备显示屏或 1 倍的显示屏上提供分辨率为 2 倍的背景图像,会发生什么情况?换句话说,图像分辨率大于显示分辨率……图像以显示分辨率完全显示还是……?视网膜屏幕的 2 倍图像分辨率为多少 ppi……通常必须在 Fireworks、Photoshop 还是 Gimpshop 中创建?
我在响应式网站的项目中遇到了一个问题。在计算机上,我将在一行中显示 10 张图像,但在手机上,我将在一行中只显示 5 张图像
你好,Chris Coyier 先生,感谢你的建议,我不明白一件事,你提到了很多关于视网膜显示器的 css,哪种 css 用于视网膜显示器?
提前致谢..
你使用
min-resolution: dpi
而不是
max-width: px
是否有原因?如果视网膜 iPad 的分辨率为 2048 x 1536,我认为代码应该是这样的
@media (-webkit-min-device-pixel-ratio: 2),
(max-width: 2048px;) {
.mobile: css;
}
我还有一个问题,如果你为 1.5 的比率设置条件代码,它会继续应用于 2.0 的比率吗?或者它会默认回到 1.0 的比率?
@Alan,
原因是,例如,一台 30 英寸的显示器可能水平方向上有 2048 个像素,而一台 10 英寸的平板电脑水平方向上也可能有相同数量的像素。
但是,30 英寸显示器的 DPI 将是平板电脑 DPI 的三分之一:
2048/30
对比2048/10
。我个人不喜欢 W3C 选择使用
{min, max}-resolution
术语来达到此目的,因为正确的术语是像素密度,而不是像素分辨率。嗨,
您是如何得出
min-resolution: 192dpi
的?如果我们考虑到图像通常是72dpi
,它不应该应该是min-resolution: 144dpi
吗?如果我们考虑到 iPhone 4 的像素密度是326dpi
,它不应该应该是min-resolution: 326dpi
吗?@Quoterature
是的,但这就是
@media (-webkit-min-device-pixel-ratio: 2),
因为 iPhone 和全尺寸 iPad 具有相同的 dpi/像素比,但 iPhone 只有 640 像素宽,而 iPad 是 1536 像素宽。如果您不区分最大分辨率,如何为每个设备创建不同的设计?
嗨,
我遇到了同样的问题。我需要区分不同布局的像素大小。
并且 iPad 完全崩溃,而任何 320 像素的东西都是固定的。
当我检查元素时,iPad 查询被忽略,并使用 (-webkit-min-device-pixel-ratio: 2) 获取 320 像素的那个。
CSS 的工作方式类似于 if 语句,它就像 min-device-width 和 max-device-width 以及 webkit….2.0 注册为假,而 iPad 则认为 320 像素为真。
您找到解决方案了吗?我正在调试 Android,并且希望保留 iPad 查询,因为如果我没有用于 Galaxy 手机的 320 像素查询,它就可以工作。
对于谁,我会使用这个 => http://atmedia.info/ 来检查设备的媒体信息…
@media
(-webkit-min-device-pixel-ratio: 2) 和 (width: 720px),
(min-resolution: 192dpi) 和 (width: 720px) 这个媒体查询在 Android 设备和谷歌模拟器中不受支持。
非常有用的东西,但我有一个问题。也许我在这里遗漏了一些东西。
在这个
@media only screen and (min-width: 1300px) {
/* 大屏幕,非视网膜 */
}
在此之前,您已经检查了视网膜,这是有道理的。您写了 /* 大屏幕,非视网膜 */,但我在这里没有看到排除视网膜。
我希望看到这样的东西
@media
only screen and (-webkit-max-device-pixel-ratio: 1.9) and (min-width: 1300px),
only screen and ( max–moz-device-pixel-ratio: 1.9) and (min-width: 1300px),
only screen and ( -o-min-device-pixel-ratio: 1.9/1) and (min-width: 1300px),
only screen and ( max-device-pixel-ratio: 1.9) and (min-width: 1300px),
only screen and ( max-resolution: 191dpi) and (min-width: 1300px),
only screen and ( max-resolution: 1.9dppx) and (min-width: 1300px) {
/* 中等屏幕,视网膜,用于覆盖上述媒体查询的内容 */
}
有什么想法吗?
哎呀,
我应该替换这个
/* 中等屏幕,视网膜,用于覆盖上述媒体查询的内容 */
用这个
/* 大屏幕,非视网膜 */
算了。我理解了这种奇怪的覆盖机制。(我是 CSS 新手,缺乏“else”让我花了一点时间才弄明白)可以有把握地认为 CSS 不是由程序员设计的吗?
@media 查询和一般的 CSS 的行为方式与
switch
块的行为方式非常相似,如果所有case
都没有以 break 语句结束的话。这有点过于简单化了,主要是因为它没有考虑到特异性,但基本上,fallthrough 允许先前声明的任何规则被后面的case
覆盖(继续类比)。嗨!我尝试了上面的代码片段,但由于某种原因,带有 Retina 显示屏的 iPad 会采用 320 像素的 CSS 样式,因为它使用了 -webkit-min-device-pixel-ratio: 2。我试图使用仅影响正确查询的独立样式。我尝试了很多不同的方法,只要我使用 -webkit-min-device-pixel-ratio: 2,iPad 就会选择它,并且 iPad 布局会崩溃。
我首先尝试了这个
@media
only screen and (-webkit-min-device-pixel-ratio: 2) and (min-width: 320px),
only screen and ( min–moz-device-pixel-ratio: 2) and (min-width: 320px),
only screen and ( -o-min-device-pixel-ratio: 2/1) and (min-width: 320px),
only screen and ( min-device-pixel-ratio: 2) and (min-width: 320px),
only screen and ( min-resolution: 192dpi) and (min-width: 320px),
only screen and ( min-resolution: 2dppx) and (min-width: 320px) {
/样式/
}
我的 iPad 查询是这样的
@media screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : landscape) {}
它会被 320 像素的那个完全覆盖。
有什么建议吗?
嗨,Kris,我们可以获得这篇博文的 2014 年更新吗?
那真是太好了!
+1 支持更新版本…
为什么 CSS 不简单地支持“点”单位,这样我就可以用可用的设备像素来表示媒体查询,而不是同时使用 px 和 dppx 单位来进行扭曲?这对浏览器来说很容易实现,不是吗?
停止痛苦
上面写着
“如果您关心用户需要下载多少内容,请不要实施视网膜税。”
我说“如何”?
我有非常具体的背景和叠加图像,我想在小于 480 像素的屏幕上打开,而对于更大的尺寸,我想使用不同的图像集。
我需要什么代码才能忽略视网膜显示屏。
例如,iPhone 3 和 4(以及许多 Android 手机)打开一个 320 像素的背景图像,全宽显示,而不是下载我为更大屏幕准备的 640 像素图像。
谢谢
Github?
从前端框架借用它?
付钱给别人?
自己编写代码?
哈哈!哈哈!
以下方法仍然非常有效。
但正如他在仓库的自述文件中提到的,“项目状态”下,HTML 中现在还有其他更新的选项。但是这个仓库的解决方案也适用于旧的浏览器引擎。我还在使用它。:https://github.com/MattWilcox/Adaptive-Images
我最初为我的框架定制了 adaptive-images.php。
但后来将 adaptive-images.php 替换为来自这个仓库的代码:https://github.com/lencioni/SLIR
您必须添加对 adaptive-images 设置的 cookie 的读取,然后还要添加使用您刚刚读取的 cookie 中的值来调整大小的方法。
您可以通过预缓存显着加快 SLIR 的速度。编写一个 (PHP) 脚本来调用 SLIR 的方法来处理流行的屏幕尺寸。例如,iPhone 5 非常流行,请查找它所有可能的纵向和横向尺寸,同时考虑到视网膜显示屏,并调用 SLIR 的方法为每个尺寸的所有网站图像生成调整大小的图像。
当有人第一次使用 iPhone 5 访问时,SLIR 将获取缓存的图像,而不必在第一次请求时调整其大小。
或者在使用 SLIR 上线之前,请激活维护模式。
关闭您的分析。
使用自适应图像和 SLIR 部署新版本的网站。
使用您拥有的尽可能多的不同设备访问新版本的网站。这将进行预缓存。
打开您的分析。
退出维护模式。
那 image-set 呢?
https://www.html5rocks.com/en/mobile/high-dpi/
谢谢 Mattia,这是一个很好的解决方案。
避免视网膜显示屏下载两次图像,并且 Chrome 和 Safari 支持它。
https://caniuse.cn/#feat=css-image-set
这太棒了!我也需要在 jQuery 中使用它……我知道这是一个 CSS 网站,但有人可以为我指明正确的方向吗?
如何定位 s7 和 S7 edge。一个有 5.1 英寸屏幕,另一个有 5.5 英寸。媒体查询需要更改以适应后者。
这还是最新的吗?
您可能希望参考我们最新的媒体查询指南