HTML — HyperText Markup Language, мова розмітки для структурування вмісту вебсторінок (текст, зображення, посилання тощо).
Призначення — описувати структуру та семантику контенту, який браузер відображає користувачу.
Разом вони формують основу фронтенд-розробки: HTML — кістяк, CSS — одяг, JavaScript — поведінка.
HTML теги — це інструкції (команди), які визначають структуру та зміст веб-сторінки. Теги пишуться у кутових дужках < >
.
Більшість тегів мають відкриваючу та закриваючу частини:
<p>Текст абзацу</p>
Деякі теги самозакриваючі:
<br />
<img src="image.jpg" alt="Зображення" />
Теги можуть мати атрибути:
<a href="https://example.com">Посилання</a>
HTML елемент — це відкриваючий тег + контент + закриваючий тег.
<tagname attribute="value">контент</tagname>
Приклади:
<h1>Заголовок</h1> — елемент заголовка
<p>Абзац тексту</p> — елемент абзацу
<img src="photo.jpg" alt="Фото"> — елемент зображення (самозакриваючий)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Назва сторінки</title>
</head>
<body>
<!-- Вміст сторінки -->
</body>
</html>
Складові: <!DOCTYPE html>
— HTML5; <html>
— кореневий елемент; <head>
— метадані; <body>
— видимий контент.
DOCTYPE (Document Type Declaration) — декларація типу документа, яка повідомляє браузеру, яку версію HTML використовує сторінка.
<!DOCTYPE html>
Поточна версія — HTML5. Це Living Standard (живий стандарт), що постійно оновлюється.
html lang
?<!DOCTYPE html> — вказує стандарт HTML5
<html lang="uk"> — вказує мову вмісту
Покращують доступність, SEO та коректність відображення сторінки.
<head>
?Тег <head>
містить метаінформацію про документ:
<title>
<meta>
<link>
<script>
<link rel="icon">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Назва сторінки</title>
<link rel="stylesheet" href="styles.css" />
<script src="script.js"></script>
</head>
<head>
та <body>
?<head> — метадані (не відображаються напряму). <body> — видимий контент (текст, зображення, кнопки тощо).
Пробільний простір — пробіли, табуляції та переноси рядків. Браузер зазвичай схлопує кілька пробілів до одного, кілька переносів — до пробілу; початкові та кінцеві пробіли ігноруються.
Приклад:
<p>Цей текст має багато пробілів</p>
Відображення: Цей текст має багато пробілів
Щоб зберегти пробіли й переноси — CSS white-space: pre
або тег <pre>
.
Порожні (void) елементи не мають контенту і закриваючого тега.
<br>
— розрив рядка<hr>
— горизонтальна лінія<img>
— зображення<input>
— поле вводу<meta>
, <link>
— метадані/ресурси<img src="photo.jpg" alt="Фото" />
<br />
<input type="text" name="name" />
<div>
і <span>
?<div>
— блоковий елемент (повна ширина, з нового рядка) — для великих блоків.<span>
— вбудований елемент (лише потрібна ширина, в рядку) — для невеликих фрагментів.<div>Це блоковий елемент</div>
<div>Він займає всю ширину</div>
<p>Це <span>вбудований елемент</span> всередині абзацу.</p>
<b>
та <strong>
?<b>
— візуально жирний, без семантики. <strong>
— жирний із семантичним акцентом (важливість, впливає на доступність).
<p>Цей текст <b>жирний</b> тільки візуально.</p>
<p>Цей текст <strong>важливий</strong> за змістом.</p>
<em>
замість <i>
?<em>
— курсив із логічним/інтонаційним наголосом.<i>
— курсив без семантики (назви, іншомовні слова, терміни).<p>Я <em>дуже</em> хочу це зробити!</p>
<p>Фільм <i>Титанік</i> вийшов у 1997 році.</p>
<p>Слово <i>bonjour</i> означає "привіт" французькою.</p>
<small>
, <s>
та <mark>
?<small>
— другорядна/додаткова інформація (менший текст).<s>
— закреслений (втратив актуальність).<mark>
— підсвічений фрагмент.<p>Ціна: <s>100 грн</s> 80 грн</p>
<p><mark>Важливо:</mark> Термін дії до 31 грудня.</p>
<p>Основний текст. <small>© 2023 Всі права захищені.</small></p>
Абзац:
<p>Текст абзацу</p>
Розрив рядка:
Текст першого рядка<br />Текст другого рядка
Коли що: <p>
— для абзаців; <br>
— для примусового переносу в межах одного блоку (адреси, вірші). (<br>
— порожній тег)
<sub>
та <sup>
?<sub>
— підрядковий (нижче базової лінії).<sup>
— надрядковий (вище базової лінії).<p>H<sub>2</sub>O — формула води</p>
<p>E = mc<sup>2</sup> — формула Ейнштейна</p>
<p>CO<sub>2</sub> — вуглекислий газ</p>
<p>Цей факт<sup>1</sup> потребує підтвердження.</p>
<samp>
?<samp>
— позначає результат виконання програми (повідомлення, вивід). За замовчуванням рендериться моноширинним шрифтом.
<p>Результат виконання: <samp>Помилка: Невірний ввід</samp></p>
<p>Командний рядок повернув: <samp>Hello World!</samp></p>
Пов’язані теги: <code>
— фрагменти коду, <kbd>
— клавіші, <var>
— змінні.
Семантичні теги надають значення контенту, полегшують роботу браузеру, пошуковим системам та допоміжним технологіям.
<header>
— шапка документа або секції<footer>
— нижній колонтитул документа або секції<article>
— самостійний блок контенту<section>
— логічний розділ<nav>
— навігаційне меню<figure>
та <figcaption>
?<figure>
— контейнер для ілюстрацій, діаграм, фото тощо. <figcaption>
— підпис до фігури.
<figure>
<img src="photo.jpg" alt="Фото">
<figcaption>Підпис до фото</figcaption>
</figure>
HTML підтримує три основні типи списків:
<ul>
— ненумерований список<ol>
— нумерований список<dl>
— список визначень (definition list)<ul>
<li>Пункт 1</li>
<li>Пункт 2</li>
</ul>
alt
у тегу <img>
?Атрибут alt
описує вміст зображення для доступності та SEO. Якщо зображення не завантажується, користувач побачить текст з alt
.
<img src="logo.png" alt="Логотип компанії">
Посилання створюється тегом <a>
з атрибутом href
:
<a href="https://example.com">Відкрити сайт</a>
Атрибут target="_blank"
відкриває посилання в новій вкладці.
Форма збирає дані від користувача:
<form>
— контейнер форми<input>
— поле вводу<textarea>
— текстове поле<button>
— кнопка відправки<select>
— випадаючий список<form action="/submit" method="post">
<input type="text" name="name" />
<button type="submit">Відправити</button>
</form>
id
і class
?Атрибути для ідентифікації та стилізації елементів:
id
— унікальний ідентифікатор елемента на сторінціclass
— група елементів з однаковим класом для стилізації або скриптів<div id="header">Шапка</div>
<div class="card">Картка 1</div>
<div class="card">Картка 2</div>
title
?Атрибут title
надає підказку при наведенні курсора на елемент:
<abbr title="HyperText Markup Language">HTML</abbr>
Допомагає зрозуміти значення абревіатур та складних термінів.
Коментарі — це текст, який не відображається у браузері:
<!-- Це коментар -->
Використовуються для пояснень коду або тимчасового відключення фрагментів HTML.
Медіа-елементи додають аудіо та відео на сторінку:
<audio>
— для звуку<video>
— для відео<audio controls>
<source src="music.mp3" type="audio/mpeg">
</audio>
<video width="320" height="240" controls>
<source src="movie.mp4" type="video/mp4">
</video>
<iframe>
?<iframe>
дозволяє вбудовувати інший HTML-документ всередині сторінки:
<iframe src="https://example.com" width="600" height="400"></iframe>
Використовується для вбудовування карт, відео, сторонніх сайтів тощо.
<main>
і для чого він використовується?<main>
— головний контент сторінки. Використовується один раз на сторінку і містить основну інформацію.
<aside>
і коли його використовують?<aside>
— бічний блок або додаткова інформація, що не є основним контентом (наприклад, сайдбар, рекламні блоки).
<mark>
і чим він відрізняється від <strong>
?<mark>
— підсвічує текст (візуально), <strong>
— підкреслює важливість семантично та візуально.
<time>
і як його правильно використовувати?<time>
— відображає дату або час. Має атрибут datetime
для стандартизованого формату.
<time datetime="2025-09-04">4 вересня 2025</time>
<address>
і де його доцільно розміщувати?<address>
— контактна інформація автора або організації. Використовується у <footer>
або окремому блоці контакту.
<section>
та <article>
?<section>
— логічний розділ контенту. <article>
— самостійний, незалежний блок (новини, блог-пост, коментар).
<blockquote>
і як його форматують?<blockquote>
— довга цитата. Може мати атрибут cite
для джерела.
<cite>
і коли його застосовують?<cite>
— посилання на джерело, назву книги, статті або роботи. Використовується всередині цитат.
<q>
для коротких цитат?<q>
— для коротких цитат у тексті. Браузер автоматично додає лапки.
<p>Він сказав: <q>Привіт!</q></p>
<details>
та <summary>
і як їх правильно поєднувати?<details>
— розкривний блок, <summary>
— заголовок, який відображається завжди. Використовуються разом для FAQ чи прихованого контенту.
<ul>
<li>Пункт 1
<ul>
<li>Підпункт 1</li>
<li>Підпункт 2</li>
</ul>
</li>
<li>Пункт 2</li>
</ul>
<ul>
від <ol>
?<ul>
— ненумерований список, <ol>
— нумерований список. Використовуються для різних контекстів.
<dl>
, <dt>
та <dd>
і як їх використовувати?<dl>
— список визначень, <dt>
— термін, <dd>
— визначення.
<dl>
<dt>HTML</dt>
<dd>Мова розмітки</dd>
</dl>
<table>
?<table>
<tr><th>Ім'я</th><th>Вік</th></tr>
<tr><td>Оля</td><td>25</td></tr>
</table>
<thead>
, <tbody>
та <tfoot>
у таблицях?Розділяють таблицю на заголовок (<thead>
), тіло (<tbody>
) та нижню частину (<tfoot>
).
colspan
та rowspan
у таблицях?Атрибути дозволяють об’єднувати стовпці та рядки:
<td colspan="2">Об'єднані стовпці</td>
<td rowspan="2">Об'єднані рядки</td>
<caption>
у таблиці і навіщо він потрібен?<caption>
— підпис таблиці, який описує її зміст. Розміщується всередині <table>
перед рядками.
<form>
та <fieldset>
?<form>
— контейнер для вводу даних. <fieldset>
групує пов’язані поля, <legend>
дає заголовок групи.
<label>
і як він взаємодіє з <input>
?<label for="id">Текст</label>
пов’язує підпис з полем вводу через атрибут id
для кращої доступності.
<input>
існують і для чого вони потрібні?text
— звичайний текстpassword
— парольemail
— emailnumber
— числове значенняcheckbox
, radio
— прапорці та радіо-кнопкиsubmit
— кнопка відправкиfile
— вибір файлу<img>
і які основні атрибути він підтримує?<img>
вставляє зображення. Основні атрибути: src
— шлях до зображення, alt
— альтернативний текст, width
, height
.
<picture>
і як він допомагає адаптивним зображенням?<picture>
дозволяє задавати різні джерела зображень для різних розмірів екрану через <source>
.
<audio>
і як додати альтернативні формати аудіо?<audio controls>
додає аудіо. Для підтримки всіх браузерів додають кілька <source>
з різними форматами.
<video>
і як працює атрибут controls
?<video controls>
— відео з елементами керування: відтворити, пауза, гучність.
<iframe>
?<iframe src="https://www.youtube.com/embed/VIDEO_ID" width="560" height="315" frameborder="0" allowfullscreen></iframe>
<source>
і де його використовують?<source>
використовується всередині <audio>
або <video>
для підключення альтернативних форматів.
<track>
для субтитрів у відео?<track kind="subtitles" src="subtitles.vtt" srclang="ua" label="Українська">
додає субтитри до відео.
<canvas>
і як створювати графіку за допомогою нього?<canvas id="myCanvas" width="200" height="100"></canvas>
дозволяє малювати графіку через JavaScript.
<svg>
і коли краще використовувати замість <img>
?<svg>
— векторна графіка. Краще для логотипів, іконок та анімацій, де важлива масштабованість без втрати якості.
<map>
та <area>
і як вони створюють клікабельні зони на зображенні?Створюють інтерактивні зони на зображенні. <map name="mapName">
містить <area shape="rect" coords="x1,y1,x2,y2" href="#">
.
Абсолютні: повний URL (https://...). Відносні: шлях від поточної сторінки (./index.html, ../page.html).
<a>
з target="_blank"
і rel="noopener"
?Відкриває посилання у новій вкладці. rel="noopener"
підвищує безпеку та швидкодію.
#id
) і як на них посилатися?Позначка в документі. Посилання: <a href="#section1">Перейти</a>
.
<base>
?<base href="https://example.com/">
встановлює базовий URL для всіх відносних посилань на сторінці.
<button>
та <input type="button">
?<button>Натисни</button>
або <input type="button" value="Натисни">
. Обидва створюють кнопки, але <button>
гнучкіший у розмітці.
<nav>
і для чого він потрібен?Семантичний блок для навігації по сайту. Може містити списки посилань (<ul><li><a></a></li></ul>
).
<ul>
і <li>
у <nav>
?Створюють структуроване меню: <nav><ul><li><a href="#">Посилання</a></li></ul></nav>
.
<menu>
та <menuitem>
і чи актуально їх використовувати?За старим стандартом створювали меню. Сьогодні майже не використовуються через погану підтримку браузерами.
<button onclick="history.back()">Назад</button>
повертає на попередню сторінку.
<link>
і як він підключає стилі та інші ресурси?<link rel="stylesheet" href="style.css">
підключає CSS. Може використовуватися для фавіконів, prefetch, альтернативних ресурсів.
<meta charset>
і навіщо його вказувати?Встановлює кодування сторінки (зазвичай UTF-8) для правильного відображення символів.
<meta name="viewport">
і як він впливає на мобільні пристрої?Контролює масштаб та ширину сторінки на мобільних пристроях, наприклад: <meta name="viewport" content="width=device-width, initial-scale=1">
.
<meta name="description">
для SEO?Короткий опис сторінки, який відображається в результатах пошуку. Допомагає пошуковим системам зрозуміти зміст.
<meta name="keywords">
і чи варто його використовувати?Список ключових слів для SEO. Сьогодні мало впливає на пошукові системи, тому використання необов’язкове.
<meta http-equiv>
і які типи є?Дозволяє встановлювати заголовки HTTP через HTML, наприклад: Content-Type
, refresh
, X-UA-Compatible
.
<title>
і де його найкраще розміщувати?Задає заголовок вкладки/сторінки. Розміщується всередині <head>
.
<link rel="icon">
?Маленька іконка сайту у вкладці браузера: <link rel="icon" href="favicon.ico" type="image/x-icon">
.
<link>
або <style>
?Через Google Fonts: <link href="https://fonts.googleapis.com/css2?family=Roboto&display=swap" rel="stylesheet">
.
<base>
і як він впливає на посилання в документі?Встановлює базовий URL для всіх відносних посилань: <base href="https://example.com/">
.
<noscript>
для альтернативного контенту?Відображає контент, якщо у користувача вимкнено JavaScript: <noscript>Включіть JS</noscript>
.
hidden
і як він працює?Приховує елемент на сторінці: <div hidden>Схований блок</div>
.
data-*
атрибути і для чого вони потрібні?Зберігають власні дані для JavaScript: <div data-id="123"></div>
.
contenteditable
і де його застосовують?Дозволяє редагувати текст елемента напряму на сторінці: <div contenteditable>Редагуй мене</div>
.
draggable
і як додати перетягування елементів?Дозволяє перетягування елементів: <div draggable="true">Перетягни мене</div>
.
tabindex
для управління фокусом?Встановлює порядок фокусування через Tab: <button tabindex="1">Перша</button>
.
ARIA додає семантику для допоміжних технологій: role="button"
, aria-label="Опис кнопки"
.
spellcheck
і як його використовувати в текстових полях?Увімкнення перевірки орфографії: <input type="text" spellcheck="true">
.
autofocus
?Автоматично встановлює фокус на елемент при завантаженні сторінки: <input autofocus>
.
required
у формах і як він контролює обов’язковість полів?Змушує користувача заповнити поле перед відправкою форми: <input required>
.
readonly
та disabled
і в чому різниця між ними?readonly
— поле можна виділити, але не редагувати. disabled
— поле неактивне і не відправляється з формою.
srcset
і sizes
?Вказує різні зображення для різних розмірів екранів: <img src="small.jpg" srcset="medium.jpg 600w, large.jpg 1200w" sizes="(max-width: 600px) 100vw, 50vw">
.
lazy loading
для зображень?Відкладене завантаження зображень для швидшого відображення сторінки: <img loading="lazy">
.
Чекбокси: <input type="checkbox">
, радіо: <input type="radio" name="group">
.
<progress>
і як його використовувати?Відображає прогрес: <progress value="50" max="100"></progress>
.
<meter>
і для чого він потрібен?Показує рівень або міру чогось: <meter value="0.6">60%</meter>
.
Використовують різні <link rel="icon">
та rel="apple-touch-icon"
для iOS та Android.
iframe sandbox
і як він підвищує безпеку?Атрибут sandbox
обмежує функції в <iframe>
(JS, форми, плагіни) для безпеки.
<details>
?Створює блок, що можна відкривати/закривати: <details><summary>Показати</summary>Контент</details>
.
Використовують медіа-запит @media print { ... }
для стилів друку.
Використовують семантичні теги, ARIA-атрибути, контрастний текст, альтернативні описи для зображень, правильну навігацію клавіатурою.
font-size: clamp(22px, 3.2vw, 32px);
?Властивість clamp(MIN, PREFERRED, MAX)
задає значення, яке завжди буде між мінімумом і максимумом.
font-size: clamp(22px, 3.2vw, 32px);
Шрифт гнучко підлаштовується під екран:
від 22px до 32px, а між ними масштабується через vw
.
1vw = 1% від ширини вікна браузера (viewport width).
Якщо ширина вікна = 1000px, тоді 1vw = 10px.
Якщо ширина вікна = 500px, тоді 1vw = 5px.
HTML (HyperText Markup Language) — це стандартна мова розмітки для створення веб-сторінок.
HTML-документ складається з <!DOCTYPE>
, <html>
, <head>
та <body>
.
Тег — це елемент розмітки HTML, який описує структуру та зміст документа.
Атрибут додає додаткову інформацію до елемента, наприклад href
для <a>
.
Парні (мають відкриваючий і закриваючий) і самозакривні (наприклад, <img />
).
<!DOCTYPE html>
вказує браузеру, що використовується HTML5.
Містить метадані: заголовок сторінки, підключення стилів, скриптів тощо.
Містить основний вміст сторінки, який відображається у браузері.
Використати теги <h1>...<h6>
.
Використати тег <p>
.
За допомогою тега <a href="url">текст</a>
.
Тег <img src="шлях" alt="опис">
.
Нумеровані (<ol>
) та марковані (<ul>
) списки з елементами <li>
.
Використати <table>
, <tr>
, <td>
, <th>
.
Теги, які описують зміст: <header>
, <footer>
, <article>
, <section>
.
Використовується для навігаційного меню.
Містить основний унікальний контент сторінки.
Використовується для побічного вмісту (наприклад, бокове меню).
Інформація про сторінку: <meta>
, <title>
, <link>
, <script>
.
<link rel="icon" href="favicon.ico">
Елемент для вставки іншої веб-сторінки в поточну.
HTML-елемент для малювання графіки за допомогою JavaScript.
Мова розмітки для векторної графіки, яку можна вбудовувати в HTML.
Додати target="_blank"
у <a>
.
Елемент <form>
, що збирає дані користувача.
text, password, email, number, checkbox, radio, date, file тощо.
Для введення багаторядкового тексту.
Тег для підпису полів форми, пов’язується з input через атрибут for
.
Групують поля форми і додають заголовок для групи.
Кнопка, яка може надсилати форму (submit
) або бути простою (button
).
Робить поле обов’язковим для заповнення.
Відображає підказку всередині поля введення.
Атрибут, що дозволяє браузеру підказувати дані для введення.
Автоматично ставить курсор у поле при завантаженні сторінки.
Робить поле форми неактивним для введення.
Поле <input type="hidden">
, яке зберігає невидимі дані.
Дозволяє перевіряти введення за регулярним виразом.
HTML-елемент для відображення прогресу виконання завдання.
Використовується для відображення кількісного значення в межах діапазону.
Надає список підказок для поля введення.
Елемент <audio>
використовується для відтворення звуку.
Елемент <video>
використовується для відтворення відео.
Використати тег <track>
всередині <video>
.
Тег <source>
визначає кілька джерел для медіа (<audio>
, <video>
).
Адаптивні зображення з атрибутами srcset
і sizes
.
Елемент <picture>
дозволяє вказати кілька варіантів зображень для різних пристроїв.
За допомогою <iframe>
з посиланням на YouTube.
Це практика створення сайтів, зручних для людей із обмеженими можливостями.
Атрибут alt
описує зображення для скрінрідерів і у випадку помилки завантаження.
Атрибут role
допомагає визначити роль елемента для assistive technology.
Атрибут для додаткового опису елемента у доступності.
Атрибут, що визначає порядок переходу між елементами за допомогою клавіші Tab.
Використання тегів за їхнім призначенням для кращої структури та доступності.
Специфікація для додавання структурованих даних у HTML (для SEO).
Формат для опису структурованих даних у <script type="application/ld+json">
.
Тег <meta name="description">
описує сторінку для пошукових систем.
Тег <meta name="viewport">
керує адаптивністю сторінки.
Метатеги (og:title
, og:image
) для відображення сторінки у соцмережах.
Маленька іконка сайту, що відображається у вкладці браузера.
Файл для керування індексацією сайту пошуковими системами.
Файл зі списком усіх сторінок сайту для пошукових систем.
Використання атрибута loading="lazy"
для завантаження картинок тільки при скролі.
Атрибут defer
відкладає виконання скрипта до завантаження HTML.
Атрибут async
завантажує і виконує скрипт паралельно.
Скрипти, які пишуться безпосередньо у <script>
у HTML.
Inline пишуться у тегах, зовнішні — у CSS-файлах через <link>
.
Атрибути data-*
, що дозволяють зберігати додаткові дані у елементах.
Механізм ізоляції стилів і розмітки всередині Web Components.
Стандарт для створення власних HTML-елементів із Shadow DOM.
Тег <template>
містить невидимий фрагмент HTML для подальшого використання.
Місце для вставки контенту у Web Components.
Атрибут, що робить елемент редагованим у браузері.
Властивість документа, яка дозволяє редагувати весь HTML.
Атрибут sandbox
обмежує права вбудованого контенту.
Атрибут для завантаження ресурсів з інших доменів з CORS.
Атрибут для перевірки цілісності ресурсу (Subresource Integrity).
Content Security Policy — механізм безпеки для контролю ресурсів у браузері.
Cross-Site Scripting — вразливість, що дозволяє виконувати шкідливий код у браузері.
Використовувати escaping, CSP, не довіряти введеним даним.
Протокол передачі даних із шифруванням (HTTP + TLS).
Скрипт, що працює у фоновому режимі для кешування та офлайн-режиму.
Progressive Web App — веб-додаток з можливостями нативного.
Файл конфігурації PWA: іконки, назва, кольори.
API браузера для збереження даних у вигляді ключ-значення.
API для збереження даних лише на час сесії.
Невеликі дані, які зберігаються у браузері для сесій і налаштувань.
База даних у браузері для збереження структурованих даних.
Інтерфейси localStorage
і sessionStorage
для збереження даних.
API для визначення геолокації користувача.
API для перетягування елементів у браузері.
API для перемикання елементів у повноекранний режим.
Технологія для прямої передачі аудіо та відео між браузерами.
Протокол для двостороннього з’єднання між клієнтом і сервером у реальному часі.
Server-Sent Events — одностороннє з’єднання для надсилання даних від сервера.
Версія HTTP, яка дозволяє мультиплексування запитів.
Версія HTTP на основі протоколу QUIC для швидшої передачі даних.
Попереднє завантаження сторінок для прискорення переходів.
Попереднє завантаження ресурсів, які можуть знадобитися.
Атрибут <link rel="preload">
для завантаження критичних ресурсів.
Оновлена специфікація Shadow DOM, що використовується у сучасних браузерах для Web Components.
Наразі проєкт ще в розробці...