Ось готовий урок, створений спеціально за твоїм запитом у стилі CS50.
🎓 Тема уроку: Ікони, SVG та web-графіка
(або: Чому ваші логотипи мають виглядати ідеально навіть на Місяці)
1. 🔥 Вступ: Проблема та мотивація
Привіт усім! Радий вас бачити.
Давайте почнемо з простої ситуації. Уявіть, що ви розробляєте сайт для крутого стартапу. Дизайнер надсилає вам логотип компанії — це файл logo.jpg. Ви вставляєте його на сайт. На вашому ноутбуці все виглядає чудово.
Але тут заходить ваш бос, відкриває сайт на новенькому iPhone з екраном Retina, наближає логотип і... О жах! Замість чітких ліній він бачить "квадратики", розмиті краї та бруд. Логотип виглядає дешево.
Питання до вас: Чому так сталося? І що робити, якщо цей логотип завтра треба буде роздрукувати на банері розміром з дев'ятиповерхівку?
Якщо ми використовуємо звичайні картинки (JPEG, PNG), ми обмежені пікселями. Це як мозаїка: якщо підійти надто близько, магія зникає, і ви бачите лише окремі камінці.
Але у веб-розробці нам потрібна графіка, яка виглядає гострою як лезо, незалежно від того, чи дивитесь ви на неї з годинника, чи з величезного телевізора. Нам потрібен формат, який не залежить від пікселів.
Нам потрібен SVG. Сьогодні ми розберемося, як малювати кодом. Поїхали!
2. 🧠 Теоретична база (без нудних лекцій)
Давайте зазирнемо "під капот". У світі комп'ютерної графіки є два табори:
1. Растрова графіка (JPEG, PNG, GIF)
Це мапа пікселів. Уявіть аркуш у клітинку, де для кожної клітинки записано: "тут червоний", "тут білий". * Плюс: Ідеально для фотографій (багато деталей, відтінків). * Мінус: Не можна збільшувати без втрати якості.
2. Векторна графіка (SVG)
Це інструкція. Замість того, щоб запам'ятовувати кожну крапку, комп'ютер запам'ятовує математичну формулу. SVG (Scalable Vector Graphics) буквально каже браузеру: "Намалюй коло в центрі радіусом 50 пікселів і залий його синім".
Аналогія з життя: * Растр — це роздрукована фотографія будинку. Якщо ви подивитесь на неї через лупу, побачите зерно. * Вектор (SVG) — це креслення архітектора. Маючи креслення, ви можете побудувати і іграшковий будиночок, і справжній хмарочос — пропорції будуть ідеальними.
Що таке SVG технічно?
Це просто текст! Це XML-код (дуже схожий на HTML). Це означає, що ви можете відкрити картинку в текстовому редакторі, змінити цифру, і картинка зміниться.
Що треба запам’ятати залізно: * SVG — це код. * SVG можна стилізувати через CSS (міняти колір при наведенні!). * SVG важить дуже мало (бо це просто текст інструкції, а не масив пікселів).
3. 🧪 Приклади (від простого до реального)
Приклад 1: "Hello World" у світі графіки
Чого ви очікуєте, якщо ми напишемо тег <circle>? Правильно, коло.
Давайте напишемо найпростіший SVG прямо в HTML:
<svg width="100" height="100">
<circle cx="50" cy="50" r="40" fill="red" />
</svg>
Що тут відбувається:
* <svg> — контейнер (наше полотно).
* cx, cy — координати центру (50 пікселів зліва, 50 зверху).
* r — радіус.
* fill — заливка кольором.
Результат: Ідеально кругле червоне коло. Збільшуйте сторінку хоч до 500% — краї залишаться гладкими.
Приклад 2: Реальна іконка "Меню" (Гамбургер)
На сайтах ви постійно бачите іконку з трьох смужок. Як це зроблено? Зазвичай це не картинка, це вектор.
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M4 6H20M4 12H20M4 18H20" stroke="black" stroke-width="2" stroke-linecap="round"/>
</svg>
Стоп, що це за d="M4 6H20..."?
Це координати "пера".
* M (Move) — перемістити руку в точку.
* L (Line) або H (Horizontal) — провести лінію.
Вам не треба писати ці координати вручну! Дизайнери малюють це у Figma, а ви просто копіюєте код. Головне — розуміти, що stroke="black" можна замінити на stroke="currentColor", і іконка буде приймати колір тексту!
Приклад 3: Магія CSS (Інтерактивність)
Оскільки SVG — це частина DOM-дерева (як <div> чи <span>), ми можемо керувати нею через CSS.
HTML:
<svg class="heart-icon" width="50" height="50" viewBox="0 0 24 24">
<!-- складний шлях малювання серця -->
<path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z" />
</svg>
CSS:
.heart-icon {
fill: grey;
transition: fill 0.3s;
cursor: pointer;
}
.heart-icon:hover {
fill: red;
transform: scale(1.1);
}
Результат: Сіре серце, яке при наведенні стає червоним і трохи збільшується. Спробуйте зробити це з JPG — у вас нічого не вийде без заміни файлу картинки!
4. 🛠 Практична частина
Час забруднити руки кодом! Виконайте ці завдання:
- 🔹 Копіпаст-майстер: Скопіюйте приклад з червоним колом (Приклад 1) у свій редактор. Змініть його колір на
blueі радіус на20. - 🔹 Квадрат Малевича: Замініть тег
<circle>на<rect>. Вам знадобляться атрибутиwidthтаheightзамістьr. Зробіть чорний квадрат. - 🔹 Лагодження: Ось код зламаної іконки. Вона не відображається або обрізана. Виправте її (підказка: подивіться на
viewBoxабо розміри):html <svg width="24" height="24"> <circle cx="50" cy="50" r="40" fill="green" /> </svg>(Питання: чи поміститься коло з центром 50 у коробку розміром 24?) - 🔹 Реальний світ: Зайдіть на сайт Heroicons або Phosphor Icons. Знайдіть іконку "User" (користувач). Скопіюйте її SVG-код (Copy SVG) і вставте на свою сторінку.
- 🔹 Міні-кейс: Створіть кнопку "Купити". Всередині має бути текст "Купити" і іконка кошика (з попереднього завдання). При наведенні на кнопку колір іконки має змінюватися на білий.
5. 💡 Мислення як у розробника
Як відрізнити новачка від профі в роботі з графікою?
❌ Новачок:
* Експортує іконки як PNG. (Це гріх у сучасному вебі).
* Вставляє SVG картинкою <img src="icon.svg">, коли треба міняти колір при ховері (через img CSS не має доступу до "нутрощів" SVG).
* Копіює з Figma купу сміття в коді (зайві атрибути, коментарі, дивні ID).
✅ Досвідчений розробник:
* Оптимізує SVG. Використовує інструменти типу OMGIMG або SVGOMG, щоб зменшити розмір файлу, викинувши все зайве.
* Думає про доступність. Додає aria-label="Налаштування", щоб незрячі користувачі розуміли, що це за іконка, а не чули "зображення, група, шлях".
* Використовує класи. Замість того, щоб хардкодити fill="red" всередині SVG, він пише class="icon" і керує кольором через CSS. Це робить код гнучким.
Золоте правило: Якщо це фото — JPG/WebP. Якщо це логотип, іконка чи проста схема — тільки SVG.
6. 🧩 Підсумок
Отже, що ми маємо?
- Ви зрозуміли, що SVG — це не картинка, а код.
- Ви знаєте, що векторна графіка масштабується нескінченно без втрати якості.
- Ви вмієте вставляти іконки прямо в HTML і фарбувати їх через CSS.
Тепер ваш сайт виглядатиме чітко на будь-якому девайсі, а ви маєте повний контроль над кожним елементом графіки.
🤔 Що далі? Ви помітили, що в SVG є координати? А що, якщо ми почнемо змінювати їх за часом? На наступному уроці ми поговоримо про Анімації. Ми змусимо це серце битися, а кнопку — "стрибати".
А поки що — це був CS50... тобто, наш урок з SVG. До зустрічі! 🖥️