Jaka jest różnica między <p> a <div>?


188

Jaka jest różnica między <p> a <div>?

Czy można ich używać zamiennie? Jakie są aplikacje?


32
W żadnym poprawnym HTML / XHTML, przejściowym lub ścisłym, nie można zagnieździć <p> wewnątrz innego <p>, więc <div> i <p> ​​nie są zamiennymi.
Byran Zaugg,

3
Byran - natrafiłeś na istotny problem z tymi „semantycznymi” odpowiedziami. Problem polega na tym, że HTML sztucznie ogranicza <p> s, więc zachowują się inaczej. Gdyby były tylko elementami blokowymi i znaczeniem semantycznym, byłoby dobrze. Ale dlaczego miałbyś uniemożliwiać np. Umieszczanie ilustracji w akapicie?
dkretz

2
@ 117700 czy zastanawiałeś się nad zmianą zaakceptowanej odpowiedzi?
Karl Richter

Pamiętaj, że <div></div>wymaga otwarcia i zamknięcia tagów, <p>nie w szczególnych okolicznościach
Mark Schultheiss

Odpowiedzi:


-26

Poprzedni kod był

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

Więc muszę to zmienić na

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

To była łatwa naprawa. A CSS dla powyższego kodu to

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

Tag div może zawierać inne elementy. P nie powinien być do tego zmuszany.


3
Naprawdę nie wiem o co ci chodzi. „Na stronie”: która strona? „… Aby działało”: co oznacza „praca”? Jaki jest zamierzony rendering?
Marcel Korpel

4
Brzmi to dla mnie zupełnie nielogicznie: pelementy mogą zawierać inne elementy wbudowane (specyfikacja HTML 5 mówi o elementach frazujących (patrz 7.3) ), z których spanjest jednym z wielu innych. Co więcej, nie jest to odpowiedź na pytanie PO: nie mówi nic o różnicy między pa div. I proszę przeczytać Jak działają odpowiedzi na komentarze?
Marcel Korpel

@MarcelKorpel Dlaczego to jest akceptowana odpowiedź? Nie kwestionuje, tylko zastanawia się, dlaczego występuje niespójność.
Anshul

3
@Anshul Najwyraźniej coś działało dla OP, ale nie odpowiada na pytanie. Zobacz także wynik tej odpowiedzi: -16 w tej chwili. Jeśli nie wiesz: OP jest jedynym, który może zaakceptować odpowiedź, podczas gdy wszyscy członkowie społeczności mogą głosować na odpowiedź w górę lub w dół.
Marcel Korpel,

Późno do partii nienawiści, ale: <p>tagi bardzo często zawierają inne elementy, takie jak <strong>lub <em>itp treści <p>tag powinien być co sugeruje jej nazwa: akapit tekstu. Akapity tekstu często zawierają dodatkowe znaczniki. Nie ma w tym nic niezwykłego ani złego.
Dave Newton

297

Mają różnicę semantyczną - <div>element służy do opisywania kontenera danych, podczas gdy <p>element służy do opisywania akapitu treści.

Semantyka robi różnicę. HTML to język znaczników, co oznacza, że ​​został zaprojektowany do „oznaczania” treści w sposób znaczący dla konsumenta znaczników. Większość programistów uważa, że ​​semantyka dokumentu to domyślne style i rendering, które przeglądarki stosują do tych elementów, ale tak nie jest.

Elementy, które wybierzesz do oznaczenia treści, powinny ją opisać . Nie oznaczaj dokumentu na podstawie tego, jak powinien wyglądać - zaznacz go na podstawie tego, co to jest.

Jeśli potrzebujesz ogólny pojemnik wyłącznie do celów układunastępnie użyj <div>. Jeśli potrzebujesz elementu do opisania akapitu treści, użyj <p>.

Uwaga: Ważne jest, aby zrozumieć, że zarówno <div>i <p>elementy blokowe co oznacza, że większość przeglądarek będzie traktować je w podobny sposób.


Moje doświadczenie jest takie, że jeśli chcesz, aby układ jakiś fragment zawartości inaczej niż jakiegoś innego kawałka treści, te dwa są semantycznie różne i dlatego powinien być oznaczony indepedently anyway . Jeśli OTOH, nie semantycznie odrębne, to prawdopodobnie powinny być ułożone razem. W obu przypadkach nie ma potrzeby dodawania elementu do celów układu, ponieważ w pierwszym przypadku powinien on już istnieć, a w drugim przypadku układ nie jest kontynuowany. Ale z drugiej strony jestem purystą, a moje strony zawsze wyglądają jak retrospekcje do 1995 roku.
Jörg W Mittag

5
Kiedy mówisz, że używasz określenia <p>„akapit treści”, czy treść musi mieć postać liter i słów? Czy <p>opisałbyś kiedyś inne rodzaje treści, takie jak obrazy?
drs.

1
@drs: Dozwoloną treścią dla <p> jest „Frazowanie treści”, która składa się z elementów frazowania zmieszanych z normalnymi danymi znakowymi. Przy okazji, obrazy należą do elementów frazujących, więc możesz ich używać wewnątrz <p>. Odnośniki: w3.org/TR/html-markup/p.html i w3.org/TR/html-markup/common-models.html#common.elem.phrasing . HTH
Paolo

2
Zapomniałeś wspomnieć, że nie możesz zagnieżdżać p, póki możesz z div. Co do postaw typu „nie dołączaj informacji o układzie do html”: nie można napisać pliku HTML bez zawracania sobie głowy jego wyglądem. Twój wybór kolejności i zagnieżdżenia div zawsze będzie miał wpływ - chyba że napiszesz jakiś javascript, który rozdziera twoją stronę na strzępy i restrukturyzuje ją. Zatem postrzeganie div jako „ogólnego kontenera wyłącznie do celów układu ” jest poprawnym sformułowaniem.
masterxilo

Co jeśli wolałbym użyć divzamiast p?
Melab

66

Wszystkie dobre odpowiedzi, ale jest jedna różnica, o której jeszcze nie wspomniałem, i tak domyślnie renderują je przeglądarki. Główne przeglądarki internetowe wyświetlają <p>znacznik z marginesem powyżej i poniżej akapitu. <div>Tag będą świadczone bez marginesu w ogóle.


10
Jeśli chcesz kontrolować renderowanie, powinieneś używać CSS. Nie polegaj na bieżących ustawieniach domyślnych przeglądarek.
Mechaniczny ślimak

15
Pytanie dotyczyło różnic między znacznikami DIV i P. Jest to znaczące dla każdego, kto nie korzysta z resetowania CSS, szczególnie, że może być to nieoczywiste dla kogoś, kto używa tylko jednej przeglądarki.
ceejayoz

3
Dziękuję za wyjaśnienie. Szukałem tej dokładnej różnicy, ponieważ użycie znacznika P powodowało, że tekst pojawiał się z marginesem u góry (i prawdopodobnie u dołu), więc zastanawiałem się, skąd pochodzi ta przestrzeń. Potrzebowałem pozbyć się przestrzeni.
WhatsInAName

Margines @ceejayoz? jak możemy to zobaczyć?
JAVA

58

<p> wskazuje akapit i ma znaczenie semantyczne.

<div> jest po prostu blokowym kontenerem na inne treści.

Wszystko, co może pójść za jednym razem, <p>może pójść za <div>drugim, ale nie jest to prawdą. <div>tagi mogą mieć elementy blokowe jako dzieci. <p>elementy nie mogą.

Rzuć okiem na 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 -->

3
Więc nie możesz mieć <h1> w <p>?
Koray Tugay,

8

Jedyną różnicą między tymi dwoma elementami jest semantyka. Oba elementy domyślnie mają wyświetlaną regułę CSS: blok (stąd poziom bloków) zastosowany do nich; nic więcej (z wyjątkiem dodatkowego marginesu w niektórych przypadkach). Jednak, jak wspomniano powyżej, oba różnią się znacznie pod względem semantyki.

The <p>Elementem, jak sama nazwa nieco wskazuje, jest dla ust. A zatem,<p> powinien być używany, gdy chcesz tworzyć bloki tekstu akapitowego.

The <div>Elementem ma jednak niewiele wspólnego ma sensu semantycznie i dlatego może być stosowany jako ogólny elementu block-level - najczęściej ludzie używają go w układach, ponieważ nie ma sensu semantycznie i mogą być wykorzystane do ogólnie cokolwiek można wymagać blokowych element poziomu dla.

Link po więcej szczegółów


3
Ostatnie zdanie nie jest potrzebne. Prawie wszystkie pytania na tej stronie można prawdopodobnie znaleźć w Google, ale nie o to chodzi. Chodzi o to, aby w przyszłości stworzyć zasób dla programistów z tymi samymi pytaniami.
nickf

tak, ale mógł rozpocząć dyskusję z pewnymi istotnymi informacjami, w jakikolwiek sposób je edytuje
Ashish Agarwal

1
Ponieważ zarówno p, jak i div są elementami blokowymi, dlaczego jest tak, że gdy element h1 jest zagnieżdżony w div, odziedziczy style, ale po zagnieżdżeniu w ap nie będzie? Dziękuję
Return-1

@ Return-1 Nie wiem, co dokładnie dzieje się w twoim przypadku, ale h1 to nagłówek, który nie jest frazowaniem treści i dlatego nie jest dozwolony w akapicie. Rozważ wydrukowany tekst - zawiera nagłówki i akapity, ale nagłówki nie są częścią akapitów.
Oskar Berggren

7

DIV to ogólny kontener na poziomie bloku, który może zawierać dowolny inny blok lub element wbudowany, w tym inne elementy DIV, natomiast P ma zawijać akapity (tekst).


7

Lepiej byłoby zobaczyć standard zaprojektowany przez W3.org. Oto adres: http://www.w3.org/

Znacznik „DIV” może zawijać znacznik „P”, natomiast znacznik „P” nie może zawijać znacznika „DIV” - jak dotąd znam tę różnicę. Może być więcej innych różnic.


5

Pomyśl o tym DIVjako o elementach grupujących. Umieszczasz elementy w elemencie DIV, abyś mógł ustawić ich wyrównanie

Podczas gdy "p"jest po prostu stworzyć nowy akapit.


3

<p> reprezentuje akapit, a <div> reprezentuje „podział”, przypuszczam, że główna różnica polega na tym, że div są semantycznie „bez znaczenia”, gdzie jako <p> ma reprezentować coś związanego z samym tekstem.

Nie chciałbyś na przykład zagnieżdżać <p>, ponieważ nie miałoby to większego sensu semantycznego (z wyjątkiem cytatów), podczas gdy ludzie używają zagnieżdżonych <div> dla układu strony.

Według Wikipedii

W HTML elementy span i div są używane tam, gdzie części dokumentu nie można opisać semantycznie innymi elementami HTML.


2

pZnacznik jest do ust, powszechnie stosowanych dla tekstu. divZnacznik jest do rozdzielenia, i na ogół stosuje się do tworzenia części tekstu.


2

<p> jest semantycznie używany w tekście, zwykle akapity.

<div>służy do bloku lub obszaru na stronie internetowej. Na przykład można go użyć do utworzenia obszaru nagłówka.

Mogą one prawdopodobnie być stosowane zamiennie, ale nie należy.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.