HTML: รวมหรือไม่รวมแท็กปิดตัวเลือกหรือไม่


149

แท็กปิดHTML 1บางอันเป็นทางเลือกเช่น:

</HTML>
</HEAD>
</BODY>
</P>
</DT>
</DD>
</LI>
</OPTION>
</THEAD>
</TH>
</TBODY>
</TR>
</TD>
</TFOOT>
</COLGROUP>

หมายเหตุ:เพื่อไม่ให้สับสนกับแท็กปิดที่ไม่ได้รับอนุญาตให้รวมเช่น:

</IMG>
</INPUT>
</BR>
</HR>
</FRAME>
</AREA>
</BASE>
</BASEFONT>
</COL>
</ISINDEX>
</LINK>
</META>
</PARAM>

หมายเหตุ: xhtmlแตกต่างจาก HTML xhtml เป็นรูปแบบของ xml ซึ่งต้องการให้ทุกองค์ประกอบมีแท็กปิด แท็กปิดสามารถที่ต้องห้ามใน html ยังบังคับxhtmlใน

เป็นแท็กปิดตัวเลือก

  • ถูกรวมเข้าด้วยกัน แต่เราจะยอมรับหากคุณลืมหรือ
  • ไม่รวมในอุดมคติแต่เราจะยอมรับหากคุณใส่ไว้

ในคำอื่น ๆควรฉันรวมพวกเขาหรือฉันควรจะไม่รวมถึงพวกเขา?

HTML 4.01 เจรจาข้อมูลจำเพาะเกี่ยวกับการปิดแท็กองค์ประกอบเป็นตัวเลือกแต่ไม่ได้บอกว่าถ้ามันเป็นที่นิยมในการรวมพวกเขาหรือดีกว่าที่จะไม่รวมถึงพวกเขา

ในทางตรงกันข้ามบทความสุ่มบน DevGuru พูดว่า :

แท็กสิ้นสุดเป็นตัวเลือก อย่างไรก็ตามขอแนะนำให้รวมไว้ด้วย

เหตุผลที่ฉันถามคือเพราะคุณเพิ่งรู้ว่ามันเป็นตัวเลือกสำหรับเหตุผลความเข้ากันได้; และพวกเขาจะทำให้พวกเขา ( บังคับ | ต้องห้าม ) หากพวกเขาสามารถทำได้

ใช้วิธีอื่น: HTML 1, 2, 3 เกี่ยวข้องกับแท็กปิดเหล่านี้หรือไม่ก็ได้ HTML 5 ทำอะไร แล้วฉันควรทำยังไงดี?

บันทึก

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

เชิงอรรถ

1 HTML 4.01


4
คำถามที่ยากลำบาก ... คำแนะนำ w3c บางคำยังรวมถึงตัวอย่างที่ทำทั้งสองอย่าง: w3.org/TR/html401/struct/global.html#id-and-classตัวอย่างแรกมี</p>แท็กปิดและอันที่สองไม่สนใจ!
ริชาร์ด JP Le Guen

เพื่อชี้แจง - ในกรณีของแท็กที่ต้องห้ามใน HTML5 โซลูชันที่ถูกต้อง "ชัดเจน" / XML คือการปิดด้วย/>เช่น<meta charset="utf-8" />แม้ว่า<meta charset="utf-8">HTML5 นั้นถูกต้องหรือไม่
cboettig

@cboettig ใช่ <meta charset="utf-8" />เป็นที่ไม่ถูกต้อง HTML, มันต้อง<meta charset="utf-8">เป็น ในทางตรงกันข้าม<meta charset="tuf-8">คือไม่ถูกต้อง XHTML, มันต้องเป็น<meta charset="utf-8" />
เอียนบอยด์

@IanBoyd จริงเหรอ? ใน HTML5? คู่มือ W3C ร่างพูดได้หลายภาษา HTML / XHTMLกล่าวว่าจะใช้<meta charset="UTF-8"/>กับแท็กปิด มิฉะนั้นวิธีการหลายภาษาหรือ xhtml สามารถตรวจสอบว่า html5 และ xml เคย?
cboettig

@cboettig คุณพูดถูก Polyglot Markup (เช่นเอกสาร XHTML ที่ใช้กับ HTML ได้ ) ไม่สามารถใช้ HTML 4.01 ได้ HTML5 (ยังคงทำงานในความคืบหน้า) มีความคิดของการเป็นโมฆะองค์ประกอบ - องค์ประกอบที่ไม่สามารถมีแท็กสิ้นสุด เบราว์เซอร์ส่วนใหญ่น่าจะอ่อนโยนและจะให้อภัยข้อผิดพลาดของมาร์กอัปของคุณ
Ian Boyd

คำตอบ:


49

ตัวเลือกเป็นสิ่งที่ควรจะมีความชัดเจนที่ปลายพวกเขาโดยไม่จำเป็นต้องมีแท็กสิ้นสุด EG แต่ละคน<li>บอกเป็นนัยว่า</li>หากไม่มีใครอยู่ตรงหน้า

แท็กปิดท้ายที่ต้องห้ามทั้งหมดจะตามมาด้วยแท็กปิดท้ายทันทีดังนั้นจึงเป็นการซ้ำซ้อนที่ต้องพิมพ์<img src="blah" alt="blah"></img>ทุกครั้ง

ฉันมักจะใช้แท็กตัวเลือก (เว้นแต่ฉันจะมีเหตุผลที่ดีที่จะไม่ทำ) เพราะมันจะให้รหัสที่อ่านได้และปรับปรุงได้มากกว่า


18
ฉันเห็นตอนนี้ <LI>เหมือนเป็นสัญลักษณ์แสดงหัวข้อย่อย <LI>...</LI>ไม่มีใครต้องการให้มีการห่อจุดสัญลักษณ์ทั้งใน ดังนั้นในลักษณะที่LIตรงกับสิ่งที่คนทั่วไปจะเขียนในช่วงมาร์กอัป Sames ใช้เครื่องหมายย่อหน้า ( <P>) ในการประมวลผลคำคุณเพิ่มเครื่องหมายย่อหน้าที่จุดเริ่มต้นของย่อหน้า และไม่ใช่ตอนท้ายของทุกคนเช่นกัน ดังนั้นในการตีความนี้แท็กปิดจะเป็นตัวเลือกเพราะไม่มีบุคคลทั่วไปคิดว่าจะมี นอกจากนี้องค์ประกอบเองไม่มีเนื้อหา - องค์ประกอบคือเนื้อหา
Ian Boyd

8
คุณหมายถึงอะไรโดยที่ผมมักจะใช้แท็กตัวเลือก - คุณหมายความว่าคุณรวมถึงแท็กสิ้นสุดหรือว่าคุณปล่อยให้มันออกมา ? (ฉันได้รับความประทับใจที่คุณรวมไว้เมื่อฉันอ่านคำตอบของคุณ - แต่ความคิดเห็นข้างต้นโดยIan Boydทำให้ฉันรู้สึกว่าคุณไม่ได้รวมไว้)
KajMagnus

3
@IanBoyd และสำหรับย่อหน้าสุดท้าย?
Pacerier

22
@Pacerier ผู้คนเขียนข้อความมาหลายร้อยปีแล้ว ไม่มีใครเคยสับสนเมื่อย่อหน้าสิ้นสุด
Ian Boyd

4
ลิงค์ที่เกี่ยวข้องสำหรับ HTML5 สำหรับผู้ที่พบคำตอบนี้ในขณะที่พยายามค้นหาเอกสารอ้างอิงจริง: w3.org/TR/html5/syntax.html#optional-tags
Mike 'Pomax' Kamermans

59

มีหลายกรณีที่แท็กอย่างชัดเจนช่วย แต่บางครั้งมันก็เป็นเรื่องไร้สาระที่จำเป็น

โปรดทราบว่าข้อกำหนดของ HTML ระบุไว้อย่างชัดเจนว่าเมื่อใดจึงจะสามารถละเว้นแท็กดังนั้นจึงไม่ใช่ข้อผิดพลาดเสมอไป

</body></html>ตัวอย่างเช่นคุณไม่จำเป็น ไม่มีใครจำได้ว่าจะใส่<tbody>อย่างชัดเจน (จนถึงจุดที่ XHTML ทำข้อยกเว้นสำหรับมัน)

คุณไม่ต้องการ</head><body>เว้นแต่ว่าคุณมีสคริปต์ที่จัดการ DOM ที่ค้นหาจริง<head>(จากนั้นก็ควรปิดอย่างชัดเจนเพราะกฎสำหรับการสิ้นสุดโดยนัย<head>อาจทำให้คุณประหลาดใจ)

รายการที่ซ้อนอยู่จะดีกว่าหากไม่มี</li>เพราะจากนั้นจึงยากที่จะสร้างul > ulต้นไม้ที่ผิดพลาด

ถูกต้อง:

<ul>
  <li>item
  <ul>
    <li>item
  </ul>
</ul>

ไม่ถูกต้อง:

<ul>
  <li>item</li>
  <ul>
    <li>item</li>
  </ul>
</ul>

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

<p>foo <p>bar</p> baz</p>

จะแยกเป็น:

<p>foo</p><p>bar</p> baz

มันสามารถช่วยได้เมื่อคุณตรวจสอบเอกสาร


4
รอทำไม<p>foo <p>bar</p> baz</p>ไม่แยกวิเคราะห์เป็นสองpแท็กซ้อนกัน?
Eric

19
เพราะ<P>องค์ประกอบไม่สามารถมีองค์ประกอบระดับบล็อกและ <P>เป็นองค์ประกอบระดับบล็อก จาก ( w3.org/TR/REC-html40/struct/text.html#edef-P ) "องค์ประกอบ P แสดงถึงย่อหน้ามันไม่สามารถมีองค์ประกอบระดับบล็อก (รวมถึง P เอง)"
Ian Boyd

1
@IanBoyd คุณหมายถึงไม่สามารถมีองค์ประกอบระดับบล็อกโดยไม่คำนึงถึงกฎ CSS หรือไม่?
Pacerier

6
@Pacerier CSS ไม่สามารถมีอิทธิพลกับ DOM ในทางใดทางหนึ่ง DOM จะถูกแยกวิเคราะห์ก่อนจากนั้น CSS จะแสดง การblockแสดงCSS เป็นสิ่งที่แตกต่างอย่างสิ้นเชิงจากเนื้อหาระดับบล็อกของ HTML (มันเกิดขึ้นที่องค์ประกอบระดับบล็อก HTML ส่วนใหญ่จะแสดงเป็นบล็อก CSS โดยค่าเริ่มต้น)
Kornel

2
@ anton1980 ไม่ไม่เหมือนกัน มีการระบุการจัดการแท็กปิดที่ไม่ต้องใส่ข้อมูลไว้อย่างชัดเจนและทำงานได้อย่างน่าเชื่อถือในเบราว์เซอร์ที่เข้ากันได้ทั้งหมด OTOH ที่ทำขึ้นจะไม่ทำงานเช่น<t> <title>
Kornel

18

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

ข้อความที่ตัดตอนมาบางส่วนจากDive Into HTML5 :

[T] เขาข้อเท็จจริงที่ว่ามาร์กอัป HTML ที่“ เสีย” ยังคงทำงานในเว็บเบราว์เซอร์ทำให้ผู้เขียนสร้างหน้า HTML ที่เสียหาย หน้าแตกมาก โดยประมาณบางกว่า 99% ของหน้า HTML บนเว็บวันนี้มีข้อผิดพลาดอย่างน้อยหนึ่งรายการ แต่เนื่องจากข้อผิดพลาดเหล่านี้ไม่ทำให้เบราว์เซอร์แสดงข้อความข้อผิดพลาดที่มองเห็นได้จึงไม่มีใครแก้ไขได้

W3C เห็นว่านี่เป็นปัญหาพื้นฐานกับเว็บและพวกเขาก็ออกเดินทางเพื่อแก้ไข XML ซึ่งเผยแพร่ในปี 1997 เกิดจากประเพณีการให้อภัยลูกค้าและได้รับคำสั่งว่าโปรแกรมทั้งหมดที่ใช้ XML จะต้องปฏิบัติต่อข้อผิดพลาดที่เรียกว่า แนวคิดของการล้มเหลวในข้อผิดพลาดครั้งแรกนี้กลายเป็นที่รู้จักในนาม "การจัดการข้อผิดพลาดที่เข้มงวด" หลังจากผู้นำกรีกเดรโกผู้ก่อตั้งโทษประหารสำหรับการละเมิดกฎหมายค่อนข้างน้อย เมื่อ W3C ปรับรูปแบบ HTML เป็นคำศัพท์ XML พวกเขาได้รับคำสั่งว่าเอกสารทั้งหมดที่ให้บริการด้วยapplication/xhtml+xmlประเภท MIME ใหม่จะต้องได้รับการจัดการข้อผิดพลาด draconian หากมีแม้แต่ข้อผิดพลาดที่เกิดขึ้นอย่างดีเพียงครั้งเดียวในหน้า XHTML ของคุณ […] เว็บเบราว์เซอร์จะไม่มีทางเลือกนอกจากหยุดประมวลผลและแสดงข้อความแสดงข้อผิดพลาดกับผู้ใช้

ความคิดนี้ไม่เป็นที่นิยมในระดับสากล ด้วยอัตราความผิดพลาดประมาณ 99% ในหน้าเว็บที่มีอยู่เป็นไปได้เคยนำเสนอการแสดงข้อผิดพลาดให้กับผู้ใช้และความขาดแคลนของคุณสมบัติใหม่ใน XHTML 1.0 และ 1.1 application/xhtml+xmlในการปรับค่าใช้จ่ายผู้เขียนเว็บไม่สนใจโดยทั่วไป แต่นั่นไม่ได้หมายความว่าพวกเขาละเลย XHTML ไปเลย โอ้แน่นอนที่สุดไม่ใช่ ภาคผนวก C ของข้อกำหนด XHTML 1.0 ทำให้ผู้เขียนเว็บของโลกมีช่องโหว่:“ ใช้บางอย่างที่ดูเหมือนไวยากรณ์ XHTML แต่ให้บริการกับtext/htmlประเภท MIME” และนั่นคือสิ่งที่นักพัฒนาเว็บหลายพันคนทำได้: พวกเขา“ อัปเกรด” เป็น XHTML ไวยากรณ์ แต่ให้บริการกับประเภทข้อความ / html MIME

แม้กระทั่งทุกวันนี้หน้าเว็บนับล้านหน้าก็อ้างว่าเป็น XHTML พวกเขาเริ่มต้นด้วยประเภทเอกสาร XHTML ในบรรทัดแรกชื่อแท็กใช้ตัวพิมพ์เล็กใช้คำพูดรอบค่าแอตทริบิวต์และเพิ่มเฉือนท้ายหลังจากองค์ประกอบที่ว่างเปล่าเหมือนและ<br /> <hr />แต่มีเพียงเสี้ยวหน้าเล็กน้อยเท่านั้นที่จะได้รับบริการapplication/xhtml+xmlประเภท MIME ซึ่งจะทำให้เกิดข้อผิดพลาด draconian ของ XML หน้าใด ๆ ที่ให้บริการด้วย MIME ประเภทtext/html- ไม่ว่าจะเป็น doctype, ไวยากรณ์หรือรูปแบบการเข้ารหัส - จะถูกวิเคราะห์โดยใช้ตัวแยกวิเคราะห์ HTML ที่“ ให้อภัย” ละเว้นข้อผิดพลาดของมาร์กอัปและไม่แจ้งเตือนผู้ใช้ปลายทาง (หรือบุคคลอื่น) จะแตกทางเทคนิค

XHTML 1.0 รวมถึงช่องโหว่นี้ แต่ XHTML 1.1 ปิดและ XHTML 2.0 ที่ไม่เคยทำสรุปยังคงดำเนินต่อไปตามประเพณีที่ต้องการการจัดการข้อผิดพลาดที่เข้มงวด และนั่นคือสาเหตุที่มีหน้าเว็บหลายพันล้านหน้าที่อ้างว่าเป็น XHTML 1.0 และมีเพียงไม่กี่รายเท่านั้นที่อ้างว่าเป็น XHTML 1.1 (หรือ XHTML 2.0) คุณใช้ XHTML จริงๆเหรอ? ตรวจสอบประเภท MIME ของคุณ (ที่จริงแล้วถ้าคุณไม่รู้ว่าคุณกำลังใช้ MIME ประเภทใดฉันสามารถรับประกันได้ว่าคุณยังคงใช้งานtext/htmlอยู่) เว้นแต่คุณจะให้บริการหน้าเว็บของคุณด้วย MIME ประเภทที่application/xhtml+xmlเรียกว่า "XHTML" ของคุณ เป็น XML ในชื่อเท่านั้น

[T] คนที่เสนอรูปแบบ HTML และ HTML ที่พัฒนาขึ้นต้องเผชิญกับสองทางเลือกคือยอมแพ้หรือทำงานต่อไปนอก W3C พวกเขาเลือกที่หลังจดทะเบียนwhatwg.orgโดเมนและในเดือนมิถุนายนปี 2004 สิ่งที่คณะทำงานเกิด

[T] เขาคณะทำงานอะไรกำลังทำงานอย่างเงียบ ๆ กับสิ่งอื่น ๆ เช่นกัน หนึ่งในนั้นคือสเปคซึ่งแรกเริ่มขนานนามWeb Forms 2.0ซึ่งเพิ่มการควบคุมชนิดใหม่ลงในฟอร์ม HTML (คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับรูปแบบเว็บในรูปแบบของการบ้า .) อีกประการหนึ่งคือสเปร่างที่เรียกว่า“การใช้งานเว็บ 1.0” ซึ่งรวมถึงคุณสมบัติใหม่ที่สำคัญเช่นผ้าใบวาดภาพโดยตรงโหมดและการสนับสนุนพื้นเมืองสำหรับเสียงและวิดีโอโดยไม่ต้องปลั๊กอิน

ในเดือนตุลาคม 2009 W3C ปิดคณะทำงาน XHTML 2และออกแถลงการณ์นี้เพื่ออธิบายการตัดสินใจ :

เมื่อ W3C ประกาศคณะทำงาน HTML และ XHTML 2 ในเดือนมีนาคม 2550 เราระบุว่าเราจะติดตามตลาดสำหรับ XHTML 2 ต่อไป W3C ตระหนักถึงความสำคัญของสัญญาณที่ชัดเจนต่อชุมชนเกี่ยวกับอนาคตของ HTML

ในขณะที่เรารับรู้คุณค่าของการมีส่วนร่วมของคณะทำงาน XHTML 2 ในช่วงหลายปีที่ผ่านมาหลังจากการหารือกับผู้เข้าร่วมฝ่ายบริหารของ W3C ได้ตัดสินใจอนุญาตให้คณะทำงานของคณะทำงานหมดอายุในปลายปี 2552 และจะไม่ต่ออายุ

คนที่ชนะคือคนที่เรือ


12

เหตุผลที่ฉันถามคือเพราะคุณเพิ่งรู้ว่ามันเป็นตัวเลือกสำหรับเหตุผลความเข้ากันได้; และพวกเขาจะทำให้พวกเขา (บังคับ | ต้องห้าม) หากพวกเขาสามารถทำได้

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

HTML 1, 2, 3 เกี่ยวข้องกับการปิดแท็กอะไรบ้าง

DTD สำหรับ HTML 2 นั้นฝังอยู่ในRFCซึ่งรวมถึงHTML DTDดั้งเดิมนั้นมีแท็กเริ่มต้นและแท็กสิ้นสุดที่เป็นทางเลือกทั่วทุกแห่ง

HTML 3 ถูกยกเลิก (เนื่องจากสงครามเบราว์เซอร์) และแทนที่ด้วย HTML 3.2 (ซึ่งถูกออกแบบมาเพื่ออธิบายสถานะปัจจุบันของเว็บ)

HTML 5 ทำอะไร

HTML 5 นั้นมุ่งเน้นไปที่ "ปูทางเท้า" ตั้งแต่เริ่มแรก

แล้วฉันควรทำยังไงดี?

อาตอนนี้เป็นเรื่องส่วนตัวและเป็นข้อโต้แย้ง :)

บางคนคิดว่าแท็กที่ชัดเจนดีกว่าสำหรับการอ่านและการบำรุงรักษาโดยอาศัยการอยู่ต่อหน้าผู้อ่าน

บางคนคิดว่าแท็กที่อนุมานนั้นดีกว่าสำหรับความสามารถในการอ่านและการบำรุงรักษาโดยอาศัยการไม่เกะกะตัวแก้ไข


1
+1 ฉันไม่เคยนึกถึงแนวคิดของ "อนุมานอย่างน่าเชื่อถือ" ดังนั้นสิ่งนั้นจึงสนับสนุนแนวคิดที่ว่าไม่มีความตั้งใจอย่างใดอย่างหนึ่งอย่างใดอย่างหนึ่ง ฉันสันนิษฐานว่าข้อมูลจำเพาะกำลังพยายามเข้ากันได้กับเนื้อหา HTML ที่มีอยู่และข้อกำหนด HTML
Ian Boyd

ขออภัยเดฟฉันมอบให้กับ aslum; เขาต้องการตัวแทน :) แต่คุณมีความคิดเดียวกันกับเนื้อหาที่เชื่อมโยงและอ้างถึงมากขึ้น แต่คำตอบที่ดี
Ian Boyd

8

HTML 5 ทำอะไร

คำตอบสำหรับคำถามนี้อยู่ใน W3C Working Draft: http://www.w3.org/TR/html5/syntax.html#syntax-tag-omission

แล้วฉันควรทำยังไงดี?

มันเป็นเรื่องของสไตล์ ฉันพยายามไม่ละเว้นแท็กปิดท้ายเพราะจะช่วยให้ฉันเข้มงวดและไม่ละเว้นแท็กที่จำเป็น


+1 สำหรับลิงก์ไปยังข้อมูลจำเพาะ HTML 5 ฉบับร่างและส่วนที่เหมาะสม แต่ html 5 จะไม่พูดอย่างใดอย่างหนึ่ง
Ian Boyd

6

หากฟุ่มเฟือยปล่อยมันออกไป

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

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

เมื่อดูที่ส่วน RFC ข้อมูลจำเพาะ HTML-5 ที่ลิงก์ด้านบนคุณจะเห็นว่าแท็กตัวเลือกนั้นเชื่อมโยงกับการแสดงความคิดเห็นอย่างแปลกประหลาด! ควรบอกคุณว่าผู้แต่งไม่ได้สวมหมวกดีไซน์ พวกเขาแทนที่จะเล่นเกม "เอกสารที่แปลกประหลาด" ในการใช้งานที่สำคัญ ดังนั้นเราไม่สามารถใช้สเป็คแรงเกินไปในส่วนนี้

ดังนั้นทางออกคืออย่าเหงื่อออก ไปยังสิ่งที่สำคัญจริงๆ :)


5

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


2
Richard: เมื่อคุณมีโครงสร้างที่ซ้อนกันลึกคุณจะพบข้อผิดพลาดได้ง่ายกว่าเนื่องจากแท็กปิดให้ข้อมูลเพิ่มเติมเกี่ยวกับเจตนา
Gabe

1
ฉันคิดว่า "แท็กปิดให้ข้อมูลเพิ่มเติมเกี่ยวกับความตั้งใจ" เป็นคำตอบที่สั้นที่สุดสำหรับคำถามนี้ ให้เหตุผลที่ชัดเจนชัดเจนไม่ทางใดก็ทางหนึ่ง
squarecandy

4

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

แต่เมื่อมันมีความหมายแล้วก็ทำกับมัน ในงานของฉันเมื่อไม่นานมานี้ฉันสามารถลดขนาดของ HTML ที่แสดงผลของฉันจาก 1.5 MB เป็น 800 KB โดยการกำจัดคุณลักษณะส่วนท้ายและค่าซ้ำซ้อนที่สร้างขึ้นส่วนใหญ่สำหรับแท็กเปิดซึ่งข้อความขององค์ประกอบนั้นเหมือนกับ ความคุ้มค่า ฉันมีแท็กประมาณ 200 แท็ก ฉันสามารถใช้วิธีอื่นทั้งหมด แต่นั่นจะทำงานได้มากขึ้น ($$$) ดังนั้นสิ่งนี้ทำให้ฉันสามารถทำให้หน้าตอบสนองได้ง่ายขึ้น

เพิ่งรู้อยากเห็นฉันพบว่าถ้าฉันลบอัญประกาศรอบคุณลักษณะที่ไม่ต้องการพวกเขาฉันสามารถบันทึก 20 KB แต่ IDE (Visual Studio) ของฉันไม่ชอบ ฉันก็ประหลาดใจที่พบว่า ID ที่ยาวมาก ๆ ซึ่ง ASP.NET สร้างบัญชีสำหรับไฟล์ของฉัน 20%

แนวคิดที่ว่าเราสามารถได้รับส่วนของ HTML ที่เกี่ยวข้องที่ถูกต้องนั้นถูกเข้าใจผิดตั้งแต่แรกดังนั้นสิ่งใดก็ตามที่ทำงานได้ดีที่สุดสำหรับคุณและลูกค้าของคุณ เครื่องมือส่วนใหญ่ที่ฉันเคยเห็นหรือใช้จะบอกว่าพวกเขาสร้าง xhtml แต่พวกเขาใช้งานไม่ได้จริง ๆ 100% และไม่มีประโยชน์ใด ๆ ในการปฏิบัติตามอย่างเคร่งครัด


ฉันแทบจะไม่สามารถยอมรับแท็กปิดท้ายที่เป็นตัวเลือกได้ แต่ฉันคิดว่าเป็นความคิดที่ดีที่จะไม่ใส่เครื่องหมายคำพูดในแอตทริบิวต์ คุณกำลังเสี่ยงที่ไซต์ของคุณจะพังในบางเบราว์เซอร์ หากคุณมีไฟล์ hk 800kb แสดงว่าคุณกำลังทำอะไรผิดพลาดอย่างรุนแรง
Christoph

2
@Christoph: การละเว้นแท็กปิดท้ายที่เป็นตัวเลือก (เช่น</p>หรือ</li>) นั้นสมบูรณ์แบบตามข้อกำหนด HTML หากเบราว์เซอร์ไม่เข้าใจสิ่งนั้นแสดงว่าเป็นปัญหาของเบราว์เซอร์
Konrad Borowski

2

โดยส่วนตัวฉันเป็นแฟนตัวยงของ XHTML และเช่นเดียวกับ ghoppe "ฉันพยายามไม่ละเว้นแท็กปิดท้ายเพราะมันช่วยให้ฉันเข้มงวดและไม่ละแท็กที่จำเป็น"

แต่

หากคุณจงใจใช้ HTML 4.n อย่างใดอย่างหนึ่งไม่สามารถโต้แย้งได้ว่าการรวมไว้ในนั้นทำให้การใช้เอกสารง่ายขึ้นเนื่องจากแนวคิดเรื่องรูปแบบที่ดีเมื่อเทียบกับความถูกต้องเป็นแนวคิด XML และคุณจะสูญเสียผลประโยชน์นั้นเมื่อคุณห้ามแท็กปิดบางอย่าง ดังนั้นปัญหาเดียวจะกลายเป็นความถูกต้อง ... และถ้ามันยังคงถูกต้องโดยที่ไม่มีพวกเขา ... คุณอาจประหยัดแบนด์วิดท์ด้วยใช่ไหม?


2

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


1

ในภาษาวงเล็บปีกกาบางภาษาเช่น C # คุณสามารถละเว้นวงเล็บปีกกาที่มีคำสั่ง if หากมีความยาวเพียงสองบรรทัด ตัวอย่างเช่น...

ถ้า ([เงื่อนไข])
    [รหัส]

แต่คุณทำสิ่งนี้ไม่ได้ ...

ถ้า ([เงื่อนไข])
    [รหัส]
    [รหัส]

บรรทัดที่สามจะไม่เป็นส่วนหนึ่งของคำสั่ง if มันเจ็บการอ่านและสามารถแนะนำบั๊กได้ง่ายและหายาก

ด้วยเหตุผลเดียวกันฉันปิดแท็กทั้งหมด แท็กเช่นแท็ก img ยังคงต้องปิด แต่ไม่ได้มีแท็กปิดแยกต่างหาก


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

ฉันจำได้ว่ามีปัญหากับ IE7 เมื่อไม่กี่ปีก่อนที่ฉันพบแท็ก li ที่เปิดในบรรทัดแยกจากข้อความที่มีอยู่โดยไม่มีการปิด li, IE7 ปฏิบัติกับกระสุนทั้งหมดเหมือนกระสุนนัดใหญ่ การใส่แท็กและข้อความในหนึ่งบรรทัดหรือปิดแท็กจะช่วยแก้ไขปัญหาได้ ฉันดูเหมือนจะไม่สามารถทำซ้ำได้ในขณะนี้ดังนั้นจึงอาจมีบางอย่างที่เกี่ยวข้องกับ CSS ในการเล่น แต่ฉันจะไม่โทษคุณที่ทำสิ่งนี้ในฐานะ "ฉันมีแฟน ... ในแคนาดา!" เรื่องราว
MiguelR

0

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

ด้วยเหตุนี้ฉันจึงรวมแท็กปิดที่เป็นตัวเลือกเสมอ - ตามทฤษฎีที่หน้าของฉันอาจแสดงผลได้เร็วขึ้นเนื่องจากฉันสร้างงานให้กับตัวแยกวิเคราะห์ HTML ของเบราว์เซอร์น้อยลง


1
ฉันไม่เห็นด้วย; ความคิดของรูปแบบที่ดีเมื่อเทียบกับความถูกต้องเป็นแนวคิดที่ใช้ XML เท่านั้นและจะกลายเป็นที่ไม่เกี่ยวข้องเมื่อคุณมีองค์ประกอบที่แท็กใกล้จะต้องห้าม
ริชาร์ด JP Le Guen

1
ฉันเข้าใจว่า แต่องค์ประกอบ DOM ที่แสดงผลมีทั้งจุดเริ่มต้นและจุดสิ้นสุดแม้ว่าแท็ก HTML ของคุณจะไม่ หากคุณรวม<li>แท็กที่ไม่มีแท็กปิดในบางจุดเบราว์เซอร์จะต้องตัดสินใจว่าองค์ประกอบจะสิ้นสุดที่ใดและทำราวกับว่าคุณใส่แท็กสิ้นสุดที่จุดนั้น นี่อาจเป็นตรรกะจำนวนเล็กน้อย แต่ "บางคน" ยังคงมากกว่า "ไม่มี" และฉันไม่คิดว่ามันไม่มีเหตุผลที่จะสมมติว่าการไม่ใส่แท็กปิดท้ายที่เป็นทางเลือกจะทำให้เบราว์เซอร์ทำงานได้มากกว่าการรวมไว้ด้วย
Joel Mueller

มันเป็นจุดที่น่าสนใจ แต่ฉันก็ยังไม่เห็นด้วย แท็กใกล้จะเป็นตัวเลือกที่พวกเขาจะต้องและทำให้นัยตามกฎการตรวจสอบ ... ดังนั้นเมื่อแยกวิเคราะห์ถึงจุดที่มีมีจะเป็นแท็กปิดตามการตรวจสอบไม่ว่าจะเป็นที่ถกเถียงกันอยู่ว่างานของการบริโภค แท็กปิด (เมื่อมี) จะช้าลงไหม
ริชาร์ด JP Le Guen

@Richard - ฉันเดาว่าขึ้นอยู่กับการนำไปใช้งานจริงในเบราว์เซอร์ที่เฉพาะเจาะจง แต่ฉันมีความยากลำบากในการนำเสนอความคิดที่ชัดเจนเกี่ยวกับตำแหน่งที่คุณต้องการให้องค์ประกอบสิ้นสุดจะแย่ลงสำหรับประสิทธิภาพมากกว่าการบอกเบราว์เซอร์ คุณ.
Joel Mueller

@ RichardJPLeGuen ฉันเดาว่าทุกอย่างขึ้นอยู่กับว่ากฎมีลักษณะอย่างไร เมื่อคุณปิด</table>และสแต็คของคุณมีแล้วคุณสามารถเพียงแค่ปิดทุกอย่างจนกว่าคุณจะตรงกับ<table><tbody><tr><td> <table>ในทำนองเดียวกันสำหรับการเปิด<p>ในบริบทที่ไม่ใช่นาฬิกา แต่อาจมีกรณีที่ยากกว่านี้ฉันไม่รู้
maaartinus

-1

ทำทุกสิ่งที่คุณรู้สึกว่าทำให้โค้ดอ่านง่ายและบำรุงรักษาได้มากขึ้น

ส่วนตัวผมมักจะมีแนวโน้มที่จะปิด<td>และแต่ฉันจะไม่รำคาญกับ<tr><li>


1
ฉันหวังว่าจะได้รับคำแนะนำเกี่ยวกับการตัดสินใจออกแบบต้นฉบับและพวกเขาจะทำxถ้าพวกเขาทำได้
Ian Boyd

อะไรคือความแตกต่างระหว่าง<td>และ<li>ที่ทำให้คุณไม่ต้องกังวลกับ<li>? สำหรับฉันมันมีความแตกต่างเล็กน้อย
ghoppe

ไม่มีความแตกต่างทางเทคนิคมันเป็นเรื่องส่วนตัว ฉันรู้สึกว่าฉันสามารถอ่าน HTML ได้ดีขึ้นถ้าฉันปิด td และ tr แต่ฉันไม่เคยรู้สึกต้องการลี่
Matthew Wilson

-2

สำหรับประเภทการปิดที่ต้องห้ามใช้ไวยากรณ์เช่น: <img />ด้วยการ/>เพื่อปิดแท็กซึ่งเป็นที่ยอมรับใน xml


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