Qual é a diferença entre <p> e <div>?

187

Qual é a diferença entre <p> e <div>?

Eles podem ser usados ​​de forma intercambiável? Quais são as aplicações?

eu--''''''---------''''''''''''
fonte
31
Em qualquer HTML / XHTML válido, transitório ou estrito, você não pode aninhar um <p> dentro de outro <p>, para que <div> e <p> não sejam intercambiáveis.
Byran Zaugg
3
Byran - você abordou a questão essencial com essas respostas "semânticas". O problema é que o HTML restringe artificialmente <p> s para que eles se comportem de maneira diferente. Se eles fossem apenas elementos de bloco mais significado semântico, tudo bem. Mas por que impedi-lo de, por exemplo, incorporar uma ilustração em um parágrafo?
dkretz
2
@ 117700 você considerou alterar a resposta aceita?
Karl Richter
Tenha em mente <div></div>requer marcas abertas e encerramento, <p>não em circunstâncias específicas
Mark Schultheiss

Respostas:

-26

O código anterior foi

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

Então eu tenho que mudar para

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

Foi a solução fácil. E o CSS para o código acima é

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

Portanto, a tag div pode conter outros elementos. P não deve ser forçado a fazer isso.

Kazi T Ahsan
fonte
3
Eu realmente não sei o que você quer dizer. “No site”: qual site? “... fazê-lo funcionar”: o que significa 'trabalho'? Qual é a renderização pretendida?
Marcel Korpel
4
Isso me parece completamente ilógico: os pelementos podem conter outros elementos em linha (a especificação do HTML 5 fala sobre elementos de fraseado (ver 7.3) ), um dos quais spané um deles, entre muitos outros. Além disso, essa não é uma resposta à pergunta do OP: não diz nada sobre a diferença entre pe div. E leia Como funcionam as respostas aos comentários?
Marcel Korpel
@MarcelKorpel Por que essa é a resposta aceita então? Sem disputar, apenas me perguntando por que há inconsistência.
precisa
3
@Anshul Aparentemente, algo funcionou para o OP, mas não responde à pergunta. Veja também a pontuação desta resposta: -16 no momento. Caso você não saiba: o OP é o único que pode aceitar uma resposta, enquanto todos na comunidade podem votar em uma resposta para cima ou para baixo.
Marcel Korpel
Tarde para a parte do ódio, mas: as <p>tags frequentemente contêm outros elementos, como <strong>ou <em>etc. O conteúdo de uma <p>tag deve ser o que o nome implica: um parágrafo de texto. Os parágrafos do texto geralmente contêm marcações adicionais. Não há nada nem remotamente incomum ou errado nisso.
Dave Newton
296

Eles têm diferença semântica - um <div>elemento é projetado para descrever um contêiner de dados, enquanto um <p>elemento é projetado para descrever um parágrafo de conteúdo.

A semântica faz toda a diferença. HTML é uma linguagem de marcação, o que significa que foi projetado para "marcar" o conteúdo de maneira significativa para o consumidor da marcação. A maioria dos desenvolvedores acredita que a semântica do documento são os estilos e a renderização padrão que os navegadores aplicam a esses elementos, mas esse não é o caso.

Os elementos que você escolhe para marcar seu conteúdo devem descrevê -lo. Não marque seu documento com base em sua aparência - marque-o com base no que é.

Se você precisar de um contêiner genérico puramente para fins de layoutentão use a <div>. Se você precisar de um elemento para descrever um parágrafo do conteúdo, use a <p>.

Nota: É importante entender que tanto <div>e <p>são elementos de bloco de nível que significa que a maioria dos navegadores irá tratá-los de forma semelhante.

Andrew Hare
fonte
Minha experiência foi que, se você deseja planejar um pedaço de conteúdo de maneira diferente de outro, esses dois são semanticamente distintos e, portanto, devem ser marcados independentemente de qualquer maneira . Se o OTOH, eles não são semanticamente distintos, provavelmente devem ser dispostos juntos. Em ambos os casos, não há necessidade de adicionar um elemento para fins de layout, porque no primeiro caso já deveria estar lá para começar e, no segundo caso, não há layout em andamento. Mas, novamente, eu sou um purista e meus sites sempre olhar como flashbacks a 1995.
Jörg W Mittag
5
Quando você diz para usar <p>como "parágrafo do conteúdo", o conteúdo precisa estar na forma de letras e palavras? Você usaria <p>para descrever outro tipo de conteúdo, como imagens?
DRS
1
@drs: o conteúdo permitido para <p> é "Phrasing content", que consiste em elementos de phrasing misturados com dados normais de caracteres. Aliás, as imagens pertencem a elementos fraseados para que você possa usá-los dentro de <p>. Referências: w3.org/TR/html-markup/p.html e w3.org/TR/html-markup/common-models.html#common.elem.phrasing . HTH
Paolo
2
Você esqueceu de mencionar que não pode aninhar p enquanto pode com div. Quanto ao tipo de atitude "não inclua informações de layout no html": não é possível escrever um arquivo html sem se preocupar com a aparência. Sua escolha da ordem e do aninhamento de div sempre terá influência - a menos que você escreva algum javascript que rasgue sua página e a reestruture. Portanto, ver div como "um contêiner genérico apenas para fins de layout " é a redação correta.
Masterxilo 28/05
E se eu preferir usar em divvez de p?
MELAB
66

Todas as boas respostas, mas há uma diferença que ainda não vi mencionada, e é assim que os navegadores as processam por padrão. Os principais navegadores renderizarão uma <p>tag com margem acima e abaixo do parágrafo. Uma <div>tag será renderizada sem nenhuma margem.

ceejayoz
fonte
10
Se você deseja controlar a renderização, deve estar usando CSS. Não confie nos padrões atuais dos navegadores.
Caracol mecânico
15
A pergunta perguntou que diferenças existem entre os tags DIV e P. Isso é significativo para quem não usa uma redefinição de CSS, principalmente porque pode não ser óbvio para alguém que usa apenas um navegador.
ceejayoz
3
Obrigado pelo esclarecimento. Eu estava procurando por essa diferença exata, já que o uso da tag P estava fazendo com que o texto aparecesse com margem na parte superior (provavelmente na parte inferior), então estava me perguntando de onde vinha esse espaço. Precisava se livrar do espaço.
Whatsinaname
@ceejayoz margin? como podemos ver isso?
JAVA
57

<p> indica um parágrafo e tem significado semântico.

<div> é simplesmente um contêiner de bloco para outro conteúdo.

Tudo o que pode entrar em um <p>pode entrar em um, <div>mas o inverso não é verdadeiro. <div>as tags podem ter elementos em nível de bloco como filhos. <p>elementos não podem.

Dê uma olhada no 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 -->
cleto
fonte
3
Então você não pode ter um <h1> em um <p>?
Koray Tugay
8

A única diferença entre os dois elementos é semântica. Ambos os elementos, por padrão, exibem a regra CSS: block (portanto, no nível do bloco) aplicado a eles; nada mais (exceto margem um pouco extra em alguns casos). No entanto, como mencionado acima, os dois diferem bastante em termos de semântica.

O <p>elemento, como o próprio nome indica, é para parágrafos. Portanto,<p> deve ser usado quando você deseja criar blocos de texto de parágrafo.

O <div>elemento, no entanto, tem pouco ou nenhum significado semanticamente e, portanto, pode ser usado como um elemento genérico em nível de bloco - geralmente, as pessoas o usam em layouts porque ele não faz sentido semanticamente e pode ser usado para geralmente qualquer coisa que você possa precisar. elemento de nível para.

Link para mais detalhes

Ashish Agarwal
fonte
3
Não há necessidade dessa última frase. Quase todas as perguntas neste site provavelmente poderiam ser pesquisadas, mas esse não é o ponto. O objetivo é criar um recurso para desenvolvedores com as mesmas perguntas no futuro.
nickf
sim, mas ele poderia ter iniciado uma discussão com algumas informações relevantes, de qualquer maneira irá editá-lo
Ashish Agarwal
1
Como p e div são elementos de bloco, por que quando um elemento h1 é aninhado dentro de uma div, ele herdará os estilos, mas quando aninhado em ap, não será? Obrigado
Return-1
@ Return-1 Eu não sei o que exatamente acontece no seu caso, mas um h1 é um cabeçalho, que não é um fraseado de conteúdo e, portanto, não é permitido em um parágrafo. Considere o texto impresso - ele contém cabeçalhos e parágrafos, mas os cabeçalhos não fazem parte dos parágrafos.
Oskar Berggren
7

DIV é um contêiner genérico em nível de bloco que pode conter outros elementos de bloco ou em linha, incluindo outros elementos DIV, enquanto P é agrupar parágrafos (texto).

bdl
fonte
7

Talvez seja melhor ver o padrão projetado pelo W3.org. Aqui está o endereço: http://www.w3.org/

Uma tag "DIV" pode quebrar a tag "P", enquanto que uma tag "P" não pode quebrar a tag "DIV" - até agora eu conheço essa diferença. Pode haver mais outras diferenças.

Nazmul
fonte
5

Pense DIVcomo um elemento de agrupamento. Você coloca elementos em um elemento DIV para poder definir seus alinhamentos

Considerando que "p"é simplesmente criar um novo parágrafo.

Suraj Chandran
fonte
3

<p> representa um parágrafo e <div> representa uma 'divisão', suponho que a principal diferença é que divs são semanticamente 'sem sentido', onde como um <p> deve representar algo relacionado ao próprio texto.

Você não gostaria de aninhar <p> s por exemplo, pois isso não faria muito sentido semântico (exceto no sentido de citações). Enquanto as pessoas usam <div> s aninhados para o layout da página.

De acordo com a Wikipedia

No HTML, os elementos span e div são usados ​​onde partes de um documento não podem ser semanticamente descritas por outros elementos HTML.

Chad Okere
fonte
2

Uma ptag é para um parágrafo, geralmente usada para texto. Uma divtag é para divisão e geralmente usada para criar seções de texto.

Daniel A. White
fonte
2

<p> é usado semanticamente para texto, parágrafos geralmente.

<div>é usado para um bloco ou área em uma página da web. Por exemplo, poderia ser usado para criar a área de um cabeçalho.

Eles provavelmente poderiam ser usados ​​de forma intercambiável, mas você não deveria.

vectran
fonte