Что такое абзац в HTML

Если между двумя словами в HTML-коде поставить хоть пять пустых строк подряд, браузер покажет их слитно, без единого отступа - пустая строка в коде для него ничего не значит. Чтобы текст на странице реально делился на смысловые куски - абзацы, - нужен конкретный тег, а не пробелы. Разберём, как он работает и какие у него есть особенности.

Попробуй добавить третий <p> или, наоборот, убрать один из тегов и оставить просто текст без него - результат справа сразу покажет разницу.

Что делает тег <p> и чем абзац отличается от пустой строки в коде

Тег <p> - не просто про отступ. Он помечает кусок текста как отдельный смысловой блок: браузер сам добавляет отступы сверху и снизу - это часть стиля браузера по умолчанию, а не заслуга пробелов в коде. А главное - по этим границам поисковик и программы для чтения с экрана понимают, где заканчивается одна мысль и начинается следующая.

<p>Первый абзац.</p><p>Второй абзац - уже с отступом сверху.</p> - два тега <p> - два самостоятельных смысловых блока.

<p>Первый абзац. Второй абзац - просто пустые строки в коде.</p> - пустые строки внутри одного <p> ничего не меняют: для браузера это по-прежнему один абзац.

Что можно класть внутрь <p>, а что нельзя

Внутрь <p> можно класть только строчный контент: обычный текст и строчные теги вроде <strong>, <em>, <a>, <br>. А вложить в <p> другой <p> или любой блочный тег - <div>, <ul>, заголовок и подобные - по правилам HTML нельзя: увидев такой тег, браузер сам, без предупреждений, закроет открытый <p> раньше, чем закрыли его в коде, и итоговая структура страницы разойдётся с тем, что написано в разметке.

<p>Этот абзац содержит <strong>важный текст</strong> и <a href="#">ссылку</a> - всё это строчный контент.</p>
<p>Этот абзац пытается вложить блочный элемент:
  <div>Блок внутри абзаца</div>
</p>

Браузер закроет <p> сам перед <div> - итоговая вложенность будет не такой, как в коде.

Что будет, если не закрыть </p>

У закрывающего тега </p> есть особый статус: по спецификации HTML5 его можно не писать, если сразу после <p> идёт один из блочных тегов (например <div>, заголовок, <ul>, <table> или ещё один <p>) - тогда браузер закроет предыдущий <p> сам. Но если после незакрытого <p> идёт просто текст или строчный тег, автоматического закрытия не произойдёт - и весь дальнейший текст останется частью того же самого абзаца, а не начнёт новый.

<p>Первый абзац.</p><p>Второй абзац.</p> - оба абзаца закрыты явно, граница между ними видна прямо в коде.

<p>Первый абзац без закрывающего тега. Второй абзац на самом деле остаётся частью первого</p> - границы нет, потому что после первого абзаца не появилось ни одного из тегов, при которых <p> закрывается сам.

Из истории Правило (</p> можно не закрывать) - не современная поблажка браузеров к неаккуратному коду, а наследство SGML, разметочного языка-предка HTML: SGML разрешал пропускать закрывающий тег там, где парсер мог сам однозначно вычислить конец элемента по структуре документа. Эту возможность одной из первых убрали в XML, потребовав закрывать вообще всё. А в современной спецификации HTML5 список тегов, перед которыми <p> закрывается сам, прописан официально - это часть стандарта, а не просто терпимость браузера к ошибкам.

Частые ошибки новичков

ОшибкаЧто происходитКак исправить
Несколько <br> подряд вместо нового <p>, чтобы «сделать отступ» Семантически всё остаётся одним абзацем с визуальными переносами - программы чтения с экрана не увидят разделения на смысловые блоки Использовать новый <p> для нового смыслового блока, а <br> - только для переноса строки внутри одного абзаца
Настраивать отступ между абзацами пустыми строками или пробелами в коде Браузер их полностью игнорирует - HTML схлопывает лишние пробелы и переносы по умолчанию Настраивать отступы через CSS-свойство margin
Вкладывать блочный тег (<div>, <ul>, заголовок) внутрь <p> Браузер закрывает <p> раньше, чем в коде - итоговая структура страницы не совпадает с разметкой Класть в <p> только текст и строчные теги, а блочные элементы располагать рядом, а не внутри
Не закрывать </p>, рассчитывая, что браузер разберётся сам Автозакрытие работает только перед определённым списком тегов - перед обычным текстом или строчным тегом граница между абзацами не появится Всегда закрывать </p> явно, не полагаясь на список исключений

Шпаргалка

ТерминЗначение
<p>Тег абзаца - отдельный смысловой блок текста
Разрешённый контент внутри <p>Только текст и строчные теги (<strong>, <em>, <a>, <br> и подобные)
Отступы между абзацамиЧасть стиля браузера по умолчанию; настраиваются через CSS margin, а не пробелами в коде
Автозакрытие <p>Происходит только перед определённым списком блочных тегов (<div>, заголовки, <ul>, <table>, ещё один <p> и другие)
Надёжная привычкаВсегда закрывать </p> явно, не полагаясь на автозакрытие

Коротко: отвечаем на вопросы

Нужно ли всегда закрывать тег </p>?

По спецификации HTML5 закрывающий тег можно опустить, если сразу после <p> идёт один из блочных тегов или разметка на этом заканчивается - браузер закроет <p> сам. Но полагаться на это рискованно: если рядом случайно окажется обычный текст или строчный тег, автозакрытия не будет. Поэтому на практике </p> принято закрывать всегда, даже когда по спецификации это не обязательно.

Можно ли вложить один <p> в другой или, например, <div> внутрь <p>?

Нет - по правилам HTML тег <p> может содержать только текст и строчные теги. Как только внутри открытого <p> встречается другой <p> или блочный тег вроде <div>, браузер автоматически закрывает первый <p>, и итоговая вложенность на странице получается не такой, как в коде.

Чем тег <p> отличается от <br> и когда вместо нового абзаца нужен перенос строки?

<p> создаёт отдельный смысловой блок с отступами - новую мысль или тему. <br> просто переносит строку внутри одного и того же абзаца, не создавая нового смыслового блока - он уместен там, где по смыслу это всё ещё одна мысль, просто визуально в несколько строк: например, в адресе или в строках стихотворения.

Категория
Поделиться в социальных сетях

Отправить комментарий

0 Комментарии

Отправить комментарий (0)

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×