Різниця між тегами strong та b в HTML
<strong> та <b> обидва роблять текст жирним за замовчуванням, але тільки <strong> повідомляє браузеру, і всьому що його слухає, що цей текст справді важливий.
Теорія
TL;DR
<b>= виділення маркером на папері: змінює вигляд, нічого не говорить про значення<strong>= зірочка на листі: змінює вигляд І позначає як важливе- Скрінрідери наголошують на вмісті
<strong>;<b>читається рівно, як звичайний текст - Обидва теги отримують
font-weight: boldз вбудованих стилів браузера, тому візуально виглядають однаково - Правило: смисловий наголос →
<strong>. Тільки стиль → CSSfont-weight: bold
Швидкий приклад
<p>Звичайний текст, потім <b>жирний без значення</b>.</p>
<!-- Скрінрідер читає "жирний без значення" рівно, без наголосу -->
<p>Звичайний текст, потім <strong>важливий жирний</strong>.</p>
<!-- Скрінрідер наголошує на "важливий жирний" -->Відкрий це в браузері з NVDA або VoiceOver і різниця чутна одразу. Візуально? Однаково.
Головна різниця
<b> - презентаційний тег. Він додає жирний шрифт у render tree і на цьому зупиняється. <strong> іде далі: браузери додають його до дерева доступності (accessibility tree) з роллю важливості, яку зчитують AT API на кшталт MSAA та IAccessible2. Саме тому скрінрідери озвучують вміст <strong> з наголосом або префіксом типу "важливо", а <b> не отримує нічого додаткового.
Коли що використовувати
- Назва продукту або мітка в UI, де жирний - суто дизайнерське рішення → CSS
font-weight: bold, або<b>в крайньому разі - Попередження, дедлайн або повідомлення про помилку, яке не можна пропустити →
<strong> - Легасі-код де жирний потрібен тільки для вигляду → додай CSS-клас, уникай обох тегів
- Пріоритет доступності або SEO → завжди
<strong>, ніколи<b>
Таблиця порівняння
| Аспект | <b> | <strong> |
|---|---|---|
| Стиль за замовчуванням | Жирний | Жирний |
| Семантика | Немає (презентаційний) | Важливість |
| Скрінрідери | Читають рівно | Озвучують з наголосом |
| Вплив на SEO | Нейтральний | Сигнал релевантності |
| Дерево доступності | Не враховується | Роль важливості |
| Коли використовувати | Рідко; тільки візуальні мітки | Попередження, ключові факти |
Як браузер це обробляє
Обидва теги отримують font-weight: bold з вбудованого CSS браузера, тому без кастомних стилів виглядають однаково. Розбіжність виникає в дереві доступності: <strong> отримує роль важливості, яку зчитують через OS-рівневий accessibility API; <b> залишається тільки в render tree. Один CSS-рядок (strong { font-weight: normal; }) прибирає візуальний жирний з <strong>, але семантична роль залишається. Скрінрідери все одно наголошують на ньому.
Типові помилки
Використання <b> для попереджень або критичних повідомлень:
<!-- Неправильно: скрінрідер читає це рівно -->
<p>Увага: <b>зона високої напруги</b>. Не заходити.</p>
<!-- Правильно: скрінрідер наголошує на попередженні -->
<p>Увага: <strong>зона високої напруги</strong>. Не заходити.</p>Припущення, що <strong> завжди означає жирний стиль:
/* Це прибирає візуальний жирний, але НЕ семантику */
strong { font-weight: normal; }Якщо кастомна тема скидає стиль <strong>, скрінрідери все одно позначають його як важливе. Стиль прив'язуй до CSS-класу, а не до тегу.
Безпечне вкладення <b> всередину <strong>:
<strong>Критично: <b>перевір це</b> перед деплоєм.</strong>Зовнішній <strong> застосовує роль важливості до всього вмісту всередині, включно з частиною <b>. Сам <b> тільки додає візуальний хук. Це валідний HTML, але один <strong> зі стилем через CSS читається значно чіткіше.
Де зустрічається
- MDN Web Docs використовує
<strong>для попереджень і повідомлень про застарілі API по всій документації - Документація React обгортає назви обов'язкових пропсів у
<strong>, щоб позначити важливість - WordPress Gutenberg за замовчуванням вставляє
<strong>, коли натискаєш кнопку жирного в редакторі - Bootstrap у розділі типографіки рекомендує
<strong>замість<b>
Питання на співбесіді
Q: Чи може CSS зробити <strong> і <b> повністю ідентичними?
A: Візуально - так. Але семантично - ні. Дерево доступності все одно позначає <strong> як важливе, і скрінрідери реагують на це незалежно від того, як тег виглядає на екрані.
Q: Google справді по-різному ставиться до <strong> і <b> для SEO?
A: Google підтвердив, що <strong> несе вагу як сигнал релевантності ключових слів. <b> вважається нейтральним стилем. Різниця відчутна для контенту з ключовими словами, за якими ти хочеш ранжуватися.
Q: <b> досі валідний в HTML5?
A: Так. HTML5 зберіг <b> і перевизначив його як тег для тексту, який "стилістично відрізняється" без вираження важливості. Тег валідний, але WCAG 4.1.2 рекомендує семантичні альтернативи там, де є смисловий контекст.
Q: Як поводиться <strong> всередині контейнера з aria-hidden?
A: Семантична роль пригнічується і допоміжні технології повністю пропускають вміст. Якщо <strong> знаходиться всередині елемента з aria-hidden="true", скрінрідери не озвучать його незалежно від тегу.
Приклади
Базовий: візуальний проти семантичного жирного
<!DOCTYPE html>
<html lang="uk">
<body>
<p>Зберігай роботу частіше. <b>Автозбереження</b> вимкнено за замовчуванням.</p>
<!-- "Автозбереження" виглядає жирним, скрінрідер читає рівно -->
<p>Зберігай роботу частіше. <strong>Автозбереження вимкнено</strong> за замовчуванням.</p>
<!-- Скрінрідер наголошує на "Автозбереження вимкнено" -->
</body>
</html><b> тут просто виділяє слово візуально. <strong> повідомляє користувачу, і кожному інструменту що читає сторінку, що на це треба звернути увагу.
Середній рівень: React-компонент з семантичним наголосом
// OrderSummary.jsx
function OrderSummary({ productName, deadline }) {
return (
<article>
<h2>Деталі замовлення</h2>
<p>
Ви обрали <b>{productName}</b>.
{/* Візуальна мітка - семантична вага не потрібна */}
</p>
<p>
Оплатіть до <strong>{deadline}</strong>, щоб уникнути скасування.
{/* Дедлайн важливий - скрінрідер наголошує на ньому */}
</p>
</article>
);
}<b> для назви продукту - дизайнерське рішення. <strong> на дедлайні - це сигнал: якщо користувач навігує скрінрідером, він не повинен пропустити цю дату.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.