HTML & CSS

Форматування тексту в HTML

Детальний розбір усіх тегів форматування тексту в HTML5: блокові та рядкові елементи, семантика vs. фізичне форматування, спецсимволи та CSS-властивості для тексту.

Форматування тексту в HTML

Чому форматування — це більше, ніж «зробити жирним»

Уявіть дві сторінки газети. На першій — суцільний текст без виділень, відступів, підзаголовків. На другій — той самий текст, але з чіткою ієрархією: жирні ключові слова, курсивні цитати, підкреслені посилання, виноски малим шрифтом.

Яку читати приємніше? Відповідь очевидна.

HTML надає два механізми форматування:

  1. Фізичне форматування (physical formatting) — змінює зовнішній вигляд тексту: <b>, <i>, <u>, <s>, <small>
  2. Логічне (семантичне) форматування (logical / semantic formatting) — описує значення тексту: <strong>, <em>, <del>, <ins>, <mark>, <abbr>
В HTML5 ці межі розмились: навіть теги «фізичного» форматування (<b>, <i>) отримали семантичний зміст. Але різниця у підходах залишається важливою для SEO та доступності.

Блокові та рядкові елементи: фундаментальна різниця

Перш ніж вивчати конкретні теги, розберемо їхню класифікацію за типом відображення.

Блокові елементи (Block Elements)

Блоковий елемент завжди починається з нового рядка і займає всю доступну ширину свого контейнера — навіть якщо вміст займає лише пару слів.

<p>Короткий абзац</p>
<p>Наступний абзац автоматично на новому рядку</p>
Loading diagram...
graph TD
    A["body (контейнер)"] --> B["&lt;h1&gt; — займає 100% ширини"]
    A --> C["&lt;p&gt; — займає 100% ширини"]
    A --> D["&lt;div&gt; — займає 100% ширини"]
    style A fill:#64748b,color:#fff
    style B fill:#3b82f6,color:#fff
    style C fill:#3b82f6,color:#fff
    style D fill:#3b82f6,color:#fff

Основні блокові елементи HTML5:

ТегПризначення
<h1><h6>Заголовки шести рівнів
<p>Абзац
<div>Блоковий контейнер (без семантики)
<header>Шапка сторінки або розділу
<nav>Блок навігації
<main>Основний вміст сторінки
<section>Тематичний розділ
<article>Самостійна стаття або контент
<aside>Бічна колонка, пов'язана інформація
<footer>Футер сторінки або розділу
<blockquote>Блокова цитата
<pre>Преформатований текст
<ul>, <ol>, <dl>Ненумерований, нумерований, визначальний списки
<figure>, <figcaption>Підпис до зображення/медіа
<details>, <summary>Інтерактивний спойлер

Рядкові елементи (Inline Elements)

Рядковий елемент розміщується в потоці тексту і займає рівно стільки місця, скільки займає його вміст. Він не «розривається» на новий рядок.

<p>Тут звичайний текст, а ось <strong>жирне слово</strong>, і далі текст продовжується на тому ж рядку.</p>

Основні рядкові елементи:

ТегПризначення
<a>Гіперпосилання
<span>Рядковий контейнер (без семантики)
<strong>Важливий текст (жирний)
<em>Наголошений текст (курсив)
<b>Виділений текст (жирний, без посилення)
<i>Альтернативний текст (курсив, без акценту)
<u>Підкреслений текст
<s>Закреслений (неактуальний) текст
<del>Видалений текст
<ins>Доданий текст
<mark>Виділений маркером текст
<small>Дрібніший текст (правова інформація)
<sub>Нижній індекс
<sup>Верхній індекс
<abbr>Абревіатура
<code>Inline-код
<kbd>Введення з клавіатури
<var>Змінна
<cite>Джерело цитати
<q>Коротка цитата
<br>Перенос рядка
<img>Зображення

CSS-відмінності між типами

З погляду CSS, різниця між типами задається властивістю display:

/* Блоковий елемент */
div {
    display: block;
}

/* Рядковий елемент */
span {
    display: inline;
}

/* Гібрид: рядковий, але приймає розміри блоку */
img {
    display: inline-block;
}
За допомогою CSS можна змінити тип відображення будь-якого елемента: display: block зробить <span> блоковим, а display: inline зробить <div> рядковим. Це потужний інструмент для створення макетів.

Теги фізичного форматування

<b> — Виділений текст (Bold)

Тег <b> відображає текст жирним шрифтом. В HTML5 отримав семантичне значення: текст, на який треба звернути увагу, але без особливої важливості та без емоційного акценту.

<p>Натисніть кнопку <b>Зберегти</b> для збереження змін.</p>

<p>Інгредієнти: <b>борошно</b>, <b>яйця</b>, <b>молоко</b>, сіль.</p>

Коли використовувати <b>:

  • Назви продуктів у рецепті
  • Ключові слова в резюме
  • Назви кнопок та елементів інтерфейсу в інструкціях

<b> vs <strong> — головна відмінність:

🔒localhost:3000

<strong> — Важливий текст (Strong Importance)

Тег <strong> позначає текст як критично важливий за змістом. Браузер відображає його жирним, але для скринрідерів (програм читання для незрячих) і пошукових систем — це «важлива інформація».

🔒localhost:3000
Скринрідери (наприклад, NVDA, JAWS) можуть виділяти текст у <strong> інтонаційно при зачитуванні — підвищувати голос або робити паузу. Тому семантика <strong> vs <b> має практичне значення для доступності.

<i> — Альтернативний текст (Italic)

Тег <i> відображає текст курсивом. В HTML5: текст, що «вибивається» із основного потоку за жанром чи голосом, але без емоційного наголосу.

🔒localhost:3000

<em> — Емфатичний наголос (Emphasis)

Тег <em> (emphasis — наголос) позначає текст із емоційним наголосом — так ніби ви виділяєте слово голосом у розмові. Також відображається курсивом, але семантично відрізняється від <i>.

🔒localhost:3000
Один з найкращих тестів для розуміння <em>: уявіть, що ви читаєте текст вголос. Де ви підвищуєте голос або робите наголос? — Ось де потрібен <em>.

<u> — Підкреслений текст (Underline)

Тег <u> підкреслює текст. В HTML5 отримав специфічне семантичне значення: текст із нетекстовою анотацією (наприклад, орфографічна помилка, позначка).

🔒localhost:3000
Будьте обережні з <u>! Підкреслений текст асоціюється у користувачів із посиланнями. Підкреслення звичайного тексту без стилізації може дезорієнтувати. Для декоративного підкреслення завжди використовуйте CSS.

<s> — Закреслений текст (Strikethrough)

Тег <s> позначає текст, який більше не є правильним або актуальним, але не є «видаленим» у сенсі редагування документа (для цього є <del>).

🔒localhost:3000

<del> та <ins> — Відслідковування змін

Ці теги призначені для показу редакторських правок у документі — як режим «Відстежування змін» в Microsoft Word.

<del> (deleted — видалений) позначає текст, що був видалений з документа. <ins> (inserted — вставлений) позначає текст, що був доданий до документа.

🔒localhost:3000

<mark> — Виділення маркером

Тег <mark> позначає текст, виділений як важливий у поточному контексті — наче підкреслений жовтим маркером.

🔒localhost:3000

<small> — Дрібніший текст

Тег <small> зменшує розмір шрифту на один рівень (зазвичай з 1em до 0.8em). В HTML5 семантика: правова інформація, примітки, авторські права, умови.

🔒localhost:3000

<sub> та <sup> — Індекси

<sub> (subscript — нижній індекс): опускає текст нижче базової лінії. <sup> (superscript — верхній індекс): піднімає текст вище базової лінії.

🔒localhost:3000

<abbr> — Абревіатури та акроніми

Тег <abbr> (abbreviation — скорочення) позначає абревіатури та акроніми. Атрибут title містить повну розшифровку.

🔒localhost:3000

При наведенні на <abbr> браузер показує підказку з title. Візуально зазвичай відображається з крапковим підкресленням.


Теги для коду та технічного тексту

<code> — Фрагмент коду

Тег <code> позначає фрагмент програмного коду — рядковий елемент для inline-коду:

🔒localhost:3000

<kbd> — Клавіатурний ввід

Тег <kbd> (keyboard — клавіатура) позначає клавіші або комбінації клавіш:

🔒localhost:3000

<var> — Змінна

Тег <var> (variable) позначає математичні або програмні змінні:

🔒localhost:3000

Цитати: <blockquote>, <q>, <cite>

<blockquote> — Блокова цитата

Тег <blockquote> (block quote) — великі цитати з зовнішніх джерел, що виносяться в окремий блок. Браузер відступає його від основного тексту.

🔒localhost:3000

Атрибут cite містить URL джерела (не відображається користувачу, але корисний для машин).

<q> — Коротка цитата

Тег <q> (quotation) — рядкова цитата, вбудована в текст. Браузер автоматично додає лапки (тип лапок залежить від атрибута lang):

🔒localhost:3000

<cite> — Посилання на джерело

Тег <cite> позначає назву твору (книги, фільму, статті, картини):

<p>Перша поема — <cite>«Кобзар»</cite> Тараса Шевченка.</p>

<p>Відповідно до <cite>специфікації HTML5 W3C</cite>, тег &lt;cite&gt; використовується для назв творів.</p>

Тег <pre> — Преформатований текст

Тег <pre> (preformatted) зберігає всі пробіли, табуляції та переноси рядків такими, якими вони є в HTML-коді. Незамінний для показу коду, ASCII-арту, поезії.

🔒localhost:3000
<pre> використовує моноширинний шрифт за замовчуванням. Для показу коду завжди вкладайте <code> всередину <pre>: <pre><code>...</code></pre>.

Тег <br> — Примусовий перенос рядка

Тег <br> (line break) — одинарний тег, що переносить текст на наступний рядок без початку нового абзацу.

🔒localhost:3000
Ніколи не використовуйте <br><br> для створення відступу між абзацами! Для цього є тег <p> або CSS margin. Два або більше <br> підряд — ознака поганого коду.

Тег <hr> — Горизонтальна лінія

Тег <hr> (horizontal rule) — блоковий, одинарний тег. Позначає тематичний розрив між блоками контенту. Відображається як горизонтальна лінія.

🔒localhost:3000

Спецсимволи HTML (HTML Entities)

Чому потрібні спецсимволи?

Деякі символи мають спеціальне значення в HTML (<, >, &, ") або відсутні на клавіатурі (©, ®, →, ×). Для їхнього відображення використовуються HTML entities (мнемоніки).

Синтаксис:

  • Іменні: &copy; → ©
  • Числові (десяткові): &#169; → ©
  • Числові (шістнадцяткові): &#xA9; → ©

Обов'язкові спецсимволи

Ці символи НЕМОЖНА вводити безпосередньо в HTML, де вони мають певну роль — тільки через entity:
СимволEntityОпис
<&lt;Менше (left than)
>&gt;Більше (greater than)
&&amp;Амперсанд
"&quot;Подвійні лапки
'&apos;Апостроф
🔒localhost:3000

Нерозривний пробіл ` `

Нерозривний пробіл (non-breaking space, &nbsp;) — особливий символ: браузер ніколи не перенесе рядок в місці цього пробілу.

<!-- Без &nbsp; браузер може розірвати "м." і "Київ" на різні рядки -->
<p>Адреса: м.&nbsp;Київ, вул.&nbsp;Хрещатик,&nbsp;1</p>

<!-- Прізвище та ініціали завжди разом -->
<p>Автор:&nbsp;Т.&nbsp;Г.&nbsp;Шевченко</p>

<!-- Посади та повні назви -->
<p>ТОВ&nbsp;«Веб-Студія»</p>

М'який перенос `­`

М'який перенос (soft hyphen, &shy;) — підказка браузеру, де можна перенести довге слово. Дефіс з'явиться лише якщо слово не поміщається:

<!-- Довге слово з м'якими переносами -->
<p>За&shy;ре&shy;єс&shy;тро&shy;ва&shy;ний</p>
<!-- → "Зареєстро-" (перенос) "ваний" — якщо не вміщується -->
<!-- → "Зареєстрований" — якщо вміщується -->

CSS — мова стилів: короткий вступ

Ми вже бачили в прикладах шматочки css-коду — наприклад color: red або text-decoration: line-through. Настав час розібратися, що це таке і як підключити CSS до HTML-сторінки. Детально про CSS ми будемо вчитися на наступних заняттях, але базові речі потрібні вже зараз.

Що таке CSS?

CSS (Cascading Style Sheets — каскадні таблиці стилів) — це окрема мова, яка відповідає виключно за візуальне оформлення HTML-сторінки. HTML описує що є на сторінці, CSS — як це виглядає.

Розподіл обов'язків:
  • HTML — структура та зміст: заголовки, абзаци, посилання, зображення
  • CSS — зовнішній вигляд: колір, шрифт, розміри, відступи, анімації
Якщо HTML — це скелет і органи тіла, то CSS — одяг і макіяж.

CSS-правило складається з селектора (кого стилізуємо) і блоку оголошень (як саме):

/* селектор { властивість: значення; } */
p {
    color: #333; /* колір тексту */
    font-size: 16px; /* розмір шрифту */
    line-height: 1.6; /* міжрядковий інтервал */
}

Три способи підключення CSS

Стилі прямо в атрибуті HTML-тегу. Найпростіший спосіб, але найгірший для підтримки — стилі розкидані по всьому HTML.

<p style="color: red; font-size: 20px;">Цей текст буде червоним і великим.</p>

<h2 style="text-align: center; text-decoration: underline;">Підкреслений заголовок по центру</h2>

Коли використовувати: для швидкого тестування або коли потрібен унікальний стиль для одного конкретного елементу (наприклад, динамічно заданий через JavaScript).

Ніколи не стилізуйте весь сайт через style="" — код стане нечитабельним і важким для редагування. Якщо треба змінити колір усіх абзаців — доведеться редагувати кожен тег окремо.

Для навчальних вправ: тег ` в <head> або коротко style="" прямо в тегах — так простіше бачити зв'язок між HTML та CSS в одному файлі.
<!DOCTYPE html>
<html lang="uk">
    <head>
        <meta charset="UTF-8" />
        <title>Вправа</title>
        <style>
            /* Ваші стилі — тут */
            strong {
                color: #dc2626;
            }
            em {
                color: #2563eb;
            }
            mark {
                background-color: #fef08a;
                border-radius: 3px;
            }
        </style>
    </head>
    <body>
        <p><strong>Важливо:</strong> це <em>дуже</em> цікаво, а особливо <mark>ця частина</mark>.</p>
    </body>
</html>

CSS-властивості для оформлення тексту

Розглянемо найважливіші CSS-властивості, пов'язані з форматуванням тексту.

`font-weight` — Товщина шрифту

🔒localhost:3000

`font-style` — Стиль шрифту

p {
    font-style: normal;
} /* Звичайний */
em {
    font-style: italic;
} /* Курсив */
.oblique {
    font-style: oblique;
} /* Нахилений (без курсивного накреслення) */

`text-decoration` — Декорація тексту

🔒localhost:3000

`text-transform` — Регістр тексту

🔒localhost:3000

`letter-spacing` та `text-align`

🔒localhost:3000

`word-spacing` — Міжслівний інтервал

.loose {
    word-spacing: 0.5em;
} /* розширені пробіли між словами */
.tight {
    word-spacing: -2px;
} /* стиснуті пробіли */

`line-height` — Міжрядковий інтервал

/* Безрозмірне значення — РЕКОМЕНДОВАНО */
body {
    line-height: 1.6;
} /* 1.6 × font-size */

/* Конкретне значення */
p {
    line-height: 24px;
}

/* Відсоткове */
h1 {
    line-height: 120%;
}

/* Рекомендовані значення: */
/* 1.4–1.6 — для основного тексту */
/* 1.1–1.3 — для заголовків */
/* 1.6–2.0 — для підвищеної читабельності (доступність) */

`text-shadow` — Тінь тексту

🔒localhost:3000

white-space — Обробка пробілів

Ця властивість визначає, як браузер обробляє пробіли та переноси рядків у HTML-коді:

/* Значення та їх поведінка: */

/* normal (за замовчуванням): стискає пробіли, переносить по ширині */
p {
    white-space: normal;
}

/* nowrap: весь текст в один рядок, ігнорує <br> ... ні, враховує */
.badge {
    white-space: nowrap;
}

/* pre: зберігає пробіли та переноси, як в <pre> */
code {
    white-space: pre;
}

/* pre-wrap: зберігає пробіли, але переносить по ширині контейнера */
textarea {
    white-space: pre-wrap;
}

/* pre-line: стискає пробіли, зберігає переноси рядків */
.verse {
    white-space: pre-line;
}

word-break та overflow-wrap — Перенос довгих слів

/* word-break — де переносити слова */
.break-all {
    word-break: break-all;
} /* переносити в будь-якому місці */
.keep-all {
    word-break: keep-all;
} /* не переносити (для CJK мов) */

/* overflow-wrap (word-wrap) — переносити, якщо не вміщується */
.container {
    overflow-wrap: break-word; /* = word-wrap: break-word */
    /* Переносить слово, тільки якщо воно не поміщається */
}

/* Сучасне рішення для URL та довгих слів: */
.email,
.url {
    word-break: break-all;
    overflow-wrap: anywhere;
}

text-align — Вирівнювання тексту

.left {
    text-align: left;
} /* Ліворуч (за замовчуванням для LTR) */
.center {
    text-align: center;
} /* По центру */
.right {
    text-align: right;
} /* Праворуч */
.justify {
    text-align: justify;
} /* По ширині (газетний стиль) */
.start {
    text-align: start;
} /* За напрямком тексту (LTR = left) */
.end {
    text-align: end;
} /* За напрямком тексту (LTR = right) */

Семантична структура сторінки: HTML5-теги

HTML5 додав набір семантичних тегів, що замінили безліч <div> з класами id="header", id="nav" тощо. Ці теги передають змістовний сенс структури.

Loading diagram...
graph TD
    HTML["&lt;html&gt;"]
    BODY["&lt;body&gt;"]
    HEADER["&lt;header&gt;\n Шапка сайту"]
    NAV["&lt;nav&gt;\n Навігація"]
    MAIN["&lt;main&gt;\n Основний вміст"]
    ARTICLE["&lt;article&gt;\n Стаття"]
    SECTION["&lt;section&gt;\n Розділ"]
    ASIDE["&lt;aside&gt;\n Сайдбар"]
    FOOTER["&lt;footer&gt;\n Футер"]

    HTML --> BODY
    BODY --> HEADER
    BODY --> NAV
    BODY --> MAIN
    MAIN --> ARTICLE
    MAIN --> SECTION
    BODY --> ASIDE
    BODY --> FOOTER

    style HTML fill:#64748b,color:#fff
    style BODY fill:#3b82f6,color:#fff
    style HEADER fill:#f59e0b,color:#fff
    style MAIN fill:#10b981,color:#fff
    style FOOTER fill:#8b5cf6,color:#fff
<!DOCTYPE html>
<html lang="uk">
    <head>
        <meta charset="UTF-8" />
        <title>Новини — Мій портал</title>
    </head>
    <body>
        <header>
            <h1>Мій новинний портал</h1>
            <nav>
                <a href="/">Головна</a>
                <a href="/ukraine">Україна</a>
                <a href="/world">Світ</a>
                <a href="/tech">Технології</a>
            </nav>
        </header>

        <main>
            <article>
                <header>
                    <h2>Заголовок головної новини</h2>
                    <p><time datetime="2024-03-15">15 березня 2024</time></p>
                </header>
                <section>
                    <h3>Передісторія</h3>
                    <p>Текст передісторії...</p>
                </section>
                <section>
                    <h3>Деталі події</h3>
                    <p>Детальний опис...</p>
                </section>
                <footer>
                    <p>Автор: <cite>Іван Петренко</cite></p>
                </footer>
            </article>

            <aside>
                <h2>Також читайте</h2>
                <ul>
                    <li><a href="#">Інша новина 1</a></li>
                    <li><a href="#">Інша новина 2</a></li>
                </ul>
            </aside>
        </main>

        <footer>
            <p><small>&copy; 2024 Мій портал. Усі права захищені.</small></p>
        </footer>
    </body>
</html>

Застарілі теги: чого уникати

З переходом на HTML5 низку тегів визнано застарілими (deprecated або obsolete). Валідатор їх відкидає.


Практичне завдання

Застосуйте знання з форматування на практиці.

Крок 1: Створення файлу

Створіть article.html з базовою структурою HTML5 (! + Tab у VS Code).

Крок 2: Структура статті

<body>
    <article>
        <header>
            <h1>Як почати вивчати програмування</h1>
            <p>Автор: <cite>Марія Коваленко</cite> | <time datetime="2024-03-15">15 березня 2024</time></p>
        </header>
    </article>
</body>

Крок 3: Вміст з форматуванням

Наповніть статтю, використовуючи:

  • <h2>, <h3> для підрозділів
  • <p> для абзаців
  • <strong> для важливих термінів
  • <em> для емоційних наголосів
  • <code> для назв технологій і команд
  • <mark> для ключових думок
  • <abbr> для розшифровки абревіатур

Крок 4: Цитата та спецсимволи

<blockquote>
    <p>«Кожен експерт колись був початківцем. Головне &mdash; почати.»</p>
</blockquote>

Крок 5: Футер статті

        <footer>
            <small>
                &copy; 2024 Навчальна платформа.
                Усі права захищені&reg;.
            </small>
        </footer>
    </article>
</body>

Крок 6: CSS-стилізація

Додайте в <head>:

<style>
    body {
        font-family: 'Georgia', serif;
        line-height: 1.7;
        color: #1e293b;
        max-width: 720px;
        margin: 2rem auto;
        padding: 0 1rem;
    }

    article > header h1 {
        font-size: 2rem;
        letter-spacing: -0.02em;
    }
    blockquote {
        border-left: 4px solid #3b82f6;
        padding: 1em 1.5em;
        margin: 2em 0;
        font-style: italic;
        background: #f0f9ff;
    }
    code {
        background: #f1f5f9;
        padding: 2px 6px;
        border-radius: 4px;
        font-size: 0.9em;
    }
    mark {
        background: #fef08a;
        padding: 1px 3px;
        border-radius: 2px;
    }
</style>

Підсумок: Обирайте теги за змістом

Ключовий принцип HTML5: теги повинні відображати зміст, а не зовнішній вигляд.

🔤 Фізичне vs. Семантичне

Замість <b> думайте: «Ця інформація важлива? → <strong>. Це лише ключове слово? → <b>». Замість <i> думайте: «Це термін чи цитата? → <i>. Це емоційний наголос? → <em>».

♿ Доступність

Семантичні теги (<strong>, <em>, <abbr>, <mark>) допомагають скринрідерам коректно озвучувати контент для людей з порушеннями зору.

📈 SEO

Пошукові системи враховують семантику тегів. Правильно позначений <strong> сигналізує Google про важливість слова.

🎨 CSS — для вигляду

Візуальне форматування — через CSS. HTML-теги лише позначають структуру та зміст. Ніколи не використовуйте <h3> лише тому, що він «підходить за розміром».

Перевірка знань

Примітка: Якщо тест не відображається, перейдіть за прямим посиланням.

Корисні посилання