Уявіть: 1989 рік. Тім Бернерс-Лі — фізик-ядерник у CERN (Женева) — стикається з проблемою, знайомою кожному, хто коли-небудь намагався передати великий документ колезі. Тисячі наукових звітів, посилання між ними, різні формати — і жодного зручного способу пов'язати всі ці знання воєдино.
Його рішення було революційним у своїй простоті: гіпертекст (Hypertext) — текст, який містить клікабельні посилання на інші тексти. А мова для такого тексту отримала назву HTML (HyperText Markup Language — мова гіпертекстової розмітки).
Перший у світі веб-сайт з'явився 6 серпня 1991 року і досі доступний за посиланням info.cern.ch. У ньому описується принцип роботи Всесвітньої павутини. Він виглядає максимально просто — але саме з цього починалася епоха інтернету.

Щоб зрозуміти сучасний HTML5, варто простежити його еволюцію. Кожна версія вирішувала реальні проблеми свого часу.
Перший офіційний стандарт W3C (World Wide Web Consortium — Консорціум Всесвітньої павутини). Головне нововведення — форми: механізм, що дозволяє користувачу відправляти дані на сервер. Саме тоді стало можливим перше покоління інтерактивних сайтів.
Революційна ідея: CSS (Cascading Style Sheets — каскадні таблиці стилів) має відповідати за зовнішній вигляд, а HTML — лише за структуру. Теги на кшталт <font>, <center>, <bgcolor> почали вважатися застарілими.
У середині 1990-х з'явилися Netscape Navigator та Internet Explorer — і між ними розгорілася справжня війна. Кожен браузер додавав власні теги, ігноруючи стандарти W3C. Верстальники були змушені писати різний код для різних браузерів.
Перемогу здобув Google Chrome (2008), який чітко дотримувався стандартів і пропонував зручні інструменти для розробників. Сьогодні Chrome використовують ~65% інтернет-користувачів.
HTML5 — це не просто набір нових тегів. Це нова філософія веб-розробки:
🏗️ Семантика
<header>, <nav>, <main>, <article>, <section>, <footer>, <aside> замість безликих <div> з класами.🎬 Мультимедіа
<video> та <audio> без Flash-плагінів.🎨 Графіка
<canvas> для малювання 2D-графіки засобами JavaScript прямо у браузері.📱 Адаптивність
date, email, range, color.Перш ніж писати HTML, потрібен правильний інструмент. Подумайте про редактор коду як про робочий стіл столяра — від його якості залежить ефективність роботи.
Visual Studio Code (VS Code) — безкоштовний редактор з відкритим кодом від Microsoft, випущений у 2015 році. Сьогодні це найпопулярніший редактор у світі для веб-розробки: за даними Stack Overflow Developer Survey 2023 його використовують понад 73% розробників.

Перейдіть на офіційний сайт code.visualstudio.com та завантажте версію для вашої операційної системи (Windows, macOS, Linux). Установка займає 2-3 хвилини.
Після першого запуску відкрийте панель розширень (Ctrl + Shift + X) та встановіть обов'язковий набір плагінів:
Найкращий спосіб роботи — відкрити папку (не файл!): меню File → Open Folder або Ctrl + K, потім Ctrl + O. VS Code відображатиме всю структуру проєкту в бічній панелі.
Рекомендуємо увімкнути Auto Save: меню File → Auto Save. Тепер VS Code зберігатиме файли при перемиканні між вкладками — і ви ніколи не втратите зміни.
Відкрийте HTML-файл, натисніть Alt + L, потім Alt + O (або клацніть "Go Live" в рядку стану внизу). Браузер автоматично відкриється і відображатиме зміни в реальному часі при кожному збереженні файлу.
Почніть вводити тег і VS Code запропонує варіанти. Наприклад, введіть <di — з'явиться підказка <div>. Натисніть Tab або Enter для підтвердження. Для атрибутів теж працює: всередині тегу починайте вводити cl — отримаєте підказку class="".
<!-- Початок введення: <di -->
<!-- VS Code пропонує: div, dialog, dir -->
<div class="container">
<!-- Тут: cl → class="" -->
</div>
Emmet вже вбудований у VS Code. Це система скорочень, що перетворює короткий рядок на повноцінний HTML. Деякі приклади:
| Абревіатура | Результат |
|---|---|
! + Tab | Повна структура HTML5 |
div.container | <div class="container"></div> |
ul>li*5 | <ul> з 5 елементами <li> |
p>lorem | Абзац з текстом-заповнювачем Lorem ipsum |
h1+p+p | Заголовок і два абзаци |
Один із найпотужніших інструментів VS Code. Утримуйте Alt та клацайте у різних місцях — з'являться кілька курсорів. Все що ви вводите — вводиться одночасно в усіх місцях.
Або виберіть слово та натисніть Ctrl + D для послідовного виділення однакових слів — ідеально для перейменування класів.
` (backtick). Не потрібно перемикатися між вікнами для запуску команд.| Дія | Windows/Linux | macOS |
|---|---|---|
| Командна палітра | Ctrl + Shift + P | Cmd + Shift + P |
| Відкрити файл | Ctrl + P | Cmd + P |
| Знайти в файлі | Ctrl + F | Cmd + F |
| Знайти в проєкті | Ctrl + Shift + F | Cmd + Shift + F |
| Дублювати рядок | Shift + Alt + ↓ | Shift + Option + ↓ |
| Коментар | Ctrl + / | Cmd + / |
| Форматування коду | Shift + Alt + F | Shift + Option + F |
| Переміщення рядка | Alt + ↑↓ | Option + ↑↓ |
WebStorm — інтегроване середовище розробки (IDE) від компанії JetBrains, яка також відома продуктами IntelliJ IDEA (Java), PyCharm (Python) та Rider (.NET).

На відміну від VS Code (редактор з розширеннями), WebStorm — це повноцінна IDE «з коробки». Вона платна (з тріальним 30-денним пробним терміном), але для студентів і педагогів — безкоштовна за умовою JetBrains Education.
Visual Studio Code
✅ Безкоштовний назавжди
✅ Легкий та швидкий запуск
✅ Величезна кількість розширень
✅ Підходить для всіх мов
✅ Відмінна підтримка спільноти
⚠️ Потребує налаштування розширень
⚠️ Деякі функції — через плагіни
Рекомендовано: для навчання, фронтенд-розробки, повсякденної роботи.
WebStorm
✅ Все налаштовано «з коробки»
✅ Глибоке розуміння коду (рефакторинг)
✅ Вбудований дебаггер
✅ Інтеграція з системами контролю версій
✅ Розумне автодоповнення без плагінів
💰 Платний (безкоштовно для студентів)
⚠️ Важчий, потребує більше RAM
Рекомендовано: для великих проєктів, командної розробки, React/Angular/Vue.
Глибокий аналіз коду: WebStorm розуміє ваш проєкт загалом. Наприклад, якщо ви перейменуєте CSS-клас, він автоматично знайде всі місця в HTML та JS, де цей клас використовується, і запропонує перейменувати їх всі.
Рефакторинг: Перенесення функцій між файлами, перейменування змінних у всьому проєкті, автоматичне виправлення імпортів — все це «з коробки».
Дебаггер: Вбудований відладчик для JavaScript дозволяє ставити точки зупинки прямо в IDE, а не перемикатися на DevTools браузера.
Графічного інтерфейсу налаштувань VS Code (меню File → Preferences → Settings) достатньо для базових речей. Але справжній розробник живе у settings.json — JSON-файлі, що містить усі налаштування редактора. Він дає дві потужні переваги:
Є два рівні налаштувань:
Open User Settings (JSON).vscode/settings.json у корені папки проєкту.vscode/settings.json. Так налаштування «живуть» разом із кодом і не впливають на інші проєкти.Скопіюйте цей файл у .vscode/settings.json у корені вашого проєкту:
{
// =================================================================
// 1. ПОВЕДІНКА РЕДАКТОРА ТА ФОРМАТУВАННЯ
// Глобальні налаштування відступів, збереження та форматувальника.
// =================================================================
// --- Відступи ---
"editor.tabSize": 4, // Розмір Tab = 4 пробіли
"editor.insertSpaces": true, // Tab вставляє пробіли, а не символ \t
"editor.detectIndentation": false, // Не визначати відступ автоматично — завжди брати з tabSize
// --- Форматування при збереженні ---
"editor.defaultFormatter": "esbenp.prettier-vscode", // Prettier — форматувальник за замовчуванням
"editor.formatOnSave": true, // Авто-форматування при Ctrl+S
// Запуск лінтерів при збереженні (виправляє те, що може виправити linter)
"editor.codeActionsOnSave": {
"source.fixAll": "explicit", // Всі авто-виправлення
"source.fixAll.eslint": "explicit", // ESLint (JavaScript)
"source.fixAll.stylelint": "explicit", // Stylelint (CSS/SCSS)
},
// --- Зовнішній вигляд ---
"editor.wordWrap": "on", // Перенос довгих рядків
"editor.minimap.enabled": true, // Мінімапа коду праворуч
"editor.renderWhitespace": "boundary", // Показувати пробіли між словами
"editor.cursorSmoothCaretAnimation": "on", // Плавна анімація курсора
"editor.bracketPairColorization.enabled": true, // Кольорові парні дужки
"editor.guides.bracketPairs": "active", // Підсвічення активної пари дужок
"editor.mouseWheelZoom": true, // Ctrl+Scroll для зміни масштабу
"workbench.colorTheme": "Default Dark+", // Темна тема
// =================================================================
// 2. PRETTIER — ФОРМАТУВАЛЬНИК КОДУ
// =================================================================
"prettier.requireConfig": false, // Не вимагати .prettierrc в проєкті
"prettier.useEditorConfig": false, // Не використовувати .editorconfig
// --- Відступи (4 пробіли) ---
"prettier.tabWidth": 4,
// --- Сучасний JavaScript ---
"prettier.singleQuote": true, // Одинарні лапки замість подвійних
"prettier.semi": false, // Без крапки з комою в JS
"prettier.trailingComma": "all", // Кома після останнього елемента
"prettier.printWidth": 120, // Максимальна ширина рядка
// --- Специфіка фреймворків ---
"prettier.vueIndentScriptAndStyle": true, // Відступ у Vue <script> та <style>
"prettier.htmlWhitespaceSensitivity": "css", // Пробіли в HTML за правилами CSS
// =================================================================
// 3. ЛІНТЕРИ — ESLint ТА STYLELINT
// =================================================================
// --- ESLint (JavaScript / TypeScript) ---
"eslint.enable": true,
"eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact", "vue"],
"eslint.format.enable": true,
"eslint.run": "onSave",
// --- Stylelint (CSS / SCSS) ---
"css.validate": false, // Вимкнути вбудовану валідацію VS Code (Stylelint замінить її)
"scss.validate": false,
"less.validate": false,
"stylelint.enable": true,
"stylelint.validate": ["css", "scss", "vue"],
// Stylelint configuration (usually kept in .stylelintrc)
"stylelint.config": {
"extends": ["stylelint-config-standard", "stylelint-config-recess-order"],
"plugins": ["stylelint-order"],
},
// =================================================================
// 4. МОВНІ ПЕРЕВИЗНАЧЕННЯ
// =================================================================
"[html]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
},
"[vue]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
},
"[javascriptreact]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
},
"[jsonc]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
},
// CSS/SCSS — 2 пробіли (загальноприйнята конвенція для стилів)
"[css]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2,
},
"[scss]": {
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2,
},
}
Це найважливіша секція для продуктивної роботи. При натисканні Ctrl + S відбувається:
source.fixAll.eslint — ESLint автоматично виправляє прості JS-помилки (зайві крапки з комою, неправильні лапки тощо)source.fixAll.stylelint — Stylelint виправляє CSS (порядок властивостей, зайві пробіли)editor.formatOnSave — Prettier переформатовує весь файл відповідно до налаштуваньЗначення "explicit" означає: дія виконується лише при явному збереженні (Ctrl + S), а не при автозбереженні.
За замовчуванням VS Code аналізує файл і підлаштовує розмір Tab під те, що вже є в файлі. Це зручно для читання чужого коду, але небезпечно: якщо у файлі є суміш 2- і 4-пробільних відступів — VS Code «підхопить» неправильний стиль.
При "detectIndentation": false — завжди використовується tabSize: 4 (або tabSize: 2 для CSS/SCSS через мовні перевизначення).
false), а Stylelint стає єдиним джерелом перевірки CSS.Ці налаштування відповідають популярному стилю в сучасному JavaScript (ESLint Airbnb, Vue, Nuxt):
ASI (Automatic Semicolon Insertion). Відсутність крапок з комою — не помилка, а стиль'hello' замість "hello" — менше натискань ShiftПерш ніж встановлювати Stylelint, потрібно розібратися з Node.js та npm — без них сучасна веб-розробка просто неможлива.
Node.js — це середовище виконання JavaScript поза браузером. Якщо раніше JS працював лише у браузері, то Node.js дозволяє запускати його прямо на комп'ютері — у терміналі.
Але навіщо це потрібно при вивченні HTML і CSS?
Аналогія: Node.js — це як магазин IKEA. Ви самі по собі не живете в IKEA, але іноді заходите, щоб купити меблі (інструменти). npm — це каталог цього магазину та механізм доставки.
npm (Node Package Manager — менеджер пакетів Node) — це:
npm встановлюється автоматично разом з Node.js — окремо нічого не потрібно.
На Windows є три зручні способи — обирайте той, що вам ближчий.
winget — вбудований пакетний менеджер Windows 10/11 (Windows Package Manager). Не потребує сторонніх програм. Доступний на всіх сучасних Windows починаючи з версії 1809.
Відкрийте PowerShell або Командний рядок та виконайте:
winget install OpenJS.NodeJS.LTS
Прапорець .LTS (Long-Term Support) встановлює стабільну версію з довгостроковою підтримкою — саме її рекомендують для навчання та продакшену.
Після встановлення перезапустіть термінал і перевірте:
node --version
npm --version
Scoop — мінімалістичний пакетний менеджер для Windows, популярний серед розробників. Встановлює програми без запиту прав адміністратора, у вашу домашню директорію.
Крок 1: Встановлення Scoop (якщо ще не встановлено):
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
Крок 2: Встановлення Node.js через Scoop:
scoop install nodejs-lts
Перевірка:
node --version
npm --version
Chocolatey — один з найстаріших і найпопулярніших пакетних менеджерів для Windows, схожий на apt у Linux. Потребує прав адміністратора.
Крок 1: Встановлення Chocolatey (запустіть PowerShell від імені адміністратора):
Set-ExecutionPolicy Bypass -Scope Process -Force
[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072
iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
Крок 2: Встановлення Node.js:
choco install nodejs-lts -y
Прапорець -y підтверджує всі запити автоматично.
Перевірка:
node --version
npm --version
Після встановлення Node.js відкрийте вбудований термінал VS Code (Ctrl + `) і виконайте:
node --version
# Приклад виводу: v20.11.0
npm --version
# Приклад виводу: 10.2.4
Якщо обидві команди повернули версії — все готово! Можна встановлювати інструменти.
'node' is not recognized as an internal or external command — просто закрийте і відкрийте термінал знову. Windows оновлює змінну PATH лише при новому запуску сесії.Кожен розробник пише CSS трохи по-своєму. Хтось ставить color першим, хтось — display. Хтось використовує 0px, хтось 0. У команді таке розмаїття призводить до хаосу в коді.
Stylelint (Style Linter) — це засіб статичного аналізу CSS/SCSS, що автоматично перевіряє ваш стиль на помилки та порушення конвенцій. Подумайте про нього як про суворого, але справедливого редактора: він вказує на проблеми відразу, не чекаючи браузера.
🔍 Знаходить помилки
📐 Enforces стиль
🔧 Автовиправлення
Відкрийте панель розширень (Ctrl + Shift + X), знайдіть і встановіть:
stylelint (ID: stylelint.vscode-stylelint)Після встановлення VS Code підкреслюватиме CSS-помилки прямо в редакторі — до запуску браузера.
Stylelint та його конфіги встановлюються через npm (Node Package Manager). Відкрийте термінал у VS Code (Ctrl + `) і виконайте:
npm install -g stylelint stylelint-config-standard stylelint-config-recess-order stylelint-order
-g (global) встановлює пакети глобально на вашому комп'ютері — один раз для всіх проєктів. Після цього команда stylelint буде доступна у будь-якій папці без додаткових встановлень.Що встановлюємо і навіщо — розберемо детально.
Сам Stylelint — це рушій перевірки. Без нього нічого не працює. Він читає ваш CSS, застосовує правила з конфігурації та повідомляє про порушення.
Сам по собі stylelint без конфігів взагалі не перевіряє — потрібні правила. Саме для цього існують extends-конфіги.
Пакет: stylelint
NPM: npmjs.com/package/stylelint
Офіційний стандартний конфіг від команди Stylelint. Містить ~100 правил, що відповідають специфікації CSS та усталеним практикам:
color: red; color: blue; — помилка)0px → 0, бо нуль без одиниці)font-family: 'Arial'){ color: red } → { color: red; })/* ❌ Stylelint-config-standard вкаже на помилку: */
a {
color: red;
color: blue; /* Дублікат! */
margin: 0px; /* Зайві "px" після 0 */
}
/* ✅ Правильно: */
a {
color: blue;
margin: 0;
}
Пакет: stylelint-config-standard
NPM: npmjs.com/package/stylelint-config-standard
Визначає обов'язковий порядок CSS-властивостей за методологією Recess (Bootstrap/Twitter). Це, мабуть, найкорисніший конфіг для командної роботи.
Чому порядок важливий? Уявіть, що кожен розробник розставляє color, display, margin в довільному порядку. Код стає важче читати. Stylelint-config-recess-order нав'язує одну логічну послідовність для всього проєкту.
Логіка порядку (від загального до конкретного):
/* ✅ Порядок за RECESS: */
.element {
/* 1. Позиціонування */
position: absolute;
top: 0;
left: 0;
z-index: 10;
/* 2. Блокова модель */
display: flex;
width: 100px;
height: 100px;
margin: 0 auto;
padding: 1rem;
/* 3. Типографія */
font-size: 16px;
line-height: 1.5;
color: #333;
text-align: center;
/* 4. Зовнішній вигляд */
background-color: #fff;
border: 1px solid #ddd;
border-radius: 4px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
/* 5. Анімація */
transition: all 0.3s ease;
}
/* ❌ Stylelint вкаже на помилку — неправильний порядок: */
.element {
color: red; /* Типографія стоїть перед позиціонуванням */
position: fixed; /* Позиціонування має бути першим */
display: block;
}
Пакет: stylelint-config-recess-order
NPM: npmjs.com/package/stylelint-config-recess-order
Низькорівневий плагін, що реалізує саму механіку перевірки порядку властивостей. stylelint-config-recess-order залежить від нього і використовує надані ним правила (order/properties-order).
Ви рідко взаємодієте з stylelint-order напряму — але він обов'язково має бути встановлений, бо stylelint-config-recess-order оголошує його як peerDependency.
Пакет: stylelint-order
NPM: npmjs.com/package/stylelint-order
.stylelintrc.jsonStylelint шукає конфігураційний файл у корені проєкту. Створіть файл .stylelintrc.json:
{
"extends": ["stylelint-config-standard", "stylelint-config-recess-order"],
"plugins": ["stylelint-order"],
"rules": {
"alpha-value-notation": "number",
"color-function-notation": "legacy",
"selector-class-pattern": null
}
}
Що робить кожна секція:
stylelint-config-recess-order додає правила порядку поверх стандартних правил.stylelint-order надає правила типу order/properties-order, якими користується stylelint-config-recess-order."alpha-value-notation": "number" — дозволяє rgba(0, 0, 0, 0.5) замість rgba(0 0 0 / 50%)"color-function-notation": "legacy" — дозволяє старий синтаксис rgb(255, 0, 0) (сумісність)"selector-class-pattern": null — відключає перевірку іменування класів (корисно для BEM або фреймворків)Ланцюжок спрацьовує при кожному Ctrl + S:
Після налаштування створіть test.css з такими помилками:
/* Цей файл ПОВИНЕН показувати помилки Stylelint */
.card {
color: red; /* Помилка: color до position? */
position: relative; /* position має бути першим */
padding: 0px; /* Помилка: 0px → 0 */
color: blue; /* Помилка: дублікат color + неправильний регістр */
}
При збереженні (Ctrl + S) Stylelint автоматично:
0px → 0position: relative перед colorCOLOR: blue червоним (дублікат — автовиправлення неможливе)Окрім VS Code, Stylelint запускається вручну — корисно для CI/CD або перевірки перед коммітом:
# Перевірити всі CSS-файли
npx stylelint "**/*.css"
# Перевірити SCSS-файли
npx stylelint "**/*.scss"
# Перевірити та автоматично виправити
npx stylelint "**/*.css" --fix
# Перевірити конкретний файл
npx stylelint style.css
Додайте в package.json для зручності:
{
"scripts": {
"lint:css": "stylelint \"**/*.css\"",
"lint:css:fix": "stylelint \"**/*.css\" --fix"
}
}
Тепер npm run lint:css перевіряє весь CSS, npm run lint:css:fix — виправляє.
Тег (від англ. tag — мітка) — основна одиниця HTML-розмітки. Теги записуються в кутових дужках і вказують браузеру, як відображати вміст.
Більшість тегів бувають парними — мають відкриваючий та закриваючий варіанти:
<p>Це абзац тексту.</p>
Анатомія парного тегу:
<p> — відкриваючий тег (opening tag)Це абзац тексту. — вміст (content)</p> — закриваючий тег (closing tag), завжди починається з /Деякі теги є одинарними (самозакривними) — вони не мають вмісту:
<br />
<!-- Перенос рядка -->
<img />
<!-- Зображення -->
<input />
<!-- Поле вводу -->
<hr />
<!-- Горизонтальна лінія -->
<meta />
<!-- Метадані -->
<link />
<!-- Підключення ресурсів -->
<br> є правильним. Ви можете зустріти старіший синтаксис <br /> — це XHTML-нотація, яка теж допустима, але не обов'язкова.Елемент (element) — це весь вміст між відкриваючим і закриваючим тегами, включно із самими тегами.
<p>Це елемент абзацу.</p>
<!-- ↑ Весь цей рядок — елемент <p> -->
Елементи можуть бути вкладені один в одного (принцип матрьошки):
<article>
<h2>Заголовок статті</h2>
<p>Перший абзац з <strong>важливим словом</strong>.</p>
<p>Другий абзац.</p>
</article>
Тут <article> є батьківським елементом (parent element), а <h2> та <p> — дочірніми елементами (child elements). <strong> є дочірнім щодо <p>.
<!-- ❌ Неправильно: -->
<b><i>текст</b></i>
<!-- ✅ Правильно: -->
<b><i>текст</i></b>
Атрибут (attribute) — додаткова характеристика тегу, яка уточнює його поведінку або зовнішній вигляд. Атрибути записуються тільки у відкриваючому тегу у форматі назва="значення".
<a href="https://google.com" target="_blank" title="Відкрити Google"> Посилання на Google </a>
Розбір атрибутів:
href="https://google.com" — адреса посиланняtarget="_blank" — відкрити у новій вкладціtitle="Відкрити Google" — підказка при наведенні мишіГлобальні атрибути доступні для будь-якого HTML-тегу:
#my-id) та JavaScript (getElementById).id, однаковий клас може мати будь-яка кількість елементів. Основний інструмент для застосування CSS-стилів.style="color: red; font-size: 18px;". Використовуйте рідко — для особливих випадків.lang="uk" для українського тексту. Важливо для пошукових систем та скринрідерів.data-user-id="42". Доступні через JavaScript.DOCTYPE — це перший рядок кожного HTML-документа. Він повідомляє браузеру, яку версію HTML ви використовуєте, щоб браузер міг правильно побудувати DOM (Document Object Model — об'єктна модель документа) і застосувати відповідні правила рендерингу.
Без DOCTYPE браузер переходить у «режим сумісності» (quirks mode) — і намагається відтворити поведінку старих браузерів 1990-х, що може призвести до непередбачуваного відображення.
У HTML5 DOCTYPE максимально простий:
<!DOCTYPE html>
<!DOCTYPE html> — це не HTML-тег. Це спеціальна директива для браузера. Вона не має закриваючого тегу і регістр не важливий (хоча прийнято писати DOCTYPE великими літерами).Для цікавості — ось як виглядав DOCTYPE у старих стандартах:
<!DOCTYPE html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Очевидно, чому HTML5 переміг — простота перемагає.
<!DOCTYPE html>
<html lang="uk">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Опис сторінки для пошукових систем" />
<title>Назва моєї першої сторінки</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<!-- Основний вміст сторінки -->
<h1>Ласкаво просимо!</h1>
<p>Це моя перша HTML-сторінка.</p>
<script src="script.js"></script>
</body>
</html>
Розберемо кожен елемент детально.
<html> — кореневий елементТег <html> є кореневим елементом (root element) — він містить у собі весь HTML-документ. Буквально все, що є на сторінці, знаходиться всередині цього тегу.
<html lang="uk">
<!-- Весь вміст документа -->
</html>
Атрибут lang вказує мову документа. Це критично важливо для:
hyphens: auto для переносу слів потребує правильного langКоди мов за стандартом ISO 639-1:
uk — українськаen — англійськаde — німецькаfr — французькаuk-UA — українська (Україна) — регіональне уточнення<head> — «голова» документаТег <head> — це службовий розділ документа, вміст якого не відображається на сторінці. Тут знаходиться метаінформація: дані про документ, підключення стилів та скриптів, налаштування для пошукових систем і браузерів.
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Навчальний курс з HTML для початківців" />
<meta name="author" content="Іван Петренко" />
<title>HTML Курс — Урок 1</title>
<link rel="stylesheet" href="styles/main.css" />
<link rel="icon" href="favicon.ico" type="image/x-icon" />
</head>
<meta> — метادаніТег <meta> — одинарний (немає закриваючого тегу). Описує різноманітні властивості документа.
<meta charset="UTF-8"> — найважливіший мета-тег. Вказує кодування документа.
Кодування (charset, character set) — це таблиця відповідності між числовими кодами та символами. Наприклад, в UTF-8 символ А має код 1040, і — 1110.
Çàì³ñòü öüîãî òåêñòó âè ïîáà÷èòå îöå
<meta charset="UTF-8">першим рядком у <head>.Чому UTF-8? Це найуніверсальніше кодування, що підтримує символи практично всіх мов світу — від латиниці та кирилиці до китайських ієрогліфів та емодзі 🎉.
<meta name="viewport"> — критично важливий для мобільних пристроїв:
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
Без цього тегу мобільний браузер відображає сторінку, як ніби вона ширша за екран, і масштабує її вниз — текст стає нечитабельно дрібним.
<meta name="description"> — опис сторінки для пошукових систем (до 160 символів). Саме цей текст відображається в результатах пошуку Google під заголовком посилання.

<title> — заголовок документаТег <title> визначає назву документа, яка:
<title>Вступ до HTML — Курс веб-розробки 2024</title>
<title>:[Назва сторінки] — [Назва сайту]<link> — підключення ресурсівТег <link> підключає зовнішні ресурси: CSS-стилі, іконку сайту (favicon), шрифти.
<!-- Підключення CSS-файлу -->
<link rel="stylesheet" href="styles/main.css" />
<!-- Підключення Google Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;700&display=swap" rel="stylesheet" />
<!-- Favicon (іконка у вкладці) -->
<link rel="icon" href="/favicon.ico" type="image/x-icon" />
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
<body> — тіло документаТег <body> — це видима частина сторінки. Весь контент, який бачить користувач — текст, зображення, посилання, форми — знаходиться саме тут.
<body>
<header>
<h1>Мій перший сайт</h1>
<nav>
<a href="/">Головна</a>
<a href="/about">Про нас</a>
</nav>
</header>
<main>
<article>
<h2>Перша стаття</h2>
<p>Текст статті...</p>
</article>
</main>
<footer>
<p>© 2024 Мій сайт</p>
</footer>
</body>
<script> з основним JS-кодом рекомендується розміщувати перед </body> — так HTML-структура завантажиться першою, і користувач побачить сторінку швидше (до завершення завантаження JavaScript).Коментарі — текст, який браузер ігнорує. Корисні для пояснення коду та тимчасового приховування блоків.
<!-- Це однорядковий коментар -->
<!--
Це багаторядковий коментар.
Можна приховати цілий блок коду.
-->
<!-- Початок шапки сайту -->
<header>
<h1>Заголовок</h1>
</header>
<!-- Кінець шапки сайту -->
Гаряча клавіша у VS Code: Ctrl + / на рядку або для виділеного блоку.
Щоб зрозуміти, чому кодування важливе, уявіть таку аналогію: кодування — це мова, якою написана книга. Якщо ви спробуєте читати англійський текст через французький словник — отримаєте безглуздий результат. Так само і з файлами.
Як перевірити та змінити кодування у VS Code:
UTF-8)Change File EncodingЯк VS Code зберігає файли:
VS Code за замовчуванням зберігає файли в UTF-8 без BOM (Byte Order Mark — мітка порядку байтів). Це правильно для веб-розробки. Деякі старі версії Notepad Windows додавали BOM, що могло призводити до проблем на сервері.
Валідація (validation) — перевірка HTML-коду на відповідність стандартам W3C. Некоректний HTML може відображатися непередбачувано в різних браузерах.
Онлайн-валідатор: validator.w3.org
Можна валідувати:
Приклад помилки валідатора:
Error: Element "center" not allowed as child of element "body" in this context.
→ Тег <center> є застарілим у HTML5, використовуйте CSS: text-align: center
Уявіть книгу без змісту та розділів — лише суцільний текст. Читати її було б важко. Заголовки в HTML виконують ту ж роль: структурують документ і полегшують навігацію.
Заголовки також мають вагу для SEO: пошукові системи використовують заголовки для розуміння структури та теми сторінки. Заголовок <h1> — найбільш значущий.
В HTML є 6 рівнів заголовків: від <h1> (найбільший, найважливіший) до <h6> (найменший).
<h1>Заголовок першого рівня</h1>
<h2>Заголовок другого рівня</h2>
<h3>Заголовок третього рівня</h3>
<h4>Заголовок четвертого рівня</h4>
<h5>Заголовок п'ятого рівня</h5>
<h6>Заголовок шостого рівня</h6>
Буква h походить від англійського heading (заголовок). Цифра вказує на рівень важливості.
Ось як brauzер відображає ці заголовки за замовчуванням:

✅ Правильно
<h1> на сторінці — назва сторінки або головна тема<h2> для основних розділів<h3> для підрозділів всередині <h2><h1> бажано збігається з <title>❌ Неправильно
<h1> на одній сторінці<h1> → <h3> (пропущено <h2>)<h3> лише тому, що він «підходить за розміром»)Заголовки — це блокові елементи (block elements). Це означає:
<h2>Короткий заголовок</h2>
<p>Цей абзац автоматично буде на новому рядку</p>
<p>Суцільний текст без абзаців — це катастрофа для читача. Абзаци (paragraph) ділять текст на смислові блоки, полегшуючи сприйняття.
Важливо розуміти: HTML ігнорує пробіли та переноси рядків у коді! Скільки б ви не натискали Enter в редакторі — браузер покаже все як один рядок.
<!-- Цей код -->
<p>Перше речення. Друге речення. Третє речення після порожнього рядка.</p>
<!-- Браузер покаже так: -->
<!-- Перше речення. Друге речення. Третє речення після порожнього рядка. -->
Єдиний спосіб розділити текст — теги.
<p><p>Це перший абзац тексту. Він може бути довгим і займати кілька рядків.</p>
<p>Це другий абзац. Браузер автоматично додасть відступ між абзацами.</p>
Браузер додає відступи зверху та знизу кожного абзацу (відповідно до стандартних стилів — margin: 1em 0). Це візуально відокремлює один блок тексту від іншого.
<p> vs <br> — яка різниця?Новачки часто плутаються між цими двома тегами.
<!-- <br> — лише перенос рядка, без семантики -->
Перший рядок<br />
Другий рядок<br />
Третій рядок
<!-- <p> — семантичний абзац, з відступами -->
<p>Перший абзац</p>
<p>Другий абзац</p>
<br> | <p> | |
|---|---|---|
| Тип | Одинарний тег | Парний тег |
| Ефект | Перенос рядка | Новий абзац з відступами |
| Семантика | Немає | Є (смисловий блок) |
| Коли використовувати | Адреси, вірші | Звичайний текст |
<br> лише там, де перенос рядка є частиною самого вмісту (адреса, поезія, пісенний текст). Для звичайного тексту завжди використовуйте <p>.<div> — блоковий контейнерТег <div> (division — розділ) — найбільш нейтральний блоковий контейнер. На відміну від <p>, <article>, <section> він не несе жодного семантичного значення — це просто «коробка», яка групує елементи для CSS або JavaScript.
<div class="card">
<div class="card-header">
<h3>Назва картки</h3>
</div>
<div class="card-body">
<p>Вміст картки</p>
</div>
<div class="card-footer">
<button>Детальніше</button>
</div>
</div>
<div> неймовірно корисний для:
<div>: <header>, <nav>, <main>, <section>, <article>, <aside>, <footer>. Коли є підходящий семантичний тег — краще використовувати його замість <div>. Але <div> ніди не вийде з вжитку — занадто він зручний для CSS-майстерні.<span> — рядковий контейнерТег <span> — рядковий аналог <div>. Він також семантично нейтральний, але є рядковим (inline) елементом — не переносить текст на нови рядок.
<p>
Температура сьогодні
<span class="temperature highlight">+23°C</span>
— ідеальна для прогулянки.
</p>
Де використовується <span>:
Emmet — це плагін (вбудований у VS Code), який розгортає короткі абревіатури в повноцінний HTML. Він кратно прискорює написання коду.
Введіть у порожньому .html файлі символ ! і натисніть Tab:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body></body>
</html>
Вся базова структура — однією клавішею!
div>p
→ <div><p></p></div>
ul>li
→ <ul><li></li></ul>
h1+p
→ <h1></h1><p></p>
div+div+div
→ три <div> поряд
ul>li*5
→ <ul> з 5 елементами <li>
p*3
→ три абзаци <p>
h1{Заголовок}
→ <h1>Заголовок</h1>
p{Lorem ipsum}
→ <p>Lorem ipsum</p>
div.container
→ <div class="container"></div>
p.lead.text-center
→ <p class="lead text-center"></p>
section#hero
→ <section id="hero"></section>
<!-- Абревіатура: -->
header>nav>ul>li*4>a{Пункт меню $}
<!-- Результат: -->
<header>
<nav>
<ul>
<li><a href="">Пункт меню 1</a></li>
<li><a href="">Пункт меню 2</a></li>
<li><a href="">Пункт меню 3</a></li>
<li><a href="">Пункт меню 4</a></li>
</ul>
</nav>
</header>
<!-- Абревіатура: -->
section.hero>div.container>h1{Заголовок сторінки}+p{Підзаголовок}+a.btn{Дізнатись більше}
<!-- Результат: -->
<section class="hero">
<div class="container">
<h1>Заголовок сторінки</h1>
<p>Підзаголовок</p>
<a href="" class="btn">Дізнатись більше</a>
</div>
</section>
Lorem ipsum — класичний текст-заповнювач для макетів. Emmet генерує його автоматично:
<!-- p>lorem → -->
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua.
</p>
<!-- p>lorem5 → 5 слів -->
<p>Lorem ipsum dolor sit amet.</p>
<!-- p*3>lorem20 → 3 абзаци по 20 слів -->
Деякі атрибути обов'язкові для правильної роботи тегу:
<!-- Без src зображення не відобразиться -->
<img src="photo.jpg" alt="Опис фото" />
<!-- Без href посилання нікуди не веде -->
<a href="https://example.com">Текст посилання</a>
Інші атрибути необов'язкові — лише уточнюють поведінку:
<!-- target="_blank" — необов'язковий, але змінює поведінку -->
<a href="https://example.com" target="_blank">Відкрити у новій вкладці</a>
Деякі атрибути є булевими (boolean) — їхня наявність означає true, відсутність — false:
<!-- Усі три записи рівнозначні: -->
<input type="checkbox" checked />
<input type="checkbox" checked="" />
<input type="checkbox" checked="checked" />
<!-- Інші приклади булевих атрибутів: -->
<button disabled>Недоступна кнопка</button>
<input type="text" readonly />
<details open>Відкритий спойлер за замовчуванням</details>
<video autoplay muted loop>...</video>
З переходом на HTML5 та CSS3 багато атрибутів стали застарілими (deprecated). Їх підтримка браузерами може припинитися.
| Застарілий атрибут | Сучасна CSS-альтернатива |
|---|---|
<p align="center"> | text-align: center |
<font color="red"> | color: red |
<font size="5"> | font-size: 1.5em |
<body bgcolor="#fff"> | background-color: #fff |
<img width="200"> | width: 200px (в CSS) |
<h1 align="right"> | text-align: right |
Застосуйте отримані знання! Створіть HTML-сторінку — власну міні-біографію.
Створіть файл biography.html. У VS Code введіть ! + Tab для базової структури. Змініть lang на "uk" та <title> на своє ім'я.
<body>
<h1>Іван Петренко</h1>
<p>Веб-розробник. Навчаюся HTML з нуля.</p>
</body>
Додайте кілька розділів:
<h2>Про мене</h2>
<p>Мене звати [Ваше ім'я]. Я живу в [місто] і вивчаю веб-розробку.</p>
<h2>Мої навички</h2>
<p>Поки що лише HTML, але це лише початок!</p>
<h2>Мої цілі</h2>
<p>Хочу стати фронтенд-розробником і створювати красиві сайти.</p>
</body>
Збережіть файл (Ctrl + S) та клацніть "Go Live" у VS Code (розширення Live Server).
Відкрийте validator.w3.org, вставте свій код та перевірте на помилки.
Ми пройшли шлях від появи HTML у 1991 році до сучасного HTML5. Розібрали структуру кожного елемента документа та навчилися ефективно використовувати VS Code з Emmet.
📚 DOCTYPE
<!DOCTYPE html> — обов'язковий перший рядок кожного HTML5-документа. Вмикає стандартний режим рендерингу браузера.🧠 HEAD
<head> містить метадані: кодування (<meta charset>), заголовок (<title>), підключення стилів (<link>). Не відображається на сторінці.👁️ BODY
<body> — вся видима частина. Заголовки <h1>–<h6>, абзаци <p>, контейнери <div>, <span> — тут живе ваш контент.⚡ Emmet
!, div.class>p*3>lorem, яка перетворює одну стрічку на десятки рядків HTML. Вбудована у VS Code.