Как использовать img device-соотношение пикселей, srcset, размеры в отзывчивых изображениях для сетчатки
сегодня я играл с отзывчивыми изображениями и пытался убедиться, что изображения нужного размера загружаются и отображаются для следующих точек привязки: 480px, 900px, 1800px, 2400px.
вот наценка:
<img
sizes="(max-width: 2400px) 100vw, 2400px"
srcset="
boat-480.jpg 480w,
boat-900.jpg 900w,
boat-1800.jpg 1800w,
boat-2400.jpg 2400w"
src="boat-2400.jpg"
alt="This is a boat">
до сих пор мне удалось сделать браузер скачать нужную версию изображения, так что, когда я эмулировать 480px
экран хром С соотношение пикселей 1 загрузка браузера boat-480.jpg
.
однако я заметил, что, хотя все это кажется хорошим, браузер также загружает boat-1800.jpg
и фактически отображает это в представлении вместо boat-480.jpg
.
странно, когда я тестировал это на Chrome на iOS, браузер фактически загрузил boat-2400.jpg
что еще более тревожно.
есть идеи, почему это может произойти? Я что-то пропустил? Я думаю, что мне не нужно sizes
атрибут, потому что у меня есть изображение, установленное на 100vw
во всех взглядах, но, возможно, есть что-то еще мне здесь не хватает.
если вы заинтересованы, вы можете увидеть страницу здесь:
Я очень ценю вашу помощь с этим.
1 ответов
1. Основы
устройства-пикселей соотношение
устройства-пикселей соотношение - это количество пикселей устройства на пиксель CSS, которое связано с:
- плотность пикселей устройства (количество физических пикселей на дюйм)
- уровень масштабирования в браузере Итак, больше плотность пикселей и/или выше масштаб более устройства-пикселей соотношение.
srcset
атрибут & x
дескриптор
On <img>
тега x
дескриптор в srcset
атрибут используется для определения устройства-пикселей соотношение. Итак:
<img src="image.jpg" srcset="image-1x.jpg 1x, image-2x.jpg 2x, image-3x.jpg 3x">
- для отношения устройство-пиксель 1, Изображение image-1x.jpg будет использоваться.
- для отношения устройство-Пиксель 2, Изображение image-2x.jpg будет использоваться.
- для коэффициента прибор-пиксела 3, изображение image-3x.jpg будет использоваться.
- для возврата в
src
атрибут (изображения.jpg) будет использоваться.
srcset
атрибут & w
дескриптор
если вы хотите другое изображение на большом или меньшем окне просмотра,w
дескриптор в srcset
и новый атрибут (sizes
) входит в игру:
<img src="image.jpg" srcset="image-1x.jpg 200w, image-2x.jpg 400w, image-3x.jpg 600w">
это упоминает, что ширина первого изображения 200px
, второе изображение-это 400px
, и третье изображение 600px
. Кроме того, если экран пользователя 150 CSS pixels
широкий, это приравнивается к следующему с точки зрения x
дескрипторов:
<img src="image.jpg" srcset="image-1x.jpg 1.33x, image-2x.jpg 2.67x, image-3x.jpg 6x">
sizes
атрибут
фактическая реализация, где вы хотите другой размер изображения (разной высоты, ширины) на разных размерах экрана осуществляется с помощью вместе с w
дескриптор .
<img src="image.jpg" sizes="50vw" srcset="image-1x.jpg 200w, image-2x.jpg 400w, image-3x.jpg 600w">
если ширина браузера 500 CSS pixels
изображение будет отображается 250px
широкий (из-за 50vw
). Теперь, это эквивалентно указанию:
<img src="image.jpg" srcset="image-1x.jpg 0.8x, image-2x.jpg 1.6x, image-3x.jpg 2.4x">
так,1.5x
дисплей image-2x.jpg
будет загружен браузером, так как он дает устройства-пикселей соотношение of 1.6x
(что наиболее подходит для 1.5x
дисплей).
2. Отвечая на ваш вопрос
Вы упомянули, что подражали 480пкс экран ширины CSS.
потому что вы установили sizes
to 100vw
, что эквивалентно определению:
<img src="boat-2400.jpg" srcset="
boat-480.jpg 1x,
boat-900.jpg 1.88x,
boat-1800.jpg 3.75x,
boat-2400.jpg 5x">
есть шанс, что у вас есть 3x
экран, и, таким образом, браузер загружает .
вопросы
как ни странно, когда я тестировал это на Chrome на iOS, браузер фактически загрузил boat-2400.jpg, что еще более тревожно.
это было бы связано с более высоким устройства-пикселей соотношение вашего устройства iOS , которая, вероятно, будет что-то около 5.
я что-то пропустил здесь?
я так не думаю.
я полагаю, что мне не нужен атрибут размеров, потому что у меня есть изображение, установленное на 100vw во всех представлениях
если вы хотите использовать w
дескриптор, вам нужно .