Sự khác biệt giữa <p> và <div> là gì?


187

Sự khác biệt giữa <p> và <div> là gì?

Chúng có thể được sử dụng thay thế cho nhau? Các ứng dụng là gì?


31
Trong mọi HTML / XHTML hợp lệ, chuyển tiếp hoặc nghiêm ngặt, bạn không thể lồng <p> bên trong <p> khác để <div> và <p> không được trao đổi.
Byran Zaugg

3
Byran - bạn đã gặp phải vấn đề thiết yếu với những câu trả lời "ngữ nghĩa" này. Vấn đề là HTML ràng buộc giả tạo <p> s để chúng hành xử khác nhau. Nếu chúng chỉ là các phần tử khối cộng với ý nghĩa ngữ nghĩa thì sẽ ổn thôi. Nhưng tại sao ngăn bạn ví dụ như nhúng một hình minh họa trong một đoạn văn?
dkretz

2
@ 117700 bạn đã cân nhắc thay đổi câu trả lời được chấp nhận chưa?
Karl Richter

Hãy ghi nhớ <div></div>yêu cầu các thẻ mở và đóng, <p>không trong các trường hợp cụ thể
Mark Schultheiss

Câu trả lời:


-26

Mã trước đó là

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

Vì vậy, tôi phải thay đổi nó thành

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

Đó là sửa chữa dễ dàng. Và CSS cho đoạn mã trên là

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

Vì vậy, thẻ div có thể chứa các yếu tố khác. P không nên bị buộc phải làm điều đó.


3
Tôi thực sự không biết ý của bạn là gì. Trong trang web của mình: trang web nào? Phạm vi để làm cho nó hoạt động Kết xuất dự định là gì?
Marcel Korpel

4
Điều này nghe có vẻ hoàn toàn phi logic đối với tôi: pcác yếu tố có thể chứa các yếu tố nội tuyến khác (đặc tả HTML 5 nói về các yếu tố cụm từ (xem 7.3) ), trong đó spanlà một trong số chúng, trong số nhiều yếu tố khác. Hơn nữa, đây không phải là câu trả lời cho câu hỏi của OP: nó không nói gì về sự khác biệt giữa pdiv. Và xin vui lòng đọc Làm thế nào để trả lời bình luận làm việc?
Marcel Korpel

@MarcelKorpel Tại sao đây là câu trả lời được chấp nhận? Không tranh chấp, chỉ thắc mắc tại sao có sự mâu thuẫn.
Anshul

3
@Anshul Rõ ràng có cái gì đó hoạt động cho OP, nhưng nó không trả lời câu hỏi. Cũng nhìn vào điểm của câu trả lời này: -16 vào lúc này. Trong trường hợp bạn không biết: OP là người duy nhất có thể chấp nhận câu trả lời, trong khi mọi người trong cộng đồng có thể bỏ phiếu trả lời lên hoặc xuống.
Marcel Korpel

Muộn với bên ghét, nhưng: <p>các thẻ rất thường chứa các yếu tố khác, như <strong>hoặc <em>v.v. Nội dung của <p>thẻ phải là tên của nó ngụ ý: một đoạn văn bản. Đoạn văn bản thường chứa đánh dấu bổ sung. Không có gì thậm chí từ xa bất thường hoặc sai với điều đó.
Dave Newton

296

Chúng có sự khác biệt về ngữ nghĩa - một <div>yếu tố được thiết kế để mô tả một thùng chứa dữ liệu trong khi một<p> yếu tố được thiết kế để mô tả một đoạn nội dung.

Các ngữ nghĩa làm cho tất cả sự khác biệt. HTML là một ngôn ngữ đánh dấu, có nghĩa là nó được thiết kế để "đánh dấu" nội dung theo cách có ý nghĩa đối với người tiêu dùng đánh dấu. Hầu hết các nhà phát triển tin rằng ngữ nghĩa của tài liệu là các kiểu mặc định và kết xuất mà trình duyệt áp dụng cho các yếu tố này nhưng đó không phải là trường hợp.

Các yếu tố bạn chọn để đánh dấu nội dung của bạn nên mô tả nội dung. Đừng đánh dấu tài liệu của bạn dựa trên giao diện của nó - hãy đánh dấu nó dựa trên nội dung của nó.

Nếu bạn cần một container chung hoàn toàn cho mục đích bố trísau đó sử dụng a <div>. Nếu bạn cần một yếu tố để mô tả một đoạn nội dung thì hãy sử dụng a <p>.

Lưu ý: Điều quan trọng là phải hiểu rằng cả hai <div><p>các yếu tố cấp khối , có nghĩa là hầu hết các trình duyệt sẽ xử lý chúng theo cách tương tự.


Kinh nghiệm của tôi là nếu bạn muốn bố trí một số nội dung khác với một số nội dung khác, hai nội dung đó khác biệt về mặt ngữ nghĩa và do đó nên được đánh dấu độc lập bằng mọi cách . Nếu OTOH, chúng không khác biệt về mặt ngữ nghĩa, thì có lẽ chúng nên được đặt ra cùng nhau. Trong cả hai trường hợp, không cần thêm một phần tử cho mục đích bố trí, bởi vì trong trường hợp đầu tiên, nó đã có sẵn để bắt đầu và trong trường hợp thứ hai không có bố cục nào xảy ra. Nhưng sau đó, một lần nữa, tôi là một người theo chủ nghĩa thuần túy và các trang web của tôi luôn trông giống như hồi tưởng về năm 1995.
Jörg W Mittag

5
Khi bạn nói sử dụng <p>cho "đoạn nội dung", nội dung có phải ở dạng chữ và từ không? Bạn có bao giờ sử dụng <p>để mô tả một số loại nội dung khác, như hình ảnh không?
drs

1
@drs: Nội dung được phép cho <p> là "Nội dung cụm từ", bao gồm các thành phần cụm từ được trộn lẫn với dữ liệu ký tự bình thường. Btw, hình ảnh thuộc về các yếu tố phrasing để bạn có thể sử dụng chúng bên trong <p>. Tài liệu tham khảo: w3.org/TR/html-markup/p.htmlw3.org/TR/html-markup/common-models.html#common.elem.phrasing . HTH
Paolo

2
Bạn đã quên đề cập rằng bạn không thể lồng p trong khi bạn có thể với div. Đối với loại thái độ "không bao gồm thông tin bố cục trong loại thái độ": không thể viết một tệp html mà không bận tâm đến giao diện của nó. Sự lựa chọn của bạn về thứ tự và lồng nhau của div sẽ luôn có ảnh hưởng - trừ khi bạn viết một số javascript tách trang của bạn ra và cấu trúc lại nó. Do đó, xem div là "một thùng chứa chung hoàn toàn cho mục đích bố trí " là từ ngữ chính xác.
masterxilo

Điều gì xảy ra nếu tôi muốn sử dụng divthay vì p?
Melab

66

Tất cả các câu trả lời hay, nhưng có một điểm khác biệt mà tôi chưa thấy đề cập đến, và đó là cách các trình duyệt hiển thị chúng theo mặc định. Các trình duyệt web chính sẽ hiển thị một <p>thẻ có lề trên và dưới đoạn văn. Một <div>thẻ sẽ được hiển thị mà không có bất kỳ lề nào cả.


10
Nếu bạn muốn kiểm soát kết xuất, bạn nên sử dụng CSS. Đừng dựa vào các mặc định hiện tại của trình duyệt.
Ốc cơ khí

15
Câu hỏi hỏi có sự khác biệt nào giữa các thẻ DIV và P. Đây là một điều quan trọng đối với bất kỳ ai không sử dụng thiết lập lại CSS, đặc biệt là vì nó có thể không rõ ràng đối với ai đó chỉ sử dụng một trình duyệt.
ceejayoz

3
Cảm ơn bạn đã làm rõ. Tôi đã tìm kiếm sự khác biệt chính xác này vì việc sử dụng thẻ P đã khiến văn bản xuất hiện với lề ở trên cùng (và có lẽ là dưới cùng), vì vậy đã tự hỏi không gian đó đến từ đâu. Cần phải thoát khỏi không gian.
WhatsInAName

@ceejayoz lề? Làm thế nào chúng ta có thể thấy điều đó?
JAVA

57

<p> chỉ ra một đoạn văn và có ý nghĩa ngữ nghĩa.

<div> chỉ đơn giản là một container khối cho nội dung khác.

Bất cứ điều gì có thể đi trong một <p>có thể đi trong một <div>nhưng điều ngược lại là không đúng sự thật. <div>thẻ có thể có các yếu tố cấp khối như trẻ em. <p>yếu tố không thể.

Hãy nhìn vào 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
Vì vậy, bạn không thể có <h1> trong <p>?
Koray Tugay

8

Sự khác biệt duy nhất giữa hai yếu tố là ngữ nghĩa. Cả hai phần tử, theo mặc định, có hiển thị quy tắc CSS: khối (do đó mức khối) được áp dụng cho chúng; không có gì hơn (ngoại trừ phần nào lề thêm trong một số trường hợp). Tuy nhiên, như đã nói ở trên, cả hai đều khác nhau rất nhiều về ngữ nghĩa.

Các <p>yếu tố, như tên của nó phần nào ngụ ý, là cho các đoạn văn. Vì vậy, <p>nên được sử dụng khi bạn muốn tạo các khối văn bản đoạn văn.

Các <div>yếu tố, tuy nhiên, có ít hoặc không có nghĩa ngữ nghĩa và do đó có thể được sử dụng như một yếu tố khối cấp generic - phổ biến nhất, người sử dụng nó trong bố trí bởi vì nó là vô nghĩa ngữ nghĩa và có thể được sử dụng cho bất cứ điều gì nói chung là bạn có thể yêu cầu một block yếu tố cấp độ cho.

Liên kết để biết thêm chi tiết


3
Không cần câu cuối cùng đó. Hầu như tất cả các câu hỏi trên trang web này có thể được đặt ra, nhưng đó không phải là vấn đề. Vấn đề là tạo ra một tài nguyên cho các nhà phát triển có cùng câu hỏi trong tương lai.
nickf

ya, nhưng anh ta có thể bắt đầu một cuộc thảo luận với một số thông tin liên quan, bằng mọi cách sẽ chỉnh sửa nó
Ashish Agarwal

1
Vì cả p và div đều là các phần tử khối, tại sao khi một phần tử h1 được lồng trong một div, nó sẽ kế thừa các kiểu nhưng khi được lồng trong ap thì nó sẽ không? Cảm ơn bạn
Trả lại-1

@ Return-1 Tôi không biết chính xác điều gì xảy ra trong trường hợp của bạn, nhưng h1 là một tiêu đề, không phải là nội dung cụm từ và do đó không được phép trong một đoạn văn. Xem xét văn bản in - nó chứa các tiêu đề và đoạn văn, nhưng các tiêu đề không phải là một phần của các đoạn văn.
Oskar Berggren

7

DIV là một thùng chứa mức khối chung có thể chứa bất kỳ thành phần khối hoặc nội tuyến nào khác, bao gồm các thành phần DIV khác, trong khi P là để bọc các đoạn văn bản (văn bản).


7

Có thể tốt hơn để xem tiêu chuẩn được thiết kế bởi W3.org. Đây là địa chỉ: http://www.w3.org/

Thẻ "DIV" có thể bao bọc thẻ "P" trong khi đó, thẻ "P" không thể bọc thẻ "DIV" - cho đến nay tôi biết sự khác biệt này. Có thể có nhiều sự khác biệt khác.


5

Hãy nghĩ về DIVnhư một yếu tố nhóm. Bạn đặt các phần tử trong một phần tử DIV để bạn có thể đặt sự sắp xếp của chúng

Trong khi đó "p"chỉ đơn giản là để tạo ra một đoạn mới.


3

<p> đại diện cho một đoạn văn và <div> đại diện cho một 'bộ phận', tôi cho rằng sự khác biệt chính là các div là về mặt ngữ nghĩa 'vô nghĩa', trong đó <p> được cho là đại diện cho một cái gì đó liên quan đến chính văn bản.

Ví dụ, bạn sẽ không muốn lồng <p> s, vì điều đó sẽ không có nhiều ý nghĩa ngữ nghĩa (ngoại trừ theo nghĩa trích dẫn) Trong khi mọi người sử dụng <div> s lồng nhau để bố trí trang.

Theo Wikipedia

Trong HTML, các phần tử span và div được sử dụng trong đó các phần của tài liệu không thể được mô tả về mặt ngữ nghĩa bởi các phần tử HTML khác.


2

Một pthẻ dành cho một đoạn văn, thường được sử dụng cho văn bản. Một divthẻ là cho chia, và thường được sử dụng để tạo các phần của văn bản.


2

<p> được sử dụng về mặt ngữ nghĩa cho văn bản, đoạn văn thường.

<div>được sử dụng cho một khối hoặc khu vực trong một trang web. Ví dụ, nó có thể được sử dụng để tạo vùng cho tiêu đề.

Chúng có thể được sử dụng thay thế cho nhau, nhưng bạn không nên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.