Яка різниця між <p> і <div>?


188

Яка різниця між <p> і <div>?

Чи можна їх взаємозамінно використовувати? Які програми?


32
У будь-якому дійсному HTML / XHTML, перехідному або суворому, ви не можете вкладати <p> всередину іншого <p>, тому <div> і <p> не є взаємозамінними.
Byran Zaugg

3
Байран - ти вирішив найважливіше питання цими "семантичними" відповідями. Проблема полягає в тому, що HTML штучно обмежує <p> s, тому вони поводяться по-різному. Якби вони були просто блоковими елементами плюс семантичне значення, це було б нормально. Але навіщо заважати вам, наприклад, вставляти ілюстрацію в абзац?
dkretz

2
@ 117700 Ви думали про зміну прийнятої відповіді?
Карл Ріхтер

Майте на увазі, що <div></div>потрібні відкриті та закривальні теги, <p>але не в конкретних обставинах
Марк

Відповіді:


-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 може містити й інші елементи. П не варто змушувати це робити.


3
Я справді не знаю, що ти маєш на увазі. "На сайті": який сайт? "... щоб змусити його працювати": що означає "робота"? Яка цільова візуалізація?
Марсель Корпель

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

@MarcelKorpel Чому це тоді прийнята відповідь? Не сперечаючись, просто цікаво, чому виникає неузгодженість.
Аншул

3
@Anshul Мабуть, щось працювало для ОП, але це не відповідає на питання. Подивіться також на оцінку цієї відповіді: -16 на даний момент. Якщо ви не знаєте: ОП є єдиним, хто може прийняти відповідь, тоді як усі в громаді можуть проголосувати відповідь вгору чи вниз.
Марсель Корпель

Пізніше до партії ненависті, але: <p>теги дуже часто містять інші елементи, як <strong>і <em>т.д. вміст <p>тега має бути те , що має на увазі його назва: абзац тексту. Абзаци тексту часто містять додаткову розмітку. У цьому немає нічого навіть віддаленого незвичного чи неправильного.
Дейв Ньютон

297

Вони мають смислову різницю - <div>елемент призначений для опису контейнера даних, тоді як <p>елемент призначений для опису абзацу змісту.

Семантика має все значення. HTML - це мова розмітки, що означає, що вона створена для "розмітки" вмісту таким чином, що має значення для споживача розмітки. Більшість розробників вважають, що семантика документа - це стилі за замовчуванням і візуалізація, яку браузери застосовують до цих елементів, але це не так.

Елементи, які ви вибрали для позначення вмісту, повинні описувати вміст. Не розмічайте документ на основі того, як він повинен виглядати, - позначайте його на основі того, що він є.

Якщо вам потрібен універсальний контейнер суто для цілей компонуваннятоді використовуйте a <div>. Якщо вам потрібен елемент для опису змісту, використовуйте a <p>.

Примітка: Важливо розуміти, що обидва є елементами на рівні блоку,<div> а <p>це означає, що більшість браузерів буде ставитися до них аналогічно.


Мій досвід полягав у тому, що якщо ви хочете розташувати частину вмісту інакше, ніж якусь іншу частину контенту, ці два є семантично відмінними, і тому їх у будь-якому випадку потрібно позначати незалежно . Якщо OTOH, вони не є семантично відмінними, то, ймовірно, вони повинні бути складені разом. В будь-якому випадку не потрібно додавати елемент для цілей компонування, тому що в першому випадку він повинен був існувати для початку, а в другому випадку розміщення не відбувається. Але знову ж таки, я пурист, і мої сайти завжди схожі на флешбеки до 1995 року.
Jörg W Mittag

5
Якщо ви кажете використовувати <p>для "абзацу змісту", чи має бути вміст у формі букв і слів? Чи хотіли б ви коли-небудь використовувати <p>для опису якогось іншого типу вмісту, наприклад зображення?
др

1
@drs: Дозволений вміст для <p> - це "Фразовий вміст", який складається з елементів фразування, змішаних з нормальними символьними даними. Btw, зображення належать до елементів фразування, тому ви можете використовувати їх всередині <p>. Посилання: w3.org/TR/html-markup/p.html та w3.org/TR/html-markup/common-models.html#common.elem.phrasing . HTH
Паоло

2
Ви забули згадати, що не можете гніздити п, поки можете з діви. Що стосується типу "не включати інформацію про макет у html": не можна написати файл html, не турбуючись про те, як він повинен виглядати. На ваш вибір порядку та вкладення дива завжди впливатиме - якщо ви не напишете якийсь 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
У цьому останньому реченні немає потреби. Майже всі питання на цьому веб-сайті, ймовірно, можуть бути гугл, але це не в цьому. Сенс у тому, щоб створити ресурс для розробників з такими ж питаннями в майбутньому.
nickf

так, але він міг би розпочати дискусію з якоюсь відповідною інформацією, будь-яким способом її відредагувати
Ashish Agarwal

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> являє собою "поділ", я вважаю, що головна відмінність полягає в тому, що діви семантично "безглузді", де, як <p>, слід представляти щось, що стосується самого тексту.

Не хотілося б, наприклад, вкладати <p> s, оскільки це не мало б особливого смислового сенсу (крім сенсу цитат). В той час як люди використовують вкладені <div> s для макета сторінки.

За даними Вікіпедії

У HTML елементи span та div використовуються там, де частини документа не можуть бути семантично описані іншими елементами HTML.


2

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


2

<p> семантично використовується для тексту, абзаців зазвичай.

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

Вони, ймовірно, можуть використовуватися взаємозамінно, але ви не повинні.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.