Модуль 16

Responsive design та media queries

Ось урок, створений спеціально за твоїм запитом, у стилі енергійного та харизматичного Девіда Малана.


🎓 Урок: Responsive Design та Media Queries

Або: Як змусити ваш сайт бути "рідким"

Привіт, друзі! 👋

1. 🔥 Вступ: проблема та мотивація

Уявіть, що ви купили величезну картину — скажімо, "Мону Лізу". Вона чудова, вона велика, вона в золотій рамі. Ви вішаєте її у вітальні — ідеально. Але потім ви хочете взяти її з собою в літак, у ванну кімнату або навіть покласти в кишеню.

Що станеться? Вона просто не влізе. Вам доведеться або обрізати її (жах!), або зменшити так, що замість посмішки Джоконди ви побачите лише розмиту пляму.

А тепер подивіться на свій смартфон. 📱 Скільки разів ви відкривали старий сайт і бачили крихітний текст, який треба "зумити" пальцями, або меню, що вилазить за межі екрана, змушуючи вас скролити вбік? Це дратує, правда? Це відчуття, ніби ви намагаєтесь просунути рояль у дверцята для кота.

Чому це важливо? Сьогодні більше 55% усього веб-трафіку — це мобільні пристрої. Якщо ваш сайт виглядає погано на телефоні — вважайте, що ваш сайт зламаний для половини людства.

Ми не хочемо створювати "картини в рамах". Ми хочемо бути як вода. Вода приймає форму чашки, пляшки або чайника. Ваш контент має поводитися так само.

Сьогодні ми навчимося магії Responsive Design (Адаптивного дизайну). Поїхали! 🚀


2. 🧠 Теоретична база (без нудьги)

Отже, як ми пояснимо браузеру: "Гей, якщо екран широкий — покажи це, а якщо вузький — перебудуй отак"?

Тут є два головні герої.

Герой №1: Viewport Meta Tag (Паспортний контроль)

Перш ніж писати стилі, ми повинні сказати браузеру телефону: "Не намагайся бути розумним і не масштабуй мій сайт, як звичайну картинку. Я сам розберуся з розмірами".

Це робиться одним рядком у <head> вашого HTML:

<meta name="viewport" content="width=device-width, initial-scale=1.0">

Що треба запам’ятати: Без цього рядка медіа-запити на телефонах працюватимуть некоректно. Це як фундамент. Просто скопіюйте і вставте.

Герой №2: Media Queries (Умовна логіка в CSS)

Це і є наші "тригери". У програмуванні ми звикли до if (condition) { do something }. В CSS це виглядає так:

@media (умова) {
    /* CSS правила, які діють ТІЛЬКИ коли умова істинна */
}

Як це працює "під капотом"? Браузер постійно вимірює ширину свого вікна (viewport). Коли ви змінюєте розмір вікна, він перевіряє: "Ага, ширина стала 700 пікселів. Чи є в мене правила для цього?". Якщо так — він миттєво застосовує нові стилі, переписуючи старі.

Це називається Breakpoint (Точка зламу) — ширина, на якій ваш дизайн "ламається" і перебудовується.


3. 🧪 Приклади: від магії до реальності

Давайте подивимось на це в дії.

Приклад 1: Хамелеон 🦎

Найпростіший спосіб зрозуміти — змінити колір.

Запитання до вас: Як ви думаєте, що станеться з кодом нижче, якщо я відкрию його на телефоні (ширина менше 600px)?

body {
    background-color: lightblue; /* Стандартний колір (Десктоп) */
}

@media (max-width: 600px) {
    body {
        background-color: coral; /* Колір для мобільних */
    }
}

Результат: На великому екрані — блакитний фон. Як тільки ви звужуєте вікно браузера і перетинаєте межу в 600px — бам! Фон миттєво стає кораловим.

Приклад 2: Реальний світ (Flexbox перебудова) 📦

Уявіть три картки товару. На комп’ютері вони стоять в ряд (зліва направо). На телефоні місця в ширину немає, тому вони мають стати в стовпчик (зверху вниз).

<div class="container">
    <div class="box">1</div>
    <div class="box">2</div>
    <div class="box">3</div>
</div>
.container {
    display: flex;
    flex-direction: row; /* За замовчуванням: в рядок */
    gap: 10px;
}

/* А тепер магія адаптивності */
@media (max-width: 768px) {
    .container {
        flex-direction: column; /* Змінюємо вісь на вертикальну! */
    }
}

Чому це круто? Ми не змінювали HTML. Ми просто сказали CSS: "Коли тісно, зміни напрямок потоку". Це найпопулярніший патерн в інтернеті.


4. 🛠 Практична частина

Прийшов час забруднити руки кодом! Відкрийте редактор.

Завдання 1: "Світлофор" 🚦 Створіть div розміром 100x100px. * Якщо ширина екрана > 800px — він зелений. * Від 500px до 800px — він жовтий. * Менше 500px — він червоний.

Завдання 2: Зникнення 👻 Часто на мобільних телефонах ми ховаємо великі банери або другорядні елементи. Створіть заголовок <h1>Вітаю на ПК!</h1> і абзац тексту. Зробіть так, щоб на екранах менше 600px заголовок зникав (display: none;), а залишався тільки текст.

Завдання 3: Адаптивне меню (Міні-кейс) 🍔 Створіть навігацію (посилання Home, About, Contact). * На десктопі: вони мають бути праворуч у рядок. * На мобільному: вони мають бути по центру і одне під одним, займаючи всю ширину.

Завдання 4: Питання "А що, якщо..." А що, якщо користувач поверне телефон горизонтально (Landscape)? * Підказка: погугліть @media (orientation: landscape). Спробуйте змінити колір фону саме при повороті екрана.


5. 💡 Мислення як у розробника

Ви вже вмієте писати код, але як думає профі?

1. Mobile First (Спершу мобільні) Новачки часто роблять так: верстають величезний сайт для десктопа, а потім "впихують" його в телефон, використовуючи купу max-width. Це боляче. Профі думають навпаки: Спершу зробіть так, щоб сайт класно виглядав на телефоні (базові стилі). А потім додавайте "навороти" для великих екранів через min-width.

Легше розширити маленьку хатинку до палацу, ніж відрізати кімнати від палацу, щоб він став хатинкою.

2. Не прив’язуйтесь до айфонів Не пишіть брекпоінти типу 375px (тільки тому, що такий екран у вашого iPhone). Телефонів тисячі. Робіть брейкпоінт там, де ваш дизайн починає виглядати погано. Якщо текст надто стиснутий — додайте точку зламу. Дивіться на контент, а не на пристрій.

3. Інструменти розробника (F12) Не звужуйте вікно браузера мишкою, як печерні люди! 🦖 Натисніть F12 -> іконка телефона/планшета (Device Toolbar). Там можна симулювати будь-який пристрій і бачити точні розміри.


6. 🧩 Підсумок

Отже, що ми сьогодні зробили? 1. Зрозуміли, що сайт має бути як вода, а не як камінь. 2. Вивчили заклинання @media, яке змінює реальність залежно від ширини екрана. 3. Навчилися перебудовувати сітку з рядків у стовпчики.

Тепер ви можете створювати сайти, які зручно читати і в метро на телефоні, і вдома на величезному моніторі. Ви більше не змушуєте користувачів страждати!

Що далі? Зараз ми рухали елементи вручну. Але що, якби існувала система, яка робить цю сітку автоматично і ще потужніше? Наступного разу ми поговоримо про CSS Grid та фреймворки на кшталт Bootstrap, які зроблять вашу верстку реактивною, як ракета! 🚀

А поки що — практикуйтесь і будьте "responsive"!


(Це був урок в стилі CS50. Успіхів у коді!)