我試圖在我的網站上使用srcset和大小實現響應式圖像。在我的電腦上進行測試時,所有外觀和工作都很棒與當前頁面寬度相比,下載的圖像是次最大的圖像(500px的頁面寬度將檢索720px寬的圖像)。這是我用什麼:瞭解響應式圖像和設備像素比例
<img src="image-240w.jpg"
srcset="image-1140w.jpg 1140w,
image-940w.jpg 940w,
image-720w.jpg 720w,
image-480w.jpg 480w,
image-240w.jpg 240w"
sizes="(max-width: 1140px) 100vw, 1140px">
在我的手機是我困惑的地方。我有一個具有1920x1080分辨率屏幕的Nexus 5X,設備像素比率爲2.5。通過將視口元添加到我的頁面(<meta name="viewport" content="width=device-width, initial-scale=1">
),媒體查詢按預期做出響應 - 就好像我的設備寬度僅超過400px(1080px/4 = 432px)。爲了支持下面的例子A.這是一個480像素寬的圖像,如預期的那樣,掛在頁面的邊緣約48px。示例B是1140像素寬的圖像,顯然比432px寬的視口大很多。示例C是上面的img
標記的結果(並且是我的目標)。
起初,我感到高興的是一切工作。但是,使用我的開發人員工具查看時,可以看到使用srcset的img
標記實際下載了1140像素寬的圖像。在我看來,應該已經選擇了480px寬的圖像(僅比432px寬的視窗大)。相反,下載的圖像是用於1080像素寬屏幕的圖像。
爲什麼媒體查詢會如我所預期的那樣響應(就好像我的屏幕只有432px寬),但響應式圖像只關心與真實屏幕分辨率相匹配的圖像大小?它必須與2.5像素比例有關,但我不知道如何。
我的目標是在我的設備上,我會得到480像素的圖像,而不是最大的。我該如何做到這一點?
編輯
或許我的願望是不正確的,而瀏覽器做什麼它應該做的事情。解釋爲什麼,當一個480像素寬的圖像已經懸掛在屏幕邊緣時,它應該仍然會選擇1140像素寬的圖像。
接聽/證明
正如下面的答案中指出,設備做什麼它應該做。爲了證明一點,這裏是我的設備(432個CSS像素,但1080個設備像素),顯示一個480像素和1140像素的圖像。儘管480px圖像與CSS像素匹配,但與匹配設備像素的1140px圖像相比,它非常模糊。所以,該設備知道最好的,雖然我期望它選擇較小的圖像,但它知道它需要較大的圖像(來自 響應的srcset和大小)才能正確呈現圖像。