TGViewer
<divelopers> <divelopers> @alexnozer_dev · 1.18K subscribers
Post #237 837
Загрузка скрытых изображений

Представьте задачу: нужно показывать разные изображения в зависимости от ширины области просмотра. Это может быть баннер в верхней части страницы с широким изображением для компьютеров и узким для телефонов. Иногда эту задачу решают двумя <img> и служебными классами, которые управляют отображением.

<div class="banner">
<img
src="banner-desktop.webp"
alt=""
width="1200"
height="600"
class="mobile-hide"
>
<img
src="banner-mobile.webp"
alt=""
width="400"
height="200"
class="desktop-hide"
>
<!-- пустой alt, декоративные изображения -->
</div>


Классы mobile-hide и desktop-hide скрывают изображения на мобильных и десктопных экранах. Сами классы могут называться иначе, но суть в том, чтобы скрывать элемент на определённых размерах экрана.

@media (width <= 599px) {
.mobile-hide {
display: none;
}
}

@media (width > 600px) {
.desktop-hide {
display: none;
}
}


По умолчанию изображения с display: none не загружаются. Но если изображение находится в верхней части страницы, которая видна при начальной загрузке, то вопреки display: none оно всё равно будет загружаться. Chrome, например, загружает 6 первых изображений, игнорируя свойство display.

Поэтому правильнее будет использовать элементы <picture> и <source> в сочетании с атрибутом media для выбора источника изображения в зависимости от медиа-запроса.

<picture class="banner">
<source
src="banner-desktop.webp"
media="(width > 600px)"
width="1200"
height="600"
>
<img
src="banner-mobile.webp"
alt=""
width="400"
height="200"
>
</picture>


Также не стоит добавлять изображениям в верхней части страницы атрибут loading="lazy". Ещё можно поэкспериментировать с приоритетом. А ещё <picture> можно использовать как контейнер и задавать ему любые свойства, чтобы не оборачивать в лишний <div>.

#html #performance
  • 🔥 27
  • 👍 4
  • 👎 2
  • ❤ 1
More from @alexnozer_dev
  1. Sep 23, 2026Images Preview На некоторых сайтах, где надо показывать изображения в высоком качестве, дл…
  2. Sep 21, 2026Реализация пользовательских атрибутов Под конец прошлого года я рассказывал об API пользов…
  3. Sep 14, 2026Подклассы Event вместо CustomEvent Многие библиотеки предоставляют систему событий в качес…
  4. Sep 11, 2026Эволюция стилей в темах Shopify Адам Ватан на днях поделился новостью, что Shopify выкупил…
  5. Sep 9, 2026Persistent Widgets Многие сайты не должны быть SPA. Но иногда эта архитектура продиктована…
  6. Sep 7, 2026Processing Instructions и маркеры В DOM всё представлено в виде узлов (Node) разных типов.…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →