Современные браузеры настолько умны и снисходительны, что могут переварить любую кашу из тегов. Но есть ошибки вложенности элементов, которые выглядят приемлемо в коде и «взрывают» вёрстку в браузере.

В стандарте ХТМЛ для каждого элемента указано разрешённое содержание, какие теги или тип содержимого могут вкладываться в него. Соответственно, содержимое не по стандарту может приводить к ошибкам. Приведу две самые популярные ошибки, которые вижу каждый день.

Нетекст в тексте

По стандарту в заголовках и абзацах может находиться только phrasing content — строчное или, как его неудачно переводят официально, «текстовое» содержимое. Туда входят текст с разметкой и другие элементы, формирующие абзацы: изображения, видео, контролы и встраиваемые элементы. Поэтому не стоит вкладывать заголовки в заголовки, а абзацы, списки и блочные элементы — в абзацы. Если их всё‑таки вложить, «запрещённое» содержимое выпадет из родительского тега и создаст новые:

Код
<h1>
  <h2>Глава 1</h2>
  Основы
</h1>

<p>
  Вкладывать в абзацы
  <ul>
    <li>другие абзацы</li>
    <li>списки</li>
  </ul>
  нельзя.
</p>

<p>
  Конфигурация татами в типовых комнатах.
  <div>Хайно Энгель. <a>Параметры и конструкция японского дома</a></div>
</p>

<p>
  <h4>Заголовок в подбор.</h4> Сильный пример к нему
</p>
Ожидание
Реальность
Встречая запрещённое содержимое, браузеры закрывают родительский тег и выкидывают «запрещёнку». Это приводит к потере контекста. Так «Основы» и «нельзя» в примере выше выпали из заголовка и абзаца

Интерактивные элементы в интерактивных

Если вложить кнопку в ссылку, клик произойдёт дважды. Если вложить ссылку в ссылку, она «вывалится» отдельным элементом:

<style>
  .cols {
    display: flex;
    gap: 10px;
  }

  .caption {
    font-size: small;
    font-family: sans-serif;
  }
</style>

<div class="cols">
  <a href="https://bureau.ru/lectures/systemeditor-clients/">
    <img src="https://bureau.ru/lectures/systemeditor-clients/files/_cover.jpg" width="128" height="72">
    <span class="caption">
      <a href="https://bureau.ru/lectures/systemeditor-clients/">
        Системный редактор
      </a>
    </span>
  </a>

  <a href="https://bureau.ru/lectures/efficientdesign-resolve/">
    <img src="https://bureau.ru/lectures/collecture-all/files/_cover.png" width="128" height="72">
    <span class="caption">
      <a href="https://bureau.ru/lectures/efficientdesign-resolve/">
        Работоспособный дизайн
      </a>
    </span>
  </a>
</div>
Ожидание
Реальность
Вложенные ссылки «выпали» из подписей, образовав две лишние колонки и потеряв стиль

P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.

Веб‑разработка
Отправить
Поделиться
Запинить

Рекомендуем другие советы