В чем разница между <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>Тег будет оказываться без краев вообще.

ceejayoz
источник
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 предназначен для переноса абзацев (текста).

BDL
источник
7

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

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

Nazmul
источник
5

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

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

Сурадж Чандран
источник
3

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

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

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

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

Чад Окере
источник
2

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

Даниэль А. Уайт
источник
2

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

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

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

Vectran
источник