¿Cuál es la diferencia entre <p> y <div>?

188

¿Cuál es la diferencia entre <p> y <div>?

¿Se pueden usar indistintamente? ¿Cuáles son las aplicaciones?

l --''''''--------- '' '' '' '' '' ''
fuente
32
En cualquier HTML / XHTML válido, de transición o estricto, no puede anidar un <p> dentro de otro <p>, por lo que <div> y <p> no son intercambiables.
Byran Zaugg
3
Byran: has tocado el tema esencial con estas respuestas "semánticas". El problema es que HTML restringe artificialmente <p> s para que se comporten de manera diferente. Si solo fueran elementos de bloque más significado semántico, estaría bien. Pero, ¿por qué evitar, por ejemplo, incrustar una ilustración en un párrafo?
dkretz
2
@ 117700 ¿ha considerado cambiar la respuesta aceptada?
Karl Richter
Tenga en cuenta que <div></div>requiere etiquetas abiertas y de cierre, <p>no en circunstancias específicas
Mark Schultheiss

Respuestas:

-26

El código anterior era

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

Entonces tengo que cambiarlo a

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

Fue la solución fácil. Y el CSS para el código anterior es

.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;
}

Entonces, la etiqueta div puede contener otros elementos. P no debería ser forzado a hacer eso.

Kazi T Ahsan
fuente
3
Realmente no sé a qué te refieres. "En el sitio": ¿qué sitio? "... para que funcione": ¿qué significa 'trabajo'? ¿Cuál es la representación prevista?
Marcel Korpel
44
Esto me parece completamente ilógico: los pelementos pueden contener otros elementos en línea (la especificación HTML 5 habla de elementos de fraseo (ver 7.3) ), de los cuales spanes uno de ellos, entre muchos otros. Además, esta no es una respuesta a la pregunta del OP: no dice nada sobre la diferencia entre py div. Y por favor lea ¿Cómo funcionan las respuestas de comentarios?
Marcel Korpel
@MarcelKorpel ¿Por qué es esta la respuesta aceptada entonces? No discutiendo, solo preguntándome por qué hay inconsistencia.
Anshul
3
@Anshul Aparentemente, algo funcionó para el OP, pero no responde la pregunta. También mire el puntaje de esta respuesta: -16 en este momento. En caso de que no lo sepa: el OP es el único que puede aceptar una respuesta, mientras que todos en la comunidad pueden votar una respuesta hacia arriba o hacia abajo.
Marcel Korpel
Tarde a la fiesta de odio, pero: las <p>etiquetas a menudo contienen otros elementos, como <strong>o <em>etc. El contenido de una <p>etiqueta debe ser lo que su nombre implica: un párrafo de texto. Los párrafos de texto a menudo contienen marcas adicionales. No hay nada remotamente inusual o incorrecto con eso.
Dave Newton el
298

Tienen una diferencia semántica : un <div>elemento está diseñado para describir un contenedor de datos, mientras que un <p>elemento está diseñado para describir un párrafo de contenido.

La semántica hace toda la diferencia. HTML es un lenguaje de marcado que significa que está diseñado para "marcar" el contenido de una manera que sea significativa para el consumidor del marcado. La mayoría de los desarrolladores creen que la semántica del documento son los estilos predeterminados y la representación que los navegadores aplican a estos elementos, pero ese no es el caso.

Los elementos que elija para marcar su contenido deben describir el contenido. No marque su documento en función de cómo debería verse, márquelo en función de lo que es.

Si necesitas un contenedor genérico puramente para propósitos de diseñoluego use a <div>. Si necesita un elemento para describir un párrafo de contenido, utilice a <p>.

Nota: Es importante entender que tanto <div>y <p>son elementos de bloque de nivel lo que significa que la mayoría de los navegadores tratarlos de una forma similar.

Andrew Hare
fuente
Mi experiencia ha sido que si desea diseñar una pieza de contenido de manera diferente a otra pieza de contenido, esos dos son semánticamente distintos y, por lo tanto, deben marcarse de forma independiente de todos modos . Si OTOH, no son semánticamente distintos, entonces probablemente deberían distribuirse juntos. En cualquier caso, no es necesario agregar un elemento para propósitos de diseño, porque en el primer caso ya debería haber estado allí para comenzar y en el segundo caso no hay ningún diseño en curso. Pero, de nuevo, soy purista y mis sitios siempre parecen recuerdos de 1995.
Jörg W Mittag
55
Cuando dice usar <p>para "párrafo de contenido", ¿el contenido tiene que ser en forma de letras y palabras? ¿Alguna vez usarías <p>para describir algún otro tipo de contenido, como imágenes?
drs
1
@drs: El contenido permitido para <p> es "Contenido de fraseo", que consiste en elementos de frase entremezclados con datos de caracteres normales. Por cierto, las imágenes pertenecen a elementos de fraseo para que pueda usarlas dentro de <p>. Referencias: w3.org/TR/html-markup/p.html y w3.org/TR/html-markup/common-models.html#common.elem.phrasing . HTH
Paolo
2
Olvidó mencionar que no puede anidar p mientras que puede con div. En cuanto al tipo de actitudes "no incluir información de diseño en el html": no es posible escribir un archivo html sin preocuparse de cómo debería verse. La elección del orden y el anidamiento de los div siempre influirá, a menos que escriba un JavaScript que desgarre su página y la reestructura. Por lo tanto, ver div como "un contenedor genérico puramente para propósitos de diseño " es la redacción correcta.
masterxilo
¿Qué pasa si prefiero usar en divlugar de p?
Melab
66

Todas son buenas respuestas, pero hay una diferencia que no he visto mencionada todavía, y así es como los navegadores las muestran por defecto. Los principales navegadores web mostrarán una <p>etiqueta con margen arriba y debajo del párrafo. Se <div>generará una etiqueta sin margen alguno.

ceejayoz
fuente
10
Si desea controlar el renderizado, debe usar CSS. No confíe en los valores predeterminados actuales de los navegadores.
Caracol mecánico
15
La pregunta preguntó qué diferencias hay entre las etiquetas DIV y P. Esto es significativo para cualquiera que no use un restablecimiento CSS, especialmente porque puede no ser obvio para alguien que usa solo un navegador.
ceejayoz
3
Gracias por la aclaración. Estaba buscando esta diferencia exacta ya que el uso de la etiqueta P hacía que el texto apareciera con un margen en la parte superior (y probablemente en la parte inferior probablemente), por lo que me preguntaba de dónde viene ese espacio. Necesario para deshacerse del espacio.
WhatsInAName
@ceejayoz margen? ¿Cómo podemos ver eso?
JAVA
58

<p> indica un párrafo y tiene un significado semántico.

<div> es simplemente un contenedor de bloques para otro contenido.

Todo lo que puede ir en un <p>puede ir en un <div>pero lo contrario no es cierto. <div>Las etiquetas pueden tener elementos de nivel de bloque como elementos secundarios. <p>los elementos no pueden

Echa un vistazo a la DTD HTML .

<!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 -->
cletus
fuente
3
Entonces, ¿no puede tener un <h1> en un <p>?
Koray Tugay
8

La única diferencia entre los dos elementos es la semántica. Ambos elementos, por defecto, tienen la visualización de la regla CSS: bloque (por lo tanto, nivel de bloque) aplicado a ellos; nada más (excepto un margen algo extra en algunos casos). Sin embargo, como se mencionó anteriormente, ambos difieren mucho en términos de semántica.

El <p>elemento, como su nombre lo indica, es para párrafos. Por lo tanto, <p>debe usarse cuando desee crear bloques de texto de párrafo.

El <div>elemento, sin embargo, tiene poco o ningún significado semántico y por lo tanto puede ser utilizado como un elemento genérico a nivel de bloque - con mayor frecuencia, las personas lo utilizan dentro de los diseños, ya que no tiene sentido semántico y se puede utilizar para cualquier cosa que por lo general requieren un bloque- elemento de nivel para.

Enlace para más detalles

Ashish Agarwal
fuente
3
No hay necesidad de esa última oración. Casi todas las preguntas en este sitio probablemente podrían buscarse en Google, pero ese no es el punto. El punto es hacer un recurso para desarrolladores con las mismas preguntas en el futuro.
nickf
sí, pero podría haber comenzado una discusión con información relevante, de cualquier manera la editará
Ashish Agarwal
1
Dado que p y div son elementos de bloque, ¿por qué cuando un elemento h1 está anidado dentro de un div, heredará los estilos, pero cuando está anidado en ap no lo hará? Gracias
Regreso-1
@ Return-1 No sé qué sucede exactamente en su caso, pero un h1 es un encabezado, que no está redactando contenido y, por lo tanto, no está permitido dentro de un párrafo. Considere el texto impreso: contiene encabezados y párrafos, pero los encabezados no son parte de los párrafos.
Oskar Berggren
7

DIV es un contenedor de nivel de bloque genérico que puede contener cualquier otro bloque o elementos en línea, incluidos otros elementos DIV, mientras que P es para ajustar párrafos (texto).

bdl
fuente
7

Sería mejor ver el estándar diseñado por W3.org. Aquí está la dirección: http://www.w3.org/

Una etiqueta "DIV" puede envolver la etiqueta "P" mientras que una etiqueta "P" no puede envolver la etiqueta "DIV", hasta ahora sé esta diferencia. Puede haber más otras diferencias.

Nazmul
fuente
5

Piense DIVcomo un elemento de agrupación. Pones elementos en un elemento DIV para que puedas establecer sus alineaciones

Mientras que "p"es simplemente crear un nuevo párrafo.

Suraj Chandran
fuente
3

<p> representa un párrafo y <div> representa una 'división', supongo que la diferencia principal es que los divs son semánticamente 'sin sentido', donde se supone que un <p> representa algo relacionado con el texto mismo.

No querrías tener <p> s anidados, por ejemplo, ya que eso no tendría mucho sentido semántico (excepto en el sentido de las citas) Mientras que las personas usan <div> s anidados para el diseño de página.

De acuerdo con Wikipedia

En HTML, los elementos span y div se usan cuando partes de un documento no pueden ser descritas semánticamente por otros elementos HTML.

Chad Okere
fuente
2

Una petiqueta es para un párrafo, generalmente usado para texto. Una divetiqueta es para división, y generalmente se usa para crear secciones de texto.

Daniel A. White
fuente
2

<p> se usa semánticamente para texto, párrafos usualmente.

<div>se usa para un bloque o área en una página web. Por ejemplo, podría usarse para hacer el área de un encabezado.

Se podría probablemente ser utilizados indistintamente, pero que no debería.

vectran
fuente