В чем разница между <p> и <div>?


188

В чем разница между <p> и <div>?

Могут ли они быть взаимозаменяемыми? Какие приложения?


32
В любом допустимом HTML / XHTML, переходном или строгом, вы не можете вкладывать <p> в другой <p>, поэтому <div> и <p> не являются взаимозаменяемыми.
— Беран Заугг

3
Byran - вы затронули существенную проблему с этими "семантическими" ответами. Проблема в том, что HTML искусственно ограничивает <p> s, поэтому они ведут себя по-разному. Если бы они были просто блочными элементами плюс семантическое значение, это было бы хорошо. Но почему вы мешаете, например, встроить иллюстрацию в абзац?
— dkretz

2
@ 117700 Вы рассматривали вопрос об изменении принятого ответа?
— Карл Рихтер

Имейте в виду, <div></div>требует открытых и закрывающих тегов, <p>не в определенных обстоятельствах
— Марк Schultheiss

Ответы:


-26

Предыдущий код был

<p class='item'><span class='name'>*Scrambled eggs on crusty Italian ciabatta and bruschetta tomato</span><span class='price'>$12.50</span></p>

Поэтому я должен изменить его на

<div class='item'><span class='name'>*Scrambled eggs on crusty Italian ciabatta and bruschetta tomato</span><span class='price'>$12.50</span></div>

Это было легко исправить. И CSS для приведенного выше кода

.item {
    position: relative;
    border: 1px solid green;
    height: 30px;
}

.item .name {
    position: absolute;
    top: 0px;
    left: 0px;
}

.item .price {
    position: absolute;
    right: 0px;
    bottom: 0px;
}

Таким образом, тег div может содержать другие элементы. P не следует заставлять это делать.


3
Я действительно не знаю, что вы имеете в виду. «На сайте»: какой сайт? «… Заставить его работать»: что значит «работать»? Что такое рендеринг?
— Марсель Корпель

4
Это звучит совершенно нелогично для меня: pэлементы могут содержать другие встроенные элементы (спецификация HTML 5 говорит о фразовых элементах (см. 7.3) ), spanодним из которых является, среди многих других. Более того, это не ответ на вопрос ОП: он ничего не говорит о разнице между pи div. И, пожалуйста, прочитайте Как работают ответы на комментарии?
— Марсель Корпель

@MarcelKorpel Почему это принятый ответ? Не спорю, просто задаюсь вопросом, почему существует несоответствие.
— Anshul

3
@Anshul Очевидно что-то работало для OP, но это не отвечает на вопрос. Также посмотрите на оценку этого ответа: -16 на данный момент. В случае, если вы не знаете: ОП - единственный, кто может принять ответ, в то время как все в сообществе могут проголосовать за него вверх или вниз.
— Марсель Корпель

Поздно к ненавистной стороне, но: <p>теги очень часто содержат другие элементы, такие как <strong>и <em>т. Д. Содержимое <p>тега должно соответствовать тому, что подразумевается под его именем: абзацу текста. Параграфы текста часто содержат дополнительную разметку. В этом нет ничего необычного или неправильного.
— Дэйв Ньютон,

298

Они имеют семантическое различие - <div>элемент предназначен для описания контейнера данных, тогда как <p>элемент предназначен для описания абзаца контента.

Семантика имеет все значение. HTML - это язык разметки, который означает, что он предназначен для «разметки» контента таким образом, чтобы это имело смысл для потребителя разметки. Большинство разработчиков считают, что семантика документа - это стили по умолчанию и рендеринг, которые браузеры применяют к этим элементам, но это не так.

Элементы, которые вы выбираете для разметки вашего контента, должны описывать контент. Не размечайте ваш документ, основываясь на том, как он должен выглядеть - пометьте его, основываясь на том, что он есть.

Если вам нужен универсальный контейнер исключительно для макетазатем используйте <div>. Если вам нужен элемент для описания абзаца содержания, используйте <p>.

Примечание: Важно понимать , что как <div>и <p>в блоке уровня элементов , которые означают , что большинство браузеров относиться к ним подобным образом.


По моему опыту, если вы хотите расположить какой-то фрагмент контента иначе, чем какой-либо другой фрагмент контента, эти два семантически отличаются друг от друга и, таким образом, в любом случае должны быть помечены независимо . Если OTOH, они не являются семантически отличными, тогда они, вероятно, должны быть изложены вместе. В любом случае нет необходимости добавлять элемент для целей макета, потому что в первом случае он уже должен был быть с самого начала, а во втором случае макет не выполняется. Но опять же, я пурист, и мои сайты всегда напоминают воспоминания о 1995 году.
— Йорг Миттаг

5
Когда вы говорите использовать <p>для «параграфа контента», должен ли контент быть в форме букв и слов? Вы когда-нибудь использовали бы <p>для описания какой-то другой тип контента, например, изображения?
— DRS

1
@drs: Разрешенный контент для <p> - «Фразирующий контент», который состоит из фразовых элементов, смешанных с обычными символьными данными. Кстати, изображения принадлежат элементам фраз, поэтому вы можете использовать их внутри <p>. Ссылки: w3.org/TR/html-markup/p.html и w3.org/TR/html-markup/common-models.html#common.elem.phrasing . HTH
— Паоло

2
Вы забыли упомянуть, что вы не можете вкладывать p, пока вы можете использовать div. Что касается отношения «не включать информацию о макете в html»: невозможно написать html-файл, не заботясь о том, как он должен выглядеть. Ваш выбор порядка и вложенности div всегда будет иметь влияние - если вы не напишите какой-нибудь javascript, который разрывает вашу страницу и реструктурирует ее. Таким образом, видение div как «универсального контейнера исключительно для целей компоновки » является правильной формулировкой.
— masterxilo

Что если я предпочел бы использовать divвместо p?
— Мелаб

66

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


10
Если вы хотите контролировать рендеринг, вы должны использовать CSS. Не полагайтесь на текущие настройки браузера по умолчанию.
— Механическая улитка

15
Был задан вопрос, какие различия существуют между тегами DIV и P. Это важно для тех, кто не использует сброс CSS, тем более что это может быть неочевидно для тех, кто использует только один браузер.
— ceejayoz

3
Спасибо за разъяснения. Я искал это точное различие, поскольку использование тега P приводило к появлению текста с полями вверху (и, вероятно, снизу), поэтому мне было интересно, откуда берется это пространство. Нужно избавиться от места.
— WhatsInAName

@ceejayoz маржа? как мы можем это увидеть?
— JAVA

58

<p> указывает на абзац и имеет семантическое значение.

<div> это просто блок-контейнер для другого контента.

Все, что может пойти в, <p>может пойти в, <div>но обратное неверно. <div>теги могут иметь элементы уровня блока как дочерние. <p>элементы не могут.

Посмотрите на HTML DTD .

<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">
<!ENTITY % block
     "P | %heading; | %list; | %preformatted; | DL | DIV | NOSCRIPT |
      BLOCKQUOTE | FORM | HR | TABLE | FIELDSET | ADDRESS">

<!ENTITY % flow "%block; | %inline;">

<!ELEMENT DIV - - (%flow;)*            -- generic language/style container -->
<!ELEMENT P - O (%inline;)*            -- paragraph -->

3
Таким образом, вы не можете иметь <h1> в <p>?
— Корай Тугай

8

Единственная разница между этими двумя элементами - это семантика. Оба элемента по умолчанию имеют отображение правила CSS: к ним применяется блок (отсюда уровень блока); ничего более (за исключением некоторого дополнительного запаса в некоторых случаях). Однако, как уже упоминалось, они оба сильно различаются с точки зрения семантики.

<p>Элемент, так как его имя несколько подразумевает, для пунктов. Таким образом, <p>следует использовать, когда вы хотите создать блоки текста абзаца.

<div>Элемент, однако, имеет мало смысла , семантически и , следовательно , может быть использован в качестве универсального элемента блочного уровня - чаще всего, люди используют его в макетах , потому что это не имеет смысла , семантически и может быть использовано для вообще все , что вы , может понадобиться блок- элемент уровня для.

Ссылка для более подробной информации


3
Там нет необходимости в этом последнем предложении. Почти все вопросы на этом сайте, вероятно, можно было бы найти, но это не главное. Дело в том, чтобы сделать ресурс для разработчиков с такими же вопросами в будущем.
— 2010 г.

да, но он мог бы начать обсуждение с некоторой соответствующей информацией, любой способ ее отредактирует
— Ашиш Агарвал

1
Так как и p, и div являются блочными элементами, почему, когда элемент h1 вложен в div, он наследует стили, но при вложении в ap это не будет? Спасибо
— Возвращение-1

@ Return-1 Я не знаю, что именно происходит в вашем случае, но h1 - это заголовок, который не формулирует контент и поэтому не допускается внутри абзаца. Рассмотрим печатный текст - он содержит заголовки и абзацы, но заголовки не являются частью абзацев.
— Оскар Берггрен

7

DIV - это универсальный контейнер уровня блока, который может содержать любые другие блочные или встроенные элементы, включая другие элементы DIV, тогда как P предназначен для переноса абзацев (текста).


7

Может быть, лучше увидеть стандарт, разработанный W3.org. Вот адрес: http://www.w3.org/

Тег «DIV» может обернуть тег «P», тогда как тег «P» не может обернуть тег «DIV» - пока я знаю эту разницу. Там может быть больше других отличий.


5

Думайте DIVкак элемент группировки. Вы помещаете элементы в элемент DIV, чтобы вы могли установить их выравнивание

В то время "p"как просто создать новый абзац.


3

<p> представляет абзац, а <div> представляет «разделение», я полагаю, что основное отличие состоит в том, что div не имеют смысла «семантически», где <p> должен представлять что-то, относящееся к самому тексту.

Например, вы не хотели бы иметь вложенные <p>, поскольку это не имело бы большого смыслового смысла (за исключением цитат), тогда как люди используют вложенные <div> для макета страницы.

Согласно Википедии

В HTML элементы span и div используются, когда части документа не могут быть семантически описаны другими элементами HTML.


2

pТег для абзаца, как правило , используется для текста. divТег для разделения, и обычно используется для создания разделов текста.


2

<p> семантически используется для текста, абзацы обычно.

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

Вероятно, они могли бы использоваться взаимозаменяемо, но вы не должны.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.