Атрибут sizes
определяет условие носителя, которое применяется к текущей ширине устройства (выбрано первое применяемое условие носителя).Затем браузер проверяет атрибут srcset
, чтобы найти изображение, наиболее точно соответствующее размеру слота, определенному атрибутом sizes
.Обратите внимание, что браузер выбирает большее изображение для дисплеев с высоким разрешением, таких как Retina (обычно выбирает изображение, близкое к удвоенной ширине, которое оно выберет на экране с «нормальным» разрешением).См. Адаптивные изображения и Адаптивные изображения: если вы просто меняете разрешение, используйте srcset для более подробной информации о том, как это работает.
Так что в вашем случае,вы ожидаете получить изображение banner-small.jpg
на устройстве с «нормальным» разрешением, где ширина устройства составляет не менее 1024 пикселей (и вы также ожидаете получить то же изображение на устройствах с «нормальным» разрешением меньшей ширины из-за большей ширины вашегодругие srcset
параметры изображения).
Некоторые причины, по которым вы можете не получить ожидаемых результатов:
- Старые версии браузера не поддерживают
srcset
- Не указывалось
<meta name="viewport" content="width=device-width">
, чтобы заставить устройства принимать их реальную ширину при загрузке страницы. - Браузеры могут отображать кэшированные изображения вместо выбора наиболее близкого соответствия размера из
srcset
(как вы отметили в своем вопросе). - При попытке отобразить несколько размеров одного и того же изображения на странице, браузеры могут загружать только самое большое необходимое изображение и использовать его в каждом случаехан, загружая несколько изображений).
- Если вы пытаетесь протестировать поведение выбора изображения в какой-либо изолированной среде iframe, такой как jsfiddle, трудно быть уверенным, что браузер интерпретирует размер панели отображения как "«ширина устройства» (у меня были смешанные результаты с
srcset
в этих типах сред).Кажется, он ведет себя разумно в SO-фрагменте для браузеров, таких как Chrome и Firefox (до тех пор, пока вы очищаете кеш).Ниже приведен пример фрагмента (лучше используемого в вашей среде), который наглядно показывает, какое изображение было выбрано при тестировании.
<img srcset="https://via.placeholder.com/300x150 300w,
https://via.placeholder.com/600x300 600w"
sizes="(min-width: 1024px) 600px,
100vw"
src="https://via.placeholder.com/300x150"
alt="placeholder image">