ol / ul ควรอยู่ภายใน <p> หรือนอก?


292

มาตรฐานใดระหว่างสองสิ่งนี้

<p>Text text text ...
    <ol>
        <li>First element</li>
    </ol>
</p>
<p>
    Other text text ...
</p>

หรือ

<p>
    Text text text ...
</p>
<ol>
    <li>First element</li>
</ol>
<p>
    Other text text ...
</p>

40
@ รหัสแล้ว: บริบทมีความสำคัญหรือไม่
ไดนามิก

คำตอบ:


422

คำตอบสั้น ๆ คือolองค์ประกอบไม่ได้รับอนุญาตตามกฎหมายภายในpองค์ประกอบ

เพื่อดูว่าทำไมไปที่สเป็ค ! หากคุณคุ้นเคยกับข้อกำหนด HTML มันจะตอบคำถามและวิทยากรมากมายของคุณ คุณต้องการที่จะรู้ว่าสามารถมีชีวิตอยู่ภายในol pดังนั้น…

4.5.1 pองค์ประกอบ :

หมวดหมู่: เนื้อหาการไหล , เนื้อหาที่เห็นได้ชัด
รูปแบบเนื้อหา: เนื้อหาถ้อยคำ


4.5.5 olองค์ประกอบ :

หมวดหมู่: เนื้อหาไหล
โมเดลเนื้อหา : ศูนย์หรือมากกว่าliและสคริปต์สนับสนุนองค์ประกอบ

ส่วนแรกบอกว่าpองค์ประกอบสามารถมีเนื้อหาการใช้ถ้อยคำเท่านั้น(ซึ่งเป็นองค์ประกอบ "แบบอินไลน์" เช่นspanและstrong)

ส่วนที่สองกล่าวว่าols คือเนื้อหาการไหล (องค์ประกอบ "บล็อก" เช่นpและdiv) ดังนั้นพวกเขาจึงไม่สามารถpนำมาใช้ภายใน


ols และอื่น ๆflow contentสามารถใช้ในองค์ประกอบอื่น ๆ เช่นdiv:

4.5.13 divองค์ประกอบ :

หมวดหมู่: เนื้อหาการไหล , เนื้อหาที่เห็นได้ชัด
รูปแบบเนื้อหา: เนื้อหาไหล


9
@link: ใช่ w3.org เป็นเทคนิคเล็กน้อย ยังคงมีข้อสงสัยเกี่ยวกับสิ่งที่ถูกต้องเมื่อใดและถ้าคุณเข้าใจพวกเขา
nyson

5
ฉันคิดว่า @Sid อธิบายข้อมูลจำเพาะและเงื่อนไขบางอย่างมีประโยชน์อย่างแน่นอน ถ้าเขาไปไกลกว่านี้มันจะเป็นคำตอบที่ดี เขาสามารถตอบคำถามได้อย่างชัดเจนด้วย :) ฉันเพิ่มการแก้ไขสำหรับสิ่งนั้น
studgeek

1
เหลือร้ายที่จะอ่าน? ไม่คิดอย่างนั้นไป4.4.1 The p elementที่ผู้เขียนพูดถึงfantastic sentencesหรืออะไรแบบนั้น
Jaime Hablutzel

1
@dynamic ฉันมักจะอ้างอิง HTML ของ MDNเพื่อให้อ่านเอกสารได้ง่ายขึ้น
Bonk

1
@AaronLS ชนิดของ! เมื่อเบราว์เซอร์คืน HTML ให้คุณ (เช่นในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์หรือจาก.innerHTML) ก็จะถูกสร้างขึ้นใหม่จากทรีองค์ประกอบ ดังนั้น Chrome ไม่ได้ปรับ HTML มากเท่ากับการสร้างทรีที่ถูกต้องจาก HTML ดั้งเดิมจากนั้นสร้าง HTML ใหม่จากทรีนั้น
s4y

40

ที่สอง. อันแรกไม่ถูกต้อง

  • ย่อหน้าต้องไม่มีรายการ
  • รายการต้องไม่มีย่อหน้ายกเว้นย่อหน้านั้นมีทั้งหมดในรายการเดียว

เบราว์เซอร์จะจัดการกับมันอย่างนั้น:

<p>tetxtextextete 
<!-- Start of paragraph -->
<ol>
<!-- Start of ordered list. Paragraphs cannot contain lists. Insert </p> -->
<li>first element</li></ol>
<!-- A list item element. End of list -->
</p>
<!-- End of paragraph, but not inside paragraph, discard this tag to recover from the error -->
<p>other textetxet</p>
<!-- Another paragraph -->


7

ที่จริงคุณควรใส่องค์ประกอบในบรรทัดpเท่านั้นดังนั้นในกรณีของคุณolจะดีกว่าข้างนอก


2
นี่เป็นคำตอบเดียวกับการตอบกลับของ @David Dorward ซึ่งคุณไม่ชอบ
ceejayoz

5
<p>tetxetextex</p>
<ol><li>first element</li></ol>
<p>other textetxeettx</p>

เพราะทั้งสอง<p>และ<ol>เป็นองค์ประกอบที่แสดงผลเป็นบล็อก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.