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
  • Фізичні пікселі
  • CSS-пікселі
  • Растрові пікселі
  • Ретинізація графіки
  1. Теорія
  2. Адаптивна графіка

Щільність пікселів

PreviousАдаптивна графікаNextРеспонсивні зображення

Last updated 1 year ago

Відносно нещодавно на ринок активно почали входити дисплеї зі збільшеною щільністю пікселів – це Retina дисплеї (на Apple пристроях) та їх аналоги інших виробників. Відтак якість зображення значно покращилася.

Різні компанії свої екрани зі збільшеною щільністю пікселів називають по-різному. Але для узагальнення у подальшому вживатимемо термін, який запровадила компанія Apple - Retina.

Для пересічного користувача пристрою - це плюс, а для веб-розробників додаткове навантаження під час розробки додатків через збільшення ресурсу для написання коду. Але про це пізніше. Спочатку - основні поняття.

Фізичні пікселі

Фізичні пікселі (device pixel або hardware pixel) - найдрібніші елементи будь-якого дисплея, кожен з яких має яскравість і колір.

Роздільна здатність екрану (screen resolution) - це фізична кількість пікселів на екрані пристрою. Наприклад, роздільна здатність 1920x1080 означає, що екран завширшки 1920 фізичних пікселів і заввишки 1080. Відтак загальна кількість пікселів: 1920x1080 = 2073600.

Щільність пікселів (pixel density) - кількість фізичних пікселів на одиницю площі (зазвичай пікселів на дюйм - pixels per inch (ppi)). Сучасні монітори мають ppi від 96 і вище.

CSS-пікселі

CSS-пікселі - деяка браузерна величина, що використовується для точного відображення контенту і незалежна від екрану.

На звичайних екранах один CSS-піксель збігається за розмірами з одним фізичним пікселем пристрою. Але під час відтворення інформації на екранах високої піксельної щільності в одному CSS-пікселі може міститися більше одного фізичного пікселя.

Розміри елементів в CSS або HTML задають саме в CSS-пікселях. Наприклад якщо створити блок розміром 2px на 2px, то на стандартному екрані це буде блок такої ж кількості фізичних пікселів. А на екранах з подвійною щільністю пікселів в той самий фізичний розмір буде поміщено у 2 рази більше пікселів по горизонталі й у 2 рази більше пікселів по вертикалі. Відтак кількість пікселів, а відповідно і чіткість зображення зросте в 4 рази.

Скільки фізичних пікселів вміщується в один CSS-піксель вказують так: nx. Тут n - кількість фізичних пікселів в одному CSS-пікселі по вертикалі й по горизонталі. Скажімо 3x - означає, що в одному CSS-пікселі по горизонталі та по вертикалі вміщується 3 фізичні пікселі. Відтак чіткість зображення зростає в 9 разів.

Растрові пікселі

Растрові пікселі (bitmap pixels) - найменші частинки з яких складається растрове зображення (png, jpg, gif тощо). Кожен піксель описується своїм розташуванням в системі координат і своїм кольором.

У CSS або HTML-коді розміри зображення вказують в CSS-пікселях. Під час відображення на звичайному екрані, один растровий піксель збігається з одним CSS-пікселем.

А от на Retina-екранах скажімо із щільністю 2x один CSS-піксель множиться на 4 фізичні пікселі. І зображення не підготовлені для відтворення на Retina-екранах відтворюватимуться зі втратою якості.

Відтак, растрові зображення для відтворення на Retina-екранах повинні мати більшу кількість пікселів. Тоді вони відображатимуться без втрати якості на екранах підвищеної щільності пікселів.

Наприклад на екранах з щільністю пікселів 2х для відтворення в браузері зображення 100px на 100px без втрати якості, потрібно завантажити зображення з растровими пікселями 200px на 200px.

Ретинізація графіки

Текст і векторна графіка (SVG) однаково добре без адаптації відображаються на екранах з різною щільністю пікселів. Браузер сам їх рендерить, бо це векторні елементи.

А от для растрових зображень для браузерів потрібно підготувати варіанти для екранів з різною щільністю пікселів.

Наприклад по верстці є зображення розміром 100x200. В такому разі з макета потрібно експортувати зображення 100х200 для звичайних екранів, 200х400 для екранів із щільністю пікселів 2х, 300х600 для екранів із щільністю пікселів 3х тощо. Цей прийом підготовки растрової графіки називають ретинізацією.

При цьому оригінальне зображення має якусь назву, а його відповідники для екранів з підвищеною щільністю пікселів в назві мають приставку вкінці @2x і @3x тощо.

<img src="icon.png" width="100" height="200" />
<img src="icon@2x.png" width="100" height="200" />
<img src="icon@3x.png" width="100" height="200" />

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

Покликання:

📚
🐹
Трохи більше про пікселі і їх щільність
iPhone 3GS (Non-Retina) vs. iPhone 4 (Retina)