您如何处理客户端的浏览器缩放?


22

我在页面上有很多图像,一个图库。我希望图像保持清晰,因此我不进行任何浏览器缩放,而是使用图像的原始尺寸。

但是,这仅在浏览器缩放级别为100%时有效。当我增加或减少缩放级别时,图像质量下降。

默认情况下,某些客户端实际上具有不同的缩放级别。我想知道,您将如何处理它,我们将如何处理呢?

干杯


1
很好的问题,这经常使我烦恼。本文是有用的背景资料,但除了将x2尺寸的图像以固定的宽度和高度放置并让浏览器对其进行分类(有明显的缺点,但解决了此问题和像素密度问题)外,我还没有看到任何完美的答案)。
user56reinstatemonica8 2013年

我不确定您期望什么样的答案。显然,您不想使用自动调整大小。您是否在问如何阻止浏览器调整图像大小,以便其他元素围绕原始图像大小排列?如何为每个可能的缩放级别自动提供准备好的图像?或者您有什么想法?此外,您为什么要这样做?如果用户难以以原始缩放正确查看页面,则他们可能不会注意到缩放后的锐利和自动调整大小之间的区别。
Rumi P. 2014年

6
你不处理。这是用户首选项。无需干预。
2014年

1
他没有问如何干扰用户的偏好。他询问如何处理大量用户的事实默认放大,因此会得到颗粒感的图像,如果图像是在原来的尺寸。
user56reinstatemonica8 2013年

@ user568458是的。就是这样。真的没有什么可处理的。
2014年

Answers:


21

我认为大多数其他答案都没有抓住重点:这并不是要覆盖用户的偏好,而是要在用户设备为每个CSS像素分配多个物理像素(即“ 参考像素 ”)的常见情况下提供最佳质量的图像。”,导致浏览器按比例放大图像,使其像素化并呈颗粒状。

我在下面建议的解决方案,但首先是实现这种情况的四种方法:

  • 最稀有: 用户选择放大。没什么大问题,因为这是他们的选择。
  • 出乎意料的普遍: 默认情况下,用户的浏览器被放大。例如,许多高像素密度的Windows计算机默认情况下会放大到125%或更高,而Firefox最近(令人困惑!)做到了,在这种情况下,它告诉用户将实际放大到125%时放大到100%,让他们挠头,想知道为什么一切突然看起来很粗糙。
  • 很常见:大多数Android设备(和其他设备?)的像素比都大于1。这意味着实际上每个“ CSS像素”都使用一个以上的物理像素进行显示-因此设置为200px x 200px的图像width: 200px; height: 200px;实际上会缩放该200px x 200px的图像跨越200 x 200像素,可能会变得粒状。
  • 很常见:许多现代的Apple设备都具有“ 视网膜显示器 ”。这基本上与像素比率为2的Android设备相同,但具有更好的营销效果,并且具有一些自定义属性,可以按名称进行检测。

这些中的任何一个都将导致John出现令人惊讶的粒状图像画廊的问题。


我希望有人能够很好地解决这个问题,但是现在,这是我的首选方法,从最有效但最不普遍的方法开始:

  1. 如果可能,请使用vector-SVG(如果仍需要支持IE8,则使用Raphael.js)。实际上,这只是图标,图表等的选项,而绝不是照片的选项。由于需要处理,非常复杂的SVG在低端移动设备上也可能很笨重。
  2. 如果可能,请检测设备的像素比率,并根据该比率提供图像。这也可以解决Windows上的Firefox问题,因为Windows上的Firefox在放大和缩小时会更改其像素比率读数。缺点是,它成为棘手的编码问题,涉及服务器和客户端的开发工作。
  3. 如果不可能使用1.和2.,但这确实很重要,并且图像质量比例如加载时间更重要,只需将图像加倍即可。

    • 这就是Google在其首页上使用徽标的方式:将538px x 190px PNG图像压缩在269px x 95px的容器中。它也与响应图像的工作原理大致相同。

    • 这曾经被认为是不好的做法,因为旧版本的IE在缩小图像方面很糟糕,但是现在很少使用,并且比高像素密度的屏幕要少得多。它仍然有些不理想,因为它将增加图像大小并因此增加加载时间-这是您需要逐案判断的折衷方案。

    • 将大小加倍是很常见的,因为很少有设备的比率大于2,几乎没有用户放大超过200%,并且将图像缩放50%比其他数量更干净。
  4. 如果不可能1、2,并且加载时间对于3来说不是一个优先事项,那么我不知道有任何其他选择,我的建议是不要担心,因为互联网上有一半的站点都存在相同的问题,并且您网站上有此问题的人在其他网站上也会有此问题。糟糕,Windows上的Firefox甚至像素化了自己的UI按钮 ...

我认为用户放大是“最罕见的”。这就是为什么该功能首先存在于……放大的原因。此外,尽管在缩放时使用更高分辨率的图像有一些有趣的想法,但请注意,这样做可能会带来可用性挑战。例如,我不希望浏览器每次在浏览器中单击“缩放”选项时都获取新图像。
2014年

2
如果您使用的是jpg,则将图像的大小加倍(如第3节所述),并以相当多的图像压缩(低至质量40)进行保存可以为您提供较小的文件大小。一旦按比例缩小,压缩伪影就不可见了。结果会有所不同,尤其是在图像包含渐变的情况下。
Dominic 2014年

1
尽管在撰写本文时还很新,因此受到支持,但新的<picture>元素似乎值得在此提及。
user50849 2014年

1
注意:在photoshop中保存网页时,将jpg品质设置为61%,同时将预期尺寸增加一倍,则文件大小将与100%的预期尺寸几乎完全相同。因此,我已经开始将我所有的jpeg压缩到61%,并以定义的高度/宽度为其提供服务(这还具有使浏览器甚至在图像加载之前就让其知道更多有关布局的优点!)
Kjeld Schmidt

4

正如DA01所说,您不应对此做任何事情。

缩放是用户指定的选项,因此受其控制。他们决定修改的设置不应该由您负责。

您可以考虑使用不同的浏览器和版本,而不能使用其他浏览器和版本,但是合理地说,您不应该考虑用户的缩放比例。

当然,您可能会占到125%或150%(甚至没有必要)。但是200%,300%还是更多?只是没有任何意义。

如果用户使用高对比度窗口主题怎么办?如果他们不断使用放大镜怎么办?谁在乎?

理想情况下,您的网站足够灵活,不会在很小的缩放差异之间产生真正的不同,但是随着缩放,图像的质量会下降,但这不是您的责任。

当然,这只是我的意见,但是我工作的公司也明确告诉客户我们不支持他们的缩放偏好。


关于具有超宽或窄色域设备等的用户呢...是的,我同意
joojaa 2014年

1

其他人针对您将要遇到的问题给出了一些很好的提示,而我在这一领域还不够出色,无法提供出色的教程,但是...

您可能想要设计一个响应站点,该站点根据用户的分辨率/设备进行调整,然后您可能正在寻找将请求时将图像切换到较高或较低分辨率文件的代码,而不是拉伸和压缩您拥有的图像。

当我上次尝试执行此操作时,我使用了media-query.js和picturefill.js。参见:http : //sensitivedesign.is/resources/images/picture-fill。我有一个3列的布局,其中一些图像会跨越两列...当浏览器窗口足够小时,大图像将切换到较小的res版本,该版本只有一列宽。用户的浏览器只会加载他们需要的文件的版本。(就我而言,砌体插件会移动所有东西以适应)。

当然,那么您的用户必须启用了JavaScript ...


尽管我全都致力于响应式Web设计,但是与用户缩放(与浏览器大小无关地按比例缩放所有内容的大小)相比,它可以解决一个不同的问题(重排以处理不同的浏览器大小)
DA01,2014年

0

您不能强迫用户动手。用户设置不是您要使用的。设置并规避设置是一个坏主意,这可能是用户做某事的原因。无论哪种情况,您都不能保证各种设备上的任何东西。

实际上,如果您进入技术方面,它会变得更加有趣。您确实可以通过网页提供通往王国的钥匙。看到用户下载了该网页,并且该用户现在可以使用该网页执行任何操作。您无法控制这一层,因为它毕竟是在用户计算机上运行的,他们可以随心所欲。即使stackexhange在我的计算机/移动设备上看起来也不像在您的计算机/移动设备上看起来一样。我最终会自动更改GUI的某些方面,以修复2个渲染错误并添加了2个快捷方式。


3
我认为他们并没有试图阻止用户放大,但是请确保,例如,由于Windows奇怪用户的浏览器默认缩放比例为125%时,图像仍然显得清晰且不会出现像素化。
user56reinstatemonica8 2013年

1
没关系,是同一件事
joojaa 2014年

2
它们实际上是不一样的...例如,Google徽标是在269px x 95px容器中的538px x 190px PNG图像。这意味着,如果放大或使用高像素密度的屏幕,则图像不太可能被像素化,因为浏览器可以使用多余的像素数据。Google 不会通过这种方式使用用户的缩放设置。
user56reinstatemonica8 2013年

您最终将做什么取决于您。但是,如果有人使用259%的缩放比例,那么..
joojaa 2014年

1
好好考虑一下今天,事情会在未来,非常接近的将来发生变化。因此,任何有视力障碍的人今天明天都会有200%的人得到补偿,这将使该问题变得更糟。不论哪种情况,问题迟早都会变得一发不可收拾。您只是无法取得暂时的胜利,就必须改变系统。
joojaa 2014年

0

在HiDPI屏幕上放大图像的烦人行为会导致照片模糊(又称摄影师的噩梦),这也困扰了我一段时间。我还想知道没有简单的CSS属性可以禁用图像属性。

我当前使用CSS的解决方案如下所示:

@media only screen and (min--moz-device-pixel-ratio: 1.25),
    (-o-min-device-pixel-ratio: 5/4),
    (-webkit-min-device-pixel-ratio: 1.25),
    (min-device-pixel-ratio: 1.25) {
        img {
            --pic-width: 460px;
            width: calc(var(--pic-width) / 1.25 - var(--pic-width) + var(--pic-width));
        }
}
@media only screen and (min--moz-device-pixel-ratio: 1.5),
    (-o-min-device-pixel-ratio: 3/2),
    (-webkit-min-device-pixel-ratio: 1.5),
    (min-device-pixel-ratio: 1.5) {
        img {
            --pic-width: 460px;
            width: calc(var(--pic-width) / 1.5 - var(--pic-width) + var(--pic-width));
        }
}
@media only screen and (min--moz-device-pixel-ratio: 1.75),
    (-o-min-device-pixel-ratio: 7/4),
    (-webkit-min-device-pixel-ratio: 1.75),
    (min-device-pixel-ratio: 1.75) {
        img {
            --pic-width: 460px;
            width: calc(var(--pic-width) / 1.75 - var(--pic-width) + var(--pic-width));
        }
}
@media only screen and (min--moz-device-pixel-ratio: 2.00),
    (-o-min-device-pixel-ratio: 2),
    (-webkit-min-device-pixel-ratio: 2.00),
    (min-device-pixel-ratio: 2.00) {
        img {
            --pic-width: 460px;
            width: calc(var(--pic-width) / 2.00 - var(--pic-width) + var(--pic-width));
        }
}

如果需要,下一步将使用类来定义和设置不同的图像大小。我不知道一种动态获取图像大小的方法。CSS函数attr()似乎对此不起作用。


-1

因此,这将更多是编程问题。但是,使用JQuery甚至只是平面CSS,您都可以根据用户的屏幕宽度,屏幕高度等显示不同的图像。

同样,尽管这可能不是要问的stackexchange。


问题不在于屏幕尺寸。关于浏览器缩放设置。
2014年

-1

您可以简单地通过网站顶部的HTML进行添加

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

开发人员不建议对每种类型的网站都建议这样做,但应满足您的要求。


我认为这对桌面浏览器没有任何影响。
2014年

1
我最近尝试解决此问题,但不起作用。同样,即使它确实起作用,也将以错误的方式解决问题-防止缩放,而不是使图像在缩放时保持清晰度。
user56reinstatemonica8 2013年

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.