Quelle est la différence entre <p> et <div>?

188

Quelle est la différence entre <p> et <div>?

Peuvent-ils être utilisés de manière interchangeable? Quelles sont les applications?

l --''''''--------- '' '' '' '' '' '
la source
32
Dans tout HTML / XHTML valide, transitoire ou strict, vous ne pouvez pas imbriquer un <p> dans un autre <p> donc <div> et <p> ne sont pas échangés.
Byran Zaugg
3
Byran - vous avez frappé le problème essentiel avec ces réponses «sémantiques». Le problème est que HTML contraint artificiellement les <p> pour qu'ils se comportent différemment. S'ils n'étaient que des éléments de bloc et une signification sémantique, ce serait bien. Mais pourquoi vous empêcher, par exemple, d'incorporer une illustration dans un paragraphe?
dkretz
2
@ 117700 avez-vous envisagé de changer la réponse acceptée?
Karl Richter
Gardez à l'esprit <div></div>que les balises doivent être ouvertes et fermées, <p>pas dans des circonstances spécifiques
Mark Schultheiss

Réponses:

-26

Le code précédent était

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

Alors je dois le changer en

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

C'était la solution facile. Et le CSS pour le code ci-dessus est

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

La balise div peut donc contenir d'autres éléments. P ne devrait pas être obligé de faire cela.

Kazi T Ahsan
la source
3
Je ne sais vraiment pas ce que tu veux dire. «Dans le site»: quel site? «… Pour que ça marche»: que signifie «travailler»? Quel est le rendu prévu?
Marcel Korpel
4
Cela me semble complètement illogique: les péléments peuvent contenir d'autres éléments en ligne (la spécification HTML 5 parle d' éléments de phrasé (voir 7.3) ), dont l' spanun d'entre eux, parmi beaucoup d'autres. De plus, ce n'est pas une réponse à la question du PO: cela ne dit rien sur la différence entre pet div. Et s'il vous plaît lire Comment fonctionnent les réponses aux commentaires?
Marcel Korpel
@MarcelKorpel Pourquoi est-ce alors la réponse acceptée? Je ne conteste pas, je me demande simplement pourquoi il y a incohérence.
Anshul
3
@Anshul Apparemment, quelque chose a fonctionné pour l'OP, mais cela ne répond pas à la question. Regardez aussi le score de cette réponse: -16 pour le moment. Au cas où vous ne le sauriez pas: le PO est le seul à pouvoir accepter une réponse, tandis que tout le monde dans la communauté peut voter pour une réponse à la hausse ou à la baisse.
Marcel Korpel
En retard à la fête de la haine, mais: les <p>balises contiennent très souvent d'autres éléments, comme <strong>ou <em>etc. Le contenu d'une <p>balise doit être ce que son nom implique: un paragraphe de texte. Les paragraphes de texte contiennent souvent des balises supplémentaires. Il n'y a même rien d'inhabituel ou de mal à cela.
Dave Newton
298

Ils ont une différence sémantique - un <div>élément est conçu pour décrire un conteneur de données tandis qu'un <p>élément est conçu pour décrire un paragraphe de contenu.

La sémantique fait toute la différence. HTML est un langage de balisage, ce qui signifie qu'il est conçu pour «baliser» le contenu de manière significative pour le consommateur du balisage. La plupart des développeurs pensent que la sémantique du document correspond aux styles et au rendu par défaut que les navigateurs appliquent à ces éléments, mais ce n'est pas le cas.

Les éléments que vous choisissez pour baliser votre contenu doivent décrire le contenu. Ne marquez pas votre document en fonction de son apparence - marquez-le en fonction de ce qu'il est.

Si vous avez besoin d'un conteneur générique uniquement à des fins de mise en pagepuis utilisez un <div>. Si vous avez besoin d'un élément pour décrire un paragraphe de contenu, utilisez un <p>.

Remarque: Il est important de comprendre que les deux <div>et <p>sont des éléments de niveau bloc, ce qui signifie que la plupart des navigateurs les traiteront de la même manière.

Andrew Hare
la source
Mon expérience a été que si vous voulez mettre en page un élément de contenu différemment d'un autre élément de contenu, ces deux éléments sont sémantiquement distincts et devraient donc être balisés indépendamment de toute façon . Si OTOH, ils ne sont pas sémantiquement distincts, ils devraient probablement être disposés ensemble. Dans les deux cas, il n'est pas nécessaire d'ajouter un élément à des fins de mise en page, car dans le premier cas, il aurait déjà dû être là pour commencer et dans le second cas, aucune mise en page n'est en cours. Mais là encore, je suis un puriste et mes sites ressemblent toujours à des flashbacks de 1995.
Jörg W Mittag
5
Lorsque vous dites utiliser <p>pour "paragraphe de contenu", le contenu doit-il être sous forme de lettres et de mots? Souhaitez-vous jamais utiliser <p>pour décrire un autre type de contenu, comme des images?
drs
1
@drs: Le contenu autorisé pour <p> est "Contenu de phrasé", qui consiste en des éléments de phrasé mélangés avec des données de caractères normales. Btw, les images appartiennent à des éléments de phrasé afin que vous puissiez les utiliser à l'intérieur <p>. Références: w3.org/TR/html-markup/p.html et w3.org/TR/html-markup/common-models.html#common.elem.phrasing . HTH
Paolo
2
Vous avez oublié de mentionner que vous ne pouvez pas imbriquer les p alors que vous le pouvez avec les div. Quant à l'attitude du type «ne pas inclure d'informations de mise en page dans le html»: il n'est pas possible d'écrire un fichier html sans se soucier de son apparence. Votre choix de l'ordre et de l'imbrication des div aura toujours une influence - à moins que vous n'écriviez du javascript qui déchire votre page et la restructure. Ainsi, considérer div comme "un conteneur générique uniquement à des fins de mise en page " est le libellé correct.
masterxilo
Et si je préfère utiliser divau lieu de p?
Melab
66

Toutes les bonnes réponses, mais il y a une différence que je n'ai pas encore vue mentionnée, et c'est ainsi que les navigateurs les rendent par défaut. Les principaux navigateurs Web afficheront une <p>balise avec une marge au-dessus et en dessous du paragraphe. Une <div>balise sera rendue sans aucune marge.

ceejayoz
la source
10
Si vous souhaitez contrôler le rendu, vous devez utiliser CSS. Ne vous fiez pas aux valeurs par défaut actuelles des navigateurs.
Escargot mécanique
15
La question demandait quelles différences il y avait entre les balises DIV et P. Ceci est important pour quiconque n'utilise pas de réinitialisation CSS, d'autant plus que cela peut être non évident pour quelqu'un qui n'utilise qu'un seul navigateur.
ceejayoz
3
Merci pour la clarification. Je cherchais cette différence exacte car l'utilisation de la balise P faisait apparaître du texte avec une marge en haut (et probablement en bas), alors je me demandais d'où venait cet espace. Nécessaire pour se débarrasser de l'espace.
WhatsInAName
Marge @ceejayoz? comment pouvons-nous voir cela?
JAVA
58

<p> indique un paragraphe et a une signification sémantique.

<div> est simplement un conteneur de blocs pour d'autres contenus.

Tout ce qui peut aller dans un <p>peut aller dans un <div>mais l'inverse n'est pas vrai. <div>Les balises peuvent avoir des éléments de niveau bloc comme enfants.<p>les éléments ne peuvent pas.

Jetez un œil à 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
la source
3
Vous ne pouvez donc pas avoir un <h1> dans un <p>?
Koray Tugay
8

La seule différence entre les deux éléments est la sémantique. Les deux éléments, par défaut, ont la règle CSS display: block (donc au niveau du bloc) qui leur est appliquée; rien de plus (sauf une marge quelque peu supplémentaire dans certains cas). Cependant, comme mentionné ci-dessus, ils sont tous deux très différents en termes de sémantique.

L' <p>élément, comme son nom l'indique un peu, est destiné aux paragraphes. Ainsi, <p>doit être utilisé lorsque vous souhaitez créer des blocs de texte de paragraphe.

L' <div>élément, cependant, a peu ou pas de sens sémantiquement et peut donc être utilisé comme un élément générique au niveau du bloc - le plus souvent, les gens l'utilisent dans les mises en page car il n'a pas de sens sémantiquement et peut être utilisé pour généralement tout ce dont vous pourriez avoir besoin d'un bloc. élément de niveau pour.

Lien pour plus de détails

Ashish Agarwal
la source
3
Il n'y a pas besoin de cette dernière phrase. Presque toutes les questions sur ce site pourraient probablement être recherchées sur Google, mais ce n'est pas le but. Le but est de créer une ressource pour les développeurs avec les mêmes questions à l'avenir.
nickf
oui, mais il aurait pu démarrer une discussion avec des informations pertinentes, de toute façon la modifiera
Ashish Agarwal
1
Puisque p et div sont des éléments de bloc, pourquoi est-ce que lorsqu'un élément h1 est imbriqué dans un div, il héritera des styles, mais lorsqu'il est imbriqué dans ap, il ne le fera pas? Merci
Retour-1
@ Return-1 Je ne sais pas ce qui se passe exactement dans votre cas, mais un h1 est un en-tête, qui ne formule pas de contenu et donc n'est pas autorisé à l'intérieur d'un paragraphe. Considérez le texte imprimé - il contient des en-têtes et des paragraphes, mais les en-têtes ne font pas partie des paragraphes.
Oskar Berggren
7

DIV est un conteneur de niveau bloc générique qui peut contenir n'importe quel autre bloc ou éléments en ligne, y compris d'autres éléments DIV, tandis que P consiste à encapsuler des paragraphes (texte).

bdl
la source
7

Il vaudrait peut-être mieux voir le standard conçu par W3.org. Voici l'adresse: http://www.w3.org/

Une balise "DIV" peut envelopper la balise "P" alors qu'une balise "P" ne peut pas envelopper la balise "DIV" - pour l'instant je connais cette différence. Il peut y avoir d'autres différences.

Nazmul
la source
5

Pensez DIVà un élément de regroupement. Vous placez des éléments dans un élément DIV afin de pouvoir définir leurs alignements

Alors que "p"c'est simplement créer un nouveau paragraphe.

Suraj Chandran
la source
3

<p> représente un paragraphe et <div> représente une "division", je suppose que la principale différence est que les divs sont sémantiquement "sans signification", alors qu'un <p> est censé représenter quelque chose concernant le texte lui-même.

Vous ne voudriez pas avoir imbriqué des <p> par exemple, car cela n'aurait pas beaucoup de sens sémantique (sauf dans le sens des citations) alors que les gens utilisent des <div> imbriqués pour la mise en page.

Selon Wikipedia

En HTML, les éléments span et div sont utilisés là où des parties d'un document ne peuvent pas être décrites sémantiquement par d'autres éléments HTML.

Chad Okere
la source
2

Une pbalise est pour un paragraphe, généralement utilisé pour le texte. Une divbalise sert à la division et est généralement utilisée pour créer des sections de texte.

Daniel A. White
la source
2

<p> est utilisé sémantiquement pour le texte, les paragraphes généralement.

<div>est utilisé pour un bloc ou une zone dans une page Web. Par exemple, il pourrait être utilisé pour créer la zone d'un en-tête.

Ils pourraient probablement être utilisés de manière interchangeable, mais vous ne devriez pas.

vectran
la source