HTML + CSS
  • 🧑‍💻Full-Stack Web Developer
  • ‼️Список корисних ресурсів
  • 📚Теорія
    • 1️⃣HTML
      • Введення в веб-розробку
      • Теги та атрибути
      • Скелет документа HTML
      • Семантика
      • Розмітка тексту
      • Розмітка тексту (2 частина)
      • Зображення
      • Структура HTML-документа
      • Таблиці
      • Символьні підстановки
      • Таблиця кодів символів
      • Відео та аудіо
      • Інструменти розробника
      • Валідація
    • 2️⃣CSS та селектори
      • CSS
      • Селектори
      • Псевдокласи стану
      • Колір
      • Каскад стилів
      • CSS-змінні
      • Одиниці вимірювання
      • Стилізація тексту
      • Властивості шрифту
      • Псевдоелементи тексту
      • Підключення сторонніх шрифтів
    • 3️⃣Блокова модель
      • Основи блокової моделі
      • Геометрія елемента
      • Типи елементів
      • Структурні псевдокласи
    • 4️⃣Flexbox
      • Концепції
      • Властивості контейнера
      • Властивості елемента
    • 5️⃣Grid
    • 6️⃣Зображення і декор
      • Типи зображень
      • Фон елемента
      • Властивості object-fit і object-position
      • Псевдоелементи
      • Градієнт
      • Тінь елемента
    • 7️⃣Векторна графіка
      • Що таке векторна графіка
      • SVG-елементи
      • SVG-документ
      • Використання векторної графіки
      • Зміна властивостей в SVG
    • 8️⃣Позиціонування
      • Позиційовані елементи
      • Властивість z-index
      • Властивість overflow
    • 9️⃣Переходи і анімація
      • CSS-переходи
      • CSS-анімація
      • 2D-трансформації
      • Перспектива
    • 🔟Форми
      • Для чого потрібні форми
      • Елемент <form>
      • Елемент <label>
      • Елемент <input>
      • Елемент <textarea>
      • Елемент <select>
      • Елемент <datalist>
      • Групування полів
      • Валідація форм
      • Валідація на клієнті
      • Псевдокласи стану
    • 🐭Адаптивна верстка
      • Медіа-запити
      • Метатег viewport
      • Інструменти розробника для адаптивної та респонсивної верстки
      • Типи верстки
      • Стратегія Mobile First
      • Вендорні префікси
      • Налаштування теми
    • 🐹Адаптивна графіка
      • Щільність пікселів
      • Респонсивні зображення
      • Респонсивні фонові зображення
      • Респонсивний елемент <img>
      • Елемент <picture>
    • 🦁Методологія ВЕМ
    • 🐶Препроцесор SASS
    • 🐰CSS фреймворки
      • Що таке CSS фреймворки
  • 👷‍♂️Практика
    • 👷Практика
  • Про мене
    • Про мене
Powered by GitBook
On this page
  1. Теорія
  2. Адаптивна графіка

Респонсивні фонові зображення

Респонсивні фонові зображення створюють за допомогою CSS та медіа-запитів.

Спочатку для елемента потрібно встановити базові властивості для фонового зображення - розмір і посилання на зображення.

.box {
  width: 100px;
  height: 200px;
  background-image: url('image.png');
  background-size: 100px 200px;
}

Якщо у елемента немає фіксованих розмірів, то можна задати властивість cover.

.box {
  background-image: url('image.png');
  background-size: cover;
}

Утім в такому випадку навіть на Retina дисплеях буде відображатися звичайне фонове зображення. Для того, щоб підʼєднати зображення підвищеної щільності пікселів використовують медіа-запити. Якщо на пристрої екран підвищеної щільності, то стиль (посилання на зображення) перевизначиться.

.box {
  background-image: url('image.png');
  background-size: cover;
  
  @media (min-device-pixel-ratio: 2),
  (min-resolution: 192dpi),
  (min-resolution: 2dppx) {
    background-image: url('image@2x.png');
  }
}

min-device-pixel-ratio - Медіа-функція у якій вказують цільність екрану (коефіцієнт між CSS-пікселями та фізичними пікселями).

min-resolution - Медіа-функція у якій вказують параметри щодо кількості точок на дюйм. Цю медіа-функцію потрібно вказати з двома значеннями:

  • dpi (dots per inch) - кількість фізичних пікселів на дюйм екрана. На екранах стандартної щільності пікселів в одному дюймі 96 точок. На екранах з подвійною щільністю пікселів dpi - 192 і тд.

  • dppx (dots per pixel) - кількість фізичних пікселів в одному CSS-пікселі. Тобто - це щільність пікселів (не по загальній кількості, а по горизонталі та по вертикалі). 1dppx = 96dpi.

З кожної вищеописаної медіа-функції зрозуміло, про яку щільність пікселів йдеться. То чому тоді описують всі три? Справа в тім, що ці медіа-функції ще не стандартизовані між різними браузерами, тому доводиться описувати кожну.

.box {
  background-image: url('image.png');
  background-size: cover;
  
  @media (min-device-pixel-ratio: 2),
  (-webkit-min-device-pixel-ratio: 2),
  (-o-min-device-pixel-ratio: 2/1),
  (min-resolution: 192dpi),
  (min-resolution: 2dppx) {
    background-image: url('image@2x.png');
  }
}

Якщо завантажити цю сторінку на пристрої з Retina-дисплеєм і відкрити інструменти розробника на вкладинці Network, ми побачимо, що завантажилося зображення підвищеної щільності пікселів.

Тепер зайдемо у вкладинку Elements і виділимо наш блок. Переконаємося, що спочатку браузер знайшов зображення для стандартних екранів, потім перевірив медіазапит, що екран з підвищеною щільністю пікселів і тільки після цього почав вантажити відповідне зображення.

PreviousРеспонсивні зображенняNextРеспонсивний елемент <img>

Last updated 1 year ago

Крім того, не всі браузери підтримують медіа-функцію min-device-pixel-ratio і тому треба передбачити й (автопрефікси).

📚
🐹
вендорні префікси