HTML img srcset / size无法在iPhone 4S上运行

时间:2014-10-06 17:08:32

标签: html css html5 css3 media-queries

我创建了一个基于Eric Portis优秀文章“Srcset and sizes”的网页,但它在我的iPhone 4s上运行不正常。据我了解,4s是320个虚拟(或CSS)像素宽,但由于4S有一个Retina显示器,这实际上转换为640(= 2 x 320)虚拟像素。当我在iPhone上查看下面显示的代码时(在纵向模式下),我看到两行“大”图像,两行中每一行的每个图像占视口宽度的三分之一。我不认为这是对的。

如果我正确理解我的img尺寸属性,那就是说如果浏览器看到视口的最小宽度为768像素,则每个图像应占视口宽度的1/3。否则,占用100%:

sizes='(min-width: 768px) 33.3vw, 100vw'

但是由于我的iPhone视口的宽度是640像素,我不应该看到每行一个图像,每个图像占据视口的整个宽度吗?

如您所见,我正在使用Scott Jehl的picturefill polyfill,因此浏览器不会默认使用src属性中的图像URL。我的小,中,大图像的宽度分别为100,200和300像素。谁能解释我做错了什么?

感谢您的帮助!

<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>Test Srcset/Sizes</title>
    <style type="text/css">
        * { box-sizing: border-box; }
        body, figure { margin: 0; }
        img { display: block; width: 100%; }
        body {
            font-family: Arial, sans-serif;
            text-align: center;
        }
        h1 {
            font-family: Arial;
            font-size: 2em;
            margin: 0.5em;
            text-align: center;

        }
        figure {
            padding: 1px;
        }
        @media (min-width: 768px) {
            figure {
                display: block;
                float: left;
                width: 33.3333333333333%;
            }
        }
    </style>
    <script>
    document.createElement("picture");
    </script>
    <script src="../js/picturefill.min.js" async></script>
</head>

<body>
    <h1>Srcset and Sizes</h1>
    <main>
    <figure>
        <img src='img/mine/small-1.jpg' 
             srcset='img/mine/large-1.jpg 300w,
                     img/mine/medium-1.jpg 200w,
                     img/mine/small-1.jpg 100w'
             sizes='(min-width: 768px) 33.3vw,
                    100vw'
             alt="Image 1" />
    </figure><!--

    --><figure>
        <img src='img/mine/small-2.jpg' 
             srcset='img/mine/large-2.jpg 300w,
                     img/mine/medium-2.jpg 200w,
                     img/mine/small-2.jpg 100w'
             sizes='(min-width: 768px) 33.3vw,
                    100vw'
             alt="Image 2" />
    </figure><!--

    --><figure>
        <img src='img/mine/small-3.jpg' 
             srcset='img/mine/large-3.jpg 300w,
                     img/mine/medium-3.jpg 200w,
                     img/mine/small-3.jpg 100w'
             sizes='(min-width: 768px) 33.3vw,
                    100vw'
             alt="Image 3" />
    </figure><!--

    --><figure>
        <img src='img/mine/small-4.jpg' 
             srcset='img/mine/large-4.jpg 300w,
                     img/mine/medium-4.jpg 200w,
                     img/mine/small-4.jpg 100w'
             sizes='(min-width: 768px) 33.3vw,
                    100vw'
             alt="Image 4" />
    </figure><!--

    --><figure>
        <img src='img/mine/small-5.jpg' 
             srcset='img/mine/large-5.jpg 300w,
                     img/mine/medium-5.jpg 200w,
                     img/mine/small-5.jpg 100w'
             sizes='(min-width: 768px) 33.3vw,
                    100vw'
             alt="Image 5" />
    </figure><!--

    --><figure>
        <img src='img/mine/small-6.jpg' 
             srcset='img/mine/large-6.jpg 300w,
                     img/mine/medium-6.jpg 200w,
                     img/mine/small-6.jpg 100w'
             sizes='(min-width: 768px) 33.3vw,
                    100vw'
             alt="Image 6" />
    </figure>
</main>
</body>
</html>

2 个答案:

答案 0 :(得分:1)

Safari不支持sizes,也不支持srcset的{​​{1}}描述符。 WebKit nightlies支持它,但就测试显示而言,它在Safari分支中没有打开。

您的示例在Chrome 38 AFAICT中运行良好。

答案 1 :(得分:0)

我认为您的问题可能是您正在使用最小宽度。在媒体查询中使用最小宽度时,您告诉浏览器在浏览器窗口大于以下值时应用以下样式。我相信如果你在这种情况下使用max-width,你将获得所需的结果。

这是关于此主题的更多信息的an article