【问题标题】:Responsive web design, scaling images; save bandwidth?响应式网页设计,缩放图像;节省带宽?
【发布时间】:2014-04-26 04:48:50
【问题描述】:

我一直在阅读一些关于制作响应式网站的主题,然后是使用图片时出现的问题,因为显然它会占用大量带宽(因为您将拥有一张适合桌面的图片可能是 1080 像素,然后将其缩小到可能只有 300 像素的移动设备上,但文件大小仍与较大的相同)

我的问题是,在不同布局的可互换 CSS 中,您不能在其中定义图像吗?也就是说,您有 2 个@media 查询,然后您将有 2 个不同大小的图像来迎合布局,这将占用更少的带宽(例如,您有一个 1080 像素的桌面站点和一个 300 像素的图像)移动站点将占用更少的带宽)

这种做法有错吗?或者这是一个可行的解决方案?有人可以解释这如何解决问题,就像我相信的那样吗?我想做一些响应式网站,但这对带宽很友好

【问题讨论】:

  • 我认为不需要多张图像,较小的设备具有更高的 dpi。
  • 你有一个新的 img 标签属性:srcsetw3.org/html/wg/drafts/srcset/w3c-srcset,webkit 似乎理解了一部分 webkit.org/demos/srcset
  • 大多数网站不需要节省带宽,因此您应该只使用一张较大的图像。但是如果你想做多张图片,你可以使用 jquery .width() 函数找到宽度,然后使用 AJAX 获取较小的图片。
  • @DavidCorbin 可能没有桌面版,但我相信移动版有,因为有些人的供应商会限制带宽
  • @GCyrillus 感谢您提供这些链接,我会阅读它们:)

标签: html css responsive-design


【解决方案1】:

您可以使用媒体查询并将图像设置为background-image 上的div 元素。

这里是:http://jsfiddle.net/qsByJ/

@media all and (min-width: 520px) {
  #demo{
      background-image:url(http://unreasonableatsea.com/wp-content/uploads/2012/03/demo-logo-large.png);
        height:439px;
        width:660px;
  }
}
@media all and (max-width: 520px) {
  #demo{
      background-image:url(http://i1.sndcdn.com/artworks-000043575260-xlr304-original.jpg?164b459);
        background-repeat:no-repeat;
        height:282px;
        width:425px;
  }
}

这样您就可以为不同的设备提供不同的图像。

您应该考虑使用不同图像的几点原因:

  • 在较旧的设备上,大图像可能会使网站崩溃或使其移动速度非常慢,因为内存很小。
  • 如果页面上有更多图像,性能会受到影响,因为在某些设备上,每次绘制时,图像都必须按比例缩小。
  • 如果你有很多图片(例如社交网站),带宽消耗会大很多。

【讨论】:

  • 啊,是的,这是我希望得到的更多答案:)!谢谢你。请问如果它是在移动设备上,它会尝试加载两张图片然后显示其中一张,还是会根据@media 查询仅加载它需要的一张?
  • 据我所知,它会加载它需要的。
【解决方案2】:

我认为这是一个很好的问题!

我自己也遇到过这个问题。经过几天的搜索,我设法找到了一个完美的解决方案。

查看图像的精灵表。这是您的所有图像都包含在单个图像中的地方,然后只需要发送一个图像请求。从而节省大量带宽。

更好的是,如果您以高分辨率制作精灵表并使其根据屏幕尺寸缩小,则不会发生像素化,从而为您提供所需的结果。

我希望这会有所帮助!

【讨论】:

  • 当你说它缩小的时候,它的文件大小仍然和大图一样吗?正如你所说的听起来像最初的问题,有一个大图像然后试图缩小它,但这仍然意味着它可能是一个大图像(特别是对于视网膜就绪显示器)。还是我认为带宽问题是错误的,问题是图像请求导致带宽消耗而不是单个图像,就好像您有多个带有定义图像的 CSS 表一样,它会尝试将所有图像加载到缓存中,同时只显示相关的?
  • Oki doki - 如果您有许多较小的不同图像,与单个大图像相比,这将显着增加带宽。这就是为什么精灵表现在变得越来越流行的原因,这是由于单个 http 请求而不是为每个单独的图像发送新请求。 :)
  • Sprite 表已经流行了十年或更长时间。它们的优点是您只发出一个请求而不是多次请求(节省用于请求的时间)并且您使用的带宽更少,因为您没有发送headers(带宽增益不是那么大)。
猜你喜欢
  • 2016-04-30
  • 2020-05-26
  • 1970-01-01
  • 2012-12-21
  • 2014-05-27
  • 1970-01-01
  • 2013-03-30
  • 2012-01-15
  • 1970-01-01
相关资源
最近更新 更多