การตัดสินใจออกแบบ - ทำไมต้องสร้าง <p> โดยไม่มี </p>


14

TL; DR

บางโปรแกรมที่ใช้กันอย่างแพร่หลาย, ซึ่งสร้าง html, จะสร้างแท็กเปิดย่อหน้าเท่านั้น, และไม่ปิดโปรแกรม, โดยสันนิษฐานว่าเบราว์เซอร์จะปิดย่อหน้าอย่างเหมาะสม.

บนใบหน้าของมันดูเหมือนว่าฉันว่าเบราว์เซอร์จะปิดย่อหน้าอย่างถูกต้องไม่ถูกต้อง การตีความของฉันถูกต้องหรือไม่ โดยทั่วไปแล้วการแลกเปลี่ยนอะไรที่เกี่ยวข้องกับการตัดสินใจประเภทนี้?


การค้นหาผ่านซอร์สโค้ด moinmoin บรรทัดของรหัสต่อไปนี้ดึงดูดสายตาของฉัน:

# We only open those tags and let the browser auto-close them:
_auto_closing_tags = set(['p'])

( แหล่งที่มา )

หลังจากอ่านส่วนที่เหลือของการนำไปใช้ฉันเชื่อมั่นว่าใช่แน่นอนเมื่อ moinmoin สร้างรหัส html สำหรับหน้าใดหน้าหนึ่งของมันมันจะสร้างแท็กเปิดย่อหน้าอย่างถูกต้องตามความเหมาะสมในขณะเดียวกันก็ตั้งใจหลีกเลี่ยง แท็กปิดย่อหน้า (แม้จะสามารถทำได้เล็กน้อย)

สำหรับกรณีการใช้งานที่เฉพาะเจาะจงของฉันค่อนข้างผิดปกติพฤติกรรมนี้ไม่ถูกต้อง ฉันถูกล่อลวงให้ส่งรายงานข้อผิดพลาดและ / หรือเปลี่ยนพฤติกรรม อย่างไรก็ตามดูเหมือนว่าการตัดสินใจการออกแบบนี้ได้ทำขึ้นมาอย่างพิถีพิถันแล้ว ฉันไม่เก่งพอในความซับซ้อนของมาตรฐาน html หรือการใช้งานเบราว์เซอร์ต่าง ๆ เพื่อให้สามารถบอกได้ว่านี่เป็นพฤติกรรมที่ถูกต้องโดยทั่วไปและฉันมีความรู้สึกว่าสัญชาตญาณของฉันในการแก้ไข / เปลี่ยนพฤติกรรมนี้อาจเป็น เข้าใจผิด

รหัสนี้ทำให้สมมติฐานที่ถูกต้องเกี่ยวกับการใช้งานเบราว์เซอร์? html ที่สร้างขึ้นนั้นถูกต้องหรือไม่ โดยทั่วไปแล้วสิ่งที่ฉันอาจหายไปที่นี่การแลกเปลี่ยน


2
คำตอบในปัจจุบันแม้จะดูเหมือนว่าการออกแบบ moronic “ จงเสรีในสิ่งที่คุณยอมรับและอนุรักษ์ในสิ่งที่คุณส่ง” และทุกสิ่ง นอกจากนี้ยังไม่จำเป็นอย่างสมบูรณ์ ฉันจะแน่นอนส่ง (ถ้อยคำรุนแรง) รายงานข้อผิดพลาดในการ Moinmoin อย่างน้อยที่สุดพวกเขาควรจัดทำเอกสารและแสดงความคิดเห็นเกี่ยวกับพฤติกรรมที่ไม่เข้าใจง่ายนี้อย่างชัดเจน
Konrad Rudolph

คำตอบ:


33

แท็กสิ้นสุดสำหรับpองค์ประกอบเป็นตัวเลือกใน HTML และจำเป็นเฉพาะใน XHTML อย่างไรก็ตามแบบร่าง HTML5 แนะนำชุดเงื่อนไขสำหรับเมื่อpแท็กปิดท้ายเป็นตัวเลือกจริง:

แท็กสิ้นสุดขององค์ประกอบ p อาจถูกตัดออกหากองค์ประกอบ p ถูกตามด้วยที่อยู่บทความข้างบล็อกคิวเตอร์ dir, div, dl, fieldset, ส่วนท้าย, ฟอร์ม, h1, h2, h3, h4, h5, h6, ส่วนหัว , hgroup, hr, เมนู, nav, ol, p, pre, ส่วน, ตารางหรือ ul, องค์ประกอบหรือหากไม่มีเนื้อหาเพิ่มเติมในองค์ประกอบหลักและองค์ประกอบหลักไม่ได้เป็นองค์ประกอบ

ที่มา: ข้อกำหนด HTML5

ที่กล่าวว่าอาร์กิวเมนต์เดียวที่ฉันเคยได้ยินการละเว้นแท็กสิ้นสุดสำหรับpองค์ประกอบคือขนาดเอกสาร ขึ้นอยู่กับคุณว่าจะเหมาะสมกับเอกสารของคุณหรือไม่ ส่วนตัวฉันมักจะรวมแท็กปิดท้ายที่เป็นตัวเลือกทั้งหมดในกรณีที่ฉันไม่เป็นไปตามข้อกำหนดสำหรับเมื่อแท็กปิดท้ายเป็นตัวเลือก


5
จิตใจที่ยอดเยี่ยมคิดเหมือนกันฉันเดา :)
Robert Harvey

@RobertHarvey คุณชนะรอบนี้ประมาณ 12 วินาที ...
yannis

2
อีกเหตุผลที่ไม่สนใจแท็กปิดท้าย: พวกเขาเห็นได้ชัดจากโครงสร้างเอกสารและเมื่อนำไปใช้ในทางที่ผิด
Jon Purdy

1
ความสามารถในการละเว้นแท็กปิดท้ายนั้นเป็นคุณสมบัติการออกแบบของ SGML อย่างชัดเจนซึ่ง HTML นั้นใช้อ้างอิง มันไม่ได้เป็นคุณสมบัติของ XML อย่างชัดเจนซึ่ง XHTML เป็นพื้นฐาน
Alan Shutko

4
ข้อโต้แย้งหนึ่งที่ฉันเห็นมากก็คือมันดูสะอาดกว่า โดยเฉพาะอย่างยิ่งในกรณีของ<li>แท็กแท็กทำหน้าที่คล้ายกับสัญลักษณ์แสดงหัวข้อย่อยมากขึ้น
DisgruntledGoat

16

ข้อกำหนด W3C สำหรับ HTML5โดยเฉพาะกล่าวว่า:

แท็กสิ้นสุดขององค์ประกอบ p อาจถูกตัดออกหากองค์ประกอบ p ถูกตามด้วยที่อยู่บทความข้างบล็อกคิวเต้ dir, div, dl, fieldset, ส่วนท้าย, ฟอร์ม, h1, h2, h3, h4, h5, h6, ส่วนหัว , ชั่วโมง, เมนู, nav, ol, p, ส่วนก่อนหน้า, ตาราง, หรือองค์ประกอบ ul หรือหากไม่มีเนื้อหาเพิ่มเติมในองค์ประกอบหลักและองค์ประกอบหลักไม่ได้เป็นองค์ประกอบ

ดังนั้นโดยทั่วไปข้อมูลจำเพาะได้ให้วิธีมากมายที่ความซับซ้อน (ใหญ่หรือเล็กว่ามันอาจจะเป็น) ของการปิดแท็กสามารถหลีกเลี่ยงได้ การใช้งานเบราว์เซอร์ที่สอดคล้องใด ๆ จะต้องรองรับข้อยกเว้นเหล่านี้

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