HTML описує зміст і структуру вебсторінки, CSS задає її вигляд, адаптивність і частину візуальної поведінки. Разом вони не «роблять сайт повністю»: браузер перетворює HTML і CSS на внутрішні дерева документа та стилів, JavaScript додає інтерактивність, а швидкість сторінки часто більше залежить від зображень, скриптів, шрифтів, сервера й кешування.
Що таке HTML і CSS: з чого складається будь-який сайт
Будь-який сайт складається щонайменше з документа, правил відображення, ресурсів і середовища виконання в браузері. HTML задає, що є на сторінці: заголовок, меню, форма, кнопка, стаття, зображення, відео. CSS задає, як це виглядає: розмір, колір, сітка, відступи, поведінка на різних екранах, анімації та стани елементів.
Спрощена схема така:
- HTML формує документ і семантичну структуру: браузер розуміє, де головний контент, навігація, форма, кнопка або підвал.
- CSS описує правила відображення: від базових кольорів до складних сіток, адаптивності й реакції на налаштування користувача.
- Браузер будує DOM із HTML, CSSOM із CSS, поєднує їх і рендерить сторінку.
- JavaScript додає поведінку: відкриття меню, валідацію, динамічні дані, взаємодію з API. Але він не замінює HTML і CSS.
- Інші ресурси — зображення, шрифти, відео, аналітика, рекламні скрипти — часто визначають реальну вагу й швидкість сайту.
Фраза «HTML — це каркас, CSS — це дизайн» корисна для першого знайомства, але неповна. HTML також впливає на доступність, SEO, форми, мову документа й завантаження ресурсів. CSS — це не лише «краса», а й layout, каскад, адаптивність, стабільність інтерфейсу та частина продуктивності.
Якщо тема сайтів для вас нова, корисно паралельно розібрати, чим Frontend відрізняється від Backend: HTML і CSS належать саме до фронтенд-частини, яку бачить користувач у браузері.
Що саме робить HTML на сторінці
HTML є мовою розмітки документа, а не мовою програмування для обчислень чи бізнес-логіки. Актуальна модель розвитку HTML — Living Standard, а не лінійка «HTML5, HTML6 і далі». Тому формулювання «HTML5 — остання версія HTML» краще не використовувати. Коректніше казати, що HTML розвивається як живий стандарт, а браузери поступово реалізують його можливості.
Мінімальна HTML-сторінка може виглядати так:
<!doctype html>
<html lang="uk">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Приклад сторінки</title>
<link rel="stylesheet" href="/styles.css">
</head>
<body>
<header>...</header>
<main>
<article>...</article>
</main>
<footer>...</footer>
</body>
</html>
У цьому фрагменті немає нічого зайвого:
<!doctype html>переводить браузер у стандартний режим обробки документа.lang="uk"повідомляє мову сторінки скринридерам, перекладачам і мовним інструментам.charset="utf-8"потрібен для коректного відображення українських літер.viewportдає базу для мобільної адаптивності.<main>,<article>,<header>,<footer>описують роль частин документа.<link rel="stylesheet">підключає зовнішній CSS-файл.
HTML впливає не тільки на те, як код виглядає для розробника. Наприклад, <button> і <div>, стилізований як кнопка, не рівнозначні. Кнопка має вбудовану семантику, очікувану поведінку з клавіатури та зрозуміла допоміжним технологіям. <div> — універсальний контейнер без такої поведінки, і її доведеться відтворювати вручну.
Те саме стосується форм. Поле введення, підпис, повідомлення про помилку й кнопка відправлення мають бути пов’язані семантично, а не лише намальовані як блоки. Інакше сторінка може виглядати правильно, але бути незручною або недоступною для частини користувачів.
Що робить CSS у сучасному вебі
CSS є набором модулів для опису відображення документа, а не одним монолітним стандартом. Окремо розвиваються специфікації Selectors, Cascade, Flexbox, Grid, Media Queries, Fonts, Color, Transforms та інші. Статус функції у специфікації не означає автоматично, що вона однаково працює в усіх браузерах, тому практичну сумісність потрібно перевіряти окремо.
CSS вирішує кілька різних задач:
- Каскад і специфічність. Браузер визначає, яке правило переможе, якщо кілька селекторів описують той самий елемент.
- Блочна модель. Кожен елемент має content, padding, border і margin; помилки в цих шарах часто ламають макет.
- Потік документа. Елементи розміщуються за певними правилами навіть без Flexbox, Grid чи позиціонування.
- Flexbox. Зручний для одного основного напрямку: меню, груп кнопок, вирівнювання елементів у ряд або колонку.
- Grid. Підходить для двовимірних сіток: сторінок, карток, складних макетів із рядками та колонками.
- Media Queries. Адаптують сторінку до viewport, типу пристрою або налаштувань користувача.
- Container Queries. Дають компоненту реагувати на розмір контейнера, а не всього екрана.
- Custom Properties. Змінні на кшталт
--brand-colorдопомагають керувати темами й повторюваними значеннями. - Transitions та animations. Додають візуальні зміни без обов’язкового JavaScript.
- Accessibility preferences. Наприклад,
prefers-reduced-motionдозволяє зменшити рух для користувачів, які цього потребують.
Нові можливості CSS зменшують потребу в JavaScript для частини UI-задач. Наприклад, container queries корисні для компонентів дизайн-системи, :has() дозволяє стилізувати елемент залежно від вмісту, а CSS Anchor Positioning допомагає декларативно прив’язувати один елемент до іншого. Рекомендація: використовувати такі можливості для спрощення інтерфейсу, але перед запуском перевіряти підтримку в цільових браузерах.
Власний розрахунок: де насправді шукати вагу сторінки
Дані станом на липень 2025 року показують: HTML і CSS зазвичай не є головною частиною ваги сторінки. За Page Weight у Web Almanac 2025 медіанна мобільна домашня сторінка передавала 22 КБ HTML, 77 КБ CSS, 122 КБ шрифтів, 632 КБ JavaScript, 911 КБ зображень і 2 559 КБ загалом; десктопна — 22 КБ HTML, 82 КБ CSS, 139 КБ шрифтів, 697 КБ JavaScript, 1 058 КБ зображень і 2 862 КБ загалом. Усі значення — transfer size, тобто обсяг переданих ресурсів. Вихідні числа наведені в Page Weight Web Almanac 2025.
| Сценарій оптимізації | Вихідний обсяг | Якщо зменшити на 20% | Економія від усієї мобільної сторінки | Практичний висновок |
|---|---|---|---|---|
| CSS | 77 КБ | 15,4 КБ | 0,60% | Корисно чистити, але це рідко змінює всю картину ваги |
| JavaScript | 632 КБ | 126,4 КБ | 4,94% | Дає приблизно у 8,2 раза більшу економію, ніж CSS при тому самому відсотку скорочення |
| Зображення | 911 КБ | 182,2 КБ | 7,12% | Найбільший кандидат на швидку економію transfer size |
Як рахували. Взято медіанні transfer size для мобільної домашньої сторінки з Web Almanac 2025: CSS — 77 КБ, JavaScript — 632 КБ, зображення — 911 КБ, загальна сторінка — 2 559 КБ. Формула: економія ресурсу = обсяг ресурсу × 20%; частка від сторінки = економія / 2 559 × 100. Припущення: порівнюється однакове відносне скорочення на 20% для різних типів ресурсів; не враховано кеш, порядок завантаження, стиснення після розпакування, вплив на LCP, INP і CLS. Межа застосування: це орієнтир для пріоритизації, а не доказ, що кожен конкретний сайт має таку саму структуру.
Що випливає для рішення: якщо сторінка повільна, починайте не з гасла «стиснути CSS», а з вимірювання ваги й впливу зображень, JavaScript, шрифтів і CSS окремо. Для типової медіанної сторінки скорочення зображень або JavaScript на той самий відсоток дає значно більшу економію transfer size, ніж скорочення CSS.
Є ще один важливий перерахунок. HTML і CSS разом на медіанній мобільній сторінці важать 99 КБ: 22 КБ HTML + 77 КБ CSS. Їхня частка — 99 / 2 559 × 100 ≈ 3,9%. JavaScript важчий за CSS приблизно у 632 / 77 ≈ 8,2 раза, а зображення важчі за HTML приблизно у 911 / 22 ≈ 41,4 раза. Це не скасовує оптимізацію CSS, але ставить її на правильне місце в черзі робіт.
Як браузер перетворює HTML і CSS на видиму сторінку
Браузер показує сторінку не прямо з HTML-файлу, а через послідовність побудови структури, стилів, макета й пікселів. Спершу він отримує HTML, будує DOM, знаходить підключені ресурси, завантажує CSS, будує CSSOM, поєднує структуру зі стилями, рахує layout і малює результат.
Цей ланцюжок пояснює, чому помилки в HTML і CSS можуть проявлятися не там, де їх очікують. Некоректна структура заголовків погіршує навігацію для скринридерів і розуміння контенту. Відсутні розміри зображень можуть спричинити зміщення макета. Великий CSS-файл може затримати перше відображення, бо CSS часто блокує рендеринг. Невдалий JavaScript може заблокувати головний потік і погіршити взаємодію.
Дані станом на травень 2025 року: Google рекомендує оцінювати Core Web Vitals на 75-му перцентилі реальних переглядів. LCP вважається добрим до 2 500 мс, INP — до 200 мс, CLS — до 0,1; поганими є LCP понад 4 000 мс, INP понад 500 мс, CLS понад 0,25. Пороги описані в методиці Core Web Vitals від Google.
| Метрика | Добрий результат | Що може зламати HTML/CSS | Що перевірити першим |
|---|---|---|---|
| LCP | ≤ 2 500 мс | Затримка рендерингу через CSS, важке головне зображення, повільний сервер | Розмір hero-зображення, критичний CSS, час відповіді сервера |
| INP | ≤ 200 мс | CSS рідко є головною причиною; частіше взаємодію блокує JavaScript | Довгі JS-задачі, обробники подій, зайві бібліотеки |
| CLS | ≤ 0,1 | Немає розмірів зображень, пізно підвантажуються шрифти, нестабільні блоки | width/height, резерв місця, font loading |
Lighthouse і CrUX не треба сприймати як одне й те саме. Lighthouse — лабораторний тест у контрольованому сценарії. CrUX — агреговані дані реальних користувачів Chrome. INP особливо складно повноцінно оцінити в простому лабораторному завантаженні, бо ця метрика пов’язана з реальними взаємодіями.
Для повної картини знадобляться також знання про мережу й інфраструктуру: що таке кеш, CDN, HTTPS, DNS і хостинг впливають на перше завантаження сторінки ще до обробки CSS.
Зведена структура: що вибрати для макета, адаптивності й стилів
Вибір між HTML-елементами, Flexbox, Grid, media queries, container queries і способом підключення CSS залежить від задачі, а не від моди чи універсального правила.
| Задача | Краще рішення | Коли підходить | Коли змінити підхід | Головний ризик |
|---|---|---|---|---|
| Кнопки, форми, навігація, основні області сторінки | Семантичний HTML | Потрібні доступність, клавіатура, зрозуміла структура, менше ARIA | Для нейтральної обгортки без власної ролі можна використати div |
Імітація кнопок через div ламає очікувану поведінку |
| Меню, ряд кнопок, вирівнювання елементів | Flexbox | Є один основний напрямок: ряд або колонка | Якщо треба незалежно керувати і рядками, і колонками — беріть Grid | Складні двовимірні макети обростають зайвими обгортками |
| Сітка карток, сторінка з колонками, складний layout | Grid | Потрібна двовимірна структура | Для простого горизонтального меню Grid може бути зайвим | Можна ускладнити прості компоненти |
| Адаптація всієї сторінки до екрана | Media Queries | Змінюється загальна структура залежно від viewport | Якщо один компонент живе в різних контейнерах — краще container queries | Забагато брейкпоінтів маскують слабкий макет |
| Компонент у sidebar, main-контенті або модальному вікні | Container Queries | Компонент має реагувати на власний контейнер | Для старших цільових браузерів перевіряйте підтримку | Потрібна дисципліна в архітектурі компонентів |
| Критичні стилі першого екрана | Малий вбудований CSS | Стилів небагато, важливо швидко показати перший екран | Спільні стилі багатьох сторінок краще винести в зовнішній файл | Вбудований CSS не кешується окремо між сторінками |
| Спільний дизайн сайту | Зовнішній CSS-файл | Є багато сторінок, повторювані компоненти, кешування | Для дуже малого критичного фрагмента можна інлайнити | Зовнішній CSS може блокувати рендеринг |
Цю матрицю варто читати як дерево рішення. Якщо потрібно зробити кнопку — починайте з <button>, а не з <div>. Якщо макет іде в одному напрямку — Flexbox. Якщо потрібні рядки й колонки — Grid. Якщо адаптація залежить від екрана — media queries. Якщо компонент має бути незалежним від місця вставки — container queries.
Якщо сайт робиться на CMS, частину HTML і CSS генерує тема або конструктор. Це не скасовує принципи: навіть у WordPress якість теми, семантика шаблонів, зайві CSS-файли й важкі шрифти впливають на результат. Детальніше про типові сценарії можна прочитати в матеріалі що таке WordPress.
Чому доступність починається з HTML і CSS
Доступність сторінки залежить від семантики HTML, видимих станів CSS, контрасту, клавіатурної навігації та коректної мови документа. Для державних цифрових сервісів в Україні доступність також пов’язана з нормативними вимогами, але навіть для комерційного сайту це практичне питання: користувач має мати змогу прочитати сторінку, пройти форму й виконати дію незалежно від пристрою та способу взаємодії.
Для HTML це означає:
- використовуйте одну логічну ієрархію заголовків, а не заголовки лише заради розміру шрифту;
- додавайте змістовний альтернативний текст до інформативних зображень;
- не замінюйте інтерактивні елементи нейтральними контейнерами без ролей і поведінки;
- пов’язуйте підписи з полями форм;
- зазначайте мову документа через
lang.
Для CSS це означає:
- забезпечуйте достатній контраст тексту й фону;
- не прибирайте
focusбез заміни на видимий стан; - не передавайте критичну інформацію лише кольором;
- підтримуйте
prefers-reduced-motionдля інтерфейсів із рухом; - резервуйте місце під зображення й динамічні блоки, щоб не створювати зміщення макета.
Доступність не конфліктує з дизайном. Вона конфліктує з підходом, коли сторінку оцінюють тільки за скріншотом. Якщо користувач не може пройти форму з клавіатури або скринридер не розуміє структуру, «гарний» CSS не виправляє проблему.
Як HTML і CSS пов’язані зі швидкістю сайту
HTML і CSS впливають на швидкість, але типова причина повільного сайту часто лежить у зображеннях, JavaScript, шрифтах або серверній частині. За Web Almanac 2025 медіанний мобільний CSS становив 77 КБ, тоді як шрифти — 122 КБ, JavaScript — 632 КБ, а зображення — 911 КБ.
Дані станом на серпень 2026 року з поточного звіту HTTP Archive додають ще один кут: медіанне число зовнішніх CSS-файлів становило 8 для desktop і 8 для mobile, а 90-й перцентиль — 37 CSS-запитів на desktop і 36 на mobile. Ці значення не означають, що потрібно прагнути саме до 8 CSS-файлів. Методика рахує зовнішні таблиці стилів за розширенням .css або CSS MIME-типом; вбудований CSS і стилі, згенеровані JavaScript, можуть не потрапити до цього показника. Поточні показники наведені у звіті Page Weight HTTP Archive.
Шрифти теж не варто ігнорувати. У тому самому звіті медіанна вага шрифтів становила 154,1 КБ на mobile і 168,4 КБ на desktop, а медіанна кількість шрифтових запитів — 4 на обох типах пристроїв. Це пояснює, чому підключення кількох накреслень, мовних підмножин і стороннього шрифтового сервісу іноді коштує дорожче, ніж уся таблиця стилів.
Порядок дій для оптимізації:
- Виміряйте transfer size за типами ресурсів: HTML, CSS, JS, fonts, images.
- Перевірте LCP, INP і CLS окремо, не зводьте все до «сторінка важка».
- Для зображень перевірте формат, розміри, lazy loading і резерв місця.
- Для JavaScript перевірте зайві бібліотеки, довгі задачі й код, який можна замінити CSS або HTML-можливостями.
- Для CSS перевірте невикористані правила, критичні стилі, порядок підключення й дублікати.
- Для шрифтів залиште потрібні накреслення, підмножини й стратегію завантаження.
Якщо сайт використовує CMS або конструктор, частина проблем може бути в темі, плагінах і зовнішніх віджетах. Тут корисно розуміти, що таке CMS і як вона керує шаблонами, стилями та контентом.
Поширені міфи про HTML і CSS
Міф: HTML — це програмування, а CSS — програмування дизайну
HTML — мова розмітки, CSS — мова стилів. Вони описують структуру та представлення документа. Обчислення, складна логіка, робота з API й обробка станів зазвичай належать JavaScript або серверному коду. Це не робить HTML і CSS другорядними: помилка в семантиці або каскаді може зламати доступність, SEO й інтерфейс.
Міф: HTML5 — поточна остання версія
Актуальна модель — HTML Living Standard. Це важливо для навчання й документації: замість запам’ятовування «останньої версії» треба дивитися, які можливості підтримуються браузерами та як їх правильно застосовувати.
Міф: сайт повільний через CSS
Без вимірювання це лише припущення. У медіанній мобільній домашній сторінці Web Almanac 2025 CSS становив 77 КБ, JavaScript — 632 КБ, зображення — 911 КБ. Якщо скоротити CSS на 20%, економія становитиме 15,4 КБ; таке саме відносне скорочення зображень дасть 182,2 КБ. Висновок: CSS треба оптимізувати, але не слід починати й закінчувати аудит тільки ним.
Міф: якщо сторінка виглядає як у макеті, вона доступна
Візуальна відповідність не доводить доступність. Потрібно перевірити клавіатуру, скринридерну структуру, підписи форм, контраст, focus state, альтернативні тексти й залежність від кольору. Саме тут HTML і CSS працюють разом: перший дає семантику, другий — видиме й стабільне представлення.
Міф: CSS-фреймворк обов’язковий для будь-якого сайту
Фреймворк може прискорити розробку, особливо коли потрібні готові компоненти та єдина дизайн-система. Але для малого сайту він може додати зайві стилі, класи й залежності. Власний CSS іноді легший, прозоріший і достатній. Якщо ж проєкт великий, фреймворк або дизайн-система можуть зменшити хаос, але лише за умови дисципліни в компонентах.
Міф: більше брейкпоінтів означає кращу адаптивність
Десятки точкових media queries часто приховують слабку структуру. Flexbox, Grid, відносні одиниці, clamp(), minmax() і container queries можуть дати плавнішу адаптацію без надмірної кількості умов.
Що вивчати першими, якщо ви починаєте з HTML і CSS
Починати варто не з фреймворку, а з документа, семантики, каскаду, блочної моделі й базового layout. Такий порядок швидше дає розуміння, чому сторінка працює або ламається.
- HTML-документ. Doctype,
html,head,body, мова, кодування, viewport, title. - Семантичні елементи.
main,header,footer,nav,article,section,button,form. - Форми. Поля, підписи, стани помилок, доступне відправлення.
- CSS-селектори й каскад. Як браузер обирає правило та чому «не працює стиль».
- Блочна модель. Content, padding, border, margin, box-sizing.
- Flexbox і Grid. Один напрямок проти двовимірної сітки.
- Адаптивність. Media queries, відносні одиниці, зображення, viewport.
- Доступність. Клавіатура, focus, контраст, alt, логічна структура.
- Продуктивність. Вага ресурсів, критичний CSS, шрифти, зображення, вплив JS.
- Інструменти браузера. Elements, Styles, Network, Performance, Lighthouse.
JavaScript варто додавати після того, як зрозуміло, що можна зробити нативним HTML і CSS. Інакше є ризик писати скрипти для задач, які вже вирішуються елементами details, dialog, CSS-станами, transitions або сучасними селекторами. Якщо хочете рухатися далі в розробку, корисно також зрозуміти, навіщо розробникам контроль версій: навіть прості HTML/CSS-проєкти швидко потребують історії змін.
Короткий висновок
HTML відповідає за зміст, структуру й семантику сторінки; CSS — за вигляд, layout, адаптивність і частину візуальної поведінки. Базова рекомендація: спочатку будуйте правильний документ, потім стабільний адаптивний layout, а оптимізацію починайте з вимірювання. Якщо сторінка повільна через важкі зображення, JavaScript або шрифти, скорочення лише CSS не дасть вирішального ефекту. Якщо ж CSS блокує перше відображення, містить багато невикористаних правил або створює зміщення макета, саме він стає пріоритетом для виправлення.