3

我正在使用 Twitter Bootstrap 的响应式网格,我想在我的页面中包含一些图像,如下所示:

<div class="row">
<div class="span3"><img src="img1.png" /></div>
<div class="span3"><img src="img2.png" /></div>
<div class="span3"><img src="img3.png" /></div>
<div class="span3"><img src="img4.png" /></div>
</div>

但是,很难使图像具有响应性,因为使用 Bootstrap 图像宽度与视口宽度没有直接关系,这排除了例如Filament方法。

在上面的示例中,在 1080 像素宽的屏幕上,图像堆叠,因此每个 div 占用的视口宽度不到 25%,并且每个图像只需要大约 250 像素宽。然而,在 750 像素宽的屏幕上,div 垂直堆叠以占据 100% 的视口宽度,因此每个图像需要大约 750 像素宽。

我在想我可以做类似的事情:

  • 默认情况下,加载一个 spacer.gif:<img src="spacer.gif" />
  • 在页面加载时,检查图像的宽度,并加载适当的大小

但后来我意识到这不适用于非 JavaScript 用户。我可以默认加载一个小图像,但是非 JS 用户在大屏幕上的体验很差,一些用户还必须同时加载小图像和大图像。

有什么建议吗?

4

2 回答 2

1

如果您主要关心的不是在移动设备上加载不必要的大图像,并且您正在寻找非 JS 选项,那么您可能会发现像Sencha.io Src这样的东西很有用。基本上,您通过 Sencha 路由所有图像:

<div class="row">
  <div class="span3"><img src="http://src.sencho.io/http://yourimageserver.com/img1.png" /></div>
  <div class="span3"><img src="http://src.sencho.io/http://yourimageserver.com/img2.png" /></div>
  <div class="span3"><img src="http://src.sencho.io/http://yourimageserver.com/img3.png" /></div>
  <div class="span3"><img src="http://src.sencho.io/http://yourimageserver.com/img4.png" /></div>
</div>

Sencha 服务器然后检查 HTTP 请求标头中的用户代理,然后根据他们对浏览器的规范提供预定的大小。

于 2012-07-08T23:54:56.203 回答
0

如果你想解决这个客户端,你可以使用PictureFill

基本上,它实现了与 W3C 中提议的元素类似的解决方案。您可以将以下内容插入到您的标记中(来自 PictureFill 网站上的示例):

<div data-picture data-alt="A giant stone face at The Bayon temple in Angkor Thom, Cambodia">
    <div data-src="small.jpg"></div>
    <div data-src="medium.jpg"     data-media="(min-width: 400px)"></div>
    <div data-src="large.jpg"      data-media="(min-width: 800px)"></div>
    <div data-src="extralarge.jpg" data-media="(min-width: 1000px)"></div>

    <!-- Fallback content for non-JS browsers. Same img src as the initial, unqualified source element. -->
    <noscript>
        <img src="external/imgs/small.jpg" alt="A giant stone face at The Bayon temple in Angkor Thom, Cambodia">
    </noscript>
</div>

<noscript>避免了浏览器必须下载 spacer.gif 并且还可以在没有可用 JS 的情况下作为后备;用户只需获得适合禁用 javascript 的旧手机的 small.jpg。

媒体查询允许您根据(min-width: ...)设备大小选择断点,您也可以将(min-device-pixel-ratio: 2.0)其用于 Retina 显示器等高清设备。

出于您的目的,您可以设置如下内容:

 <div data-src="image_250x250.jpg"     data-media="(min-width: 1080px)"></div>
 <div data-src="image_750x750.jpg"     data-media="(min-width: 750px)"></div>

并在您的 css 中使用媒体查询来确保 250x250 图像堆栈。

希望有帮助!

于 2013-05-30T04:03:40.340 回答