องค์ประกอบการปิดตัวเองที่ถูกต้องทั้งหมดใน XHTML คืออะไร (ตามที่เบราว์เซอร์หลักใช้)


188

องค์ประกอบการปิดตัวเองที่ถูกต้องทั้งหมด (เช่น <br/>) ใน XHTML (ถูกใช้โดยเบราว์เซอร์หลัก) คืออะไร

ฉันรู้ว่า XHTML ในทางเทคนิคอนุญาตให้องค์ประกอบใด ๆ ปิดตัวเองได้ แต่ฉันกำลังมองหารายการองค์ประกอบที่สนับสนุนโดยเบราว์เซอร์หลัก ๆ ทั้งหมด ดูhttp://dusan.fora.si/blog/self-closing-tagsสำหรับตัวอย่างของปัญหาที่เกิดจากองค์ประกอบการปิดตัวเองเช่น <div />


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

6
เหตุผลที่ยอมรับคำตอบ "ง่อย", "ไม่ถูกต้อง" นั้นเป็นเพราะมันตอบคำถามที่ kamens ถามอย่างเห็นได้ชัด เขาต้องการที่จะรู้ว่าองค์ประกอบใดบ้างที่สามารถปิดตัวเองได้เมื่อแสดง XHTML เป็นข้อความ / html โดยไม่ทำให้เกิดปัญหาการแสดงผลในเบราว์เซอร์ หน้าเว็บจำนวนมากเขียนด้วย XHTML และทำหน้าที่เป็น text / html แม้ว่ามันจะไม่ถูกต้องทางเทคนิคก็ตาม คำถามอาจได้รับการปรับปรุงด้วยการชี้แจงนี้ แต่การตอบคำถามอื่น (เกิดขึ้นเมื่อคุณทำหน้าที่เป็น application / xml หรือว่าแท็กเอกพจน์ในข้อความ / html ควรมีการปิด /) ไม่เป็นประโยชน์ในกรณีนี้
Nick Lockwood

คำตอบ:


180

เบราว์เซอร์ที่สนับสนุนทุก XHTML (Firefox, Opera, Safari, IE9 ) สนับสนุนไวยากรณ์ปิดตัวเองในทุกองค์ประกอบ

<div/>, <script/>, <br></br>ทุกคนควรจะทำงานได้ดี หากไม่มีแสดงว่าคุณมีHTML ที่มีการเพิ่ม XHTML DOCTYPE อย่างไม่เหมาะสม

DOCTYPE ไม่เปลี่ยนแปลงวิธีตีความเอกสาร เพียงชนิดไมม์ไม่

การตัดสินใจ W3C เกี่ยวกับการเพิกเฉย DOCTYPE :

HTML WG ได้กล่าวถึงปัญหานี้: ความตั้งใจคือการอนุญาตให้เบราว์เซอร์เก่า (HTML เท่านั้น) เพื่อรับเอกสาร XHTML 1.0 โดยทำตามคำแนะนำและให้บริการเป็น text / html ดังนั้นเอกสารที่ทำหน้าที่เป็น text / html จึงควรถือว่าเป็น HTML และไม่ใช่ XHTML

เป็นข้อผิดพลาดทั่วไปเนื่องจาก W3C Validator ส่วนใหญ่ไม่สนใจกฎนั้น แต่เบราว์เซอร์ปฏิบัติตามอย่างเคร่งครัด อ่าน ทำความเข้าใจ HTML, XML และ XHTMLจากบล็อก WebKit:

ในความเป็นจริงส่วนใหญ่ของเอกสาร XHTML text/htmlควรจะอยู่บนอินเทอร์เน็ตจะทำหน้าที่เป็น ซึ่งหมายความว่าพวกเขาไม่ใช่ XHTML เลย แต่จริงๆแล้ว HTML ไม่ถูกต้องซึ่งได้มาจากการจัดการข้อผิดพลาดของตัวแยกวิเคราะห์ HTML ทั้งหมด“ Valid XHTML 1.0!” ลิงก์บนเว็บกำลังพูดว่า“ HTML 4.01 ไม่ถูกต้อง!”


ในการทดสอบว่าคุณมี XHTML จริงหรือ HTML ที่ไม่ถูกต้องด้วย DOCTYPE ของ XHTML ให้ใส่สิ่งนี้ลงในเอกสารของคุณ:

<span style="color:green"><span style="color:red"/> 
 If it's red, it's HTML. Green is XHTML.
</span>

มันตรวจสอบและใน XHTML จริงมันทำงานได้อย่างสมบูรณ์แบบ (ดู: 1 vs 2 ) ถ้าคุณไม่สามารถเชื่อสายตาของคุณ (หรือไม่ทราบวิธีการตั้งค่าชนิด MIME) เปิดหน้าเว็บของคุณผ่านพร็อกซี่ XHTML

อีกวิธีในการตรวจสอบคือดูซอร์สใน Firefox มันจะเน้นเครื่องหมายทับสีแดงเมื่อไม่ถูกต้อง

ใน HTML5 / XHTML5 DOCTYPEนี้ยังไม่ได้มีการเปลี่ยนแปลงและความแตกต่างที่ชัดเจนมากขึ้นเป็นเพราะคุณไม่ได้มีการเพิ่มเติม Content-Typeเป็นกษัตริย์


สำหรับบันทึกข้อมูลจำเพาะ XHTML อนุญาตให้องค์ประกอบใด ๆ ที่จะปิดตัวเองโดยการทำ XHTML แอปพลิเคชัน XML : [เหมืองเน้นความสำคัญ]

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

มันแสดงให้เห็นอย่างชัดเจนในสเปค XHTML :

องค์ประกอบที่ว่างเปล่าจะต้องทั้ง/>มีแท็กสิ้นสุดหรือแท็กเริ่มต้นจะต้องจบลงด้วยการ ตัวอย่างเช่น<br/>หรือ<hr></hr>


7
ไม่ถูกต้อง afaik เนื่องจากใช้เวอร์ชันที่ปิดตัวเอง<script>หรือ<div>ผลลัพธ์ในการเรนเดอร์ / ตีความที่แตกต่างกัน
ZeissS

13
@ZeissS เฉพาะtext/htmlใน ใน XHTML จริงส่งไปเพราะapplication/xhtml+xmlใช้ได้ดี โปรดอ่านบทความที่ฉันเชื่อมโยงกับ (หรือ XHTML ข้อมูลจำเพาะภาคผนวก C) ก่อนที่จะทำการลงคะแนน
Kornel

3
@pornel คุณสามารถรับประกันได้ว่าการปิดแท็ก <script /> ด้วยตนเองจะทำงานในเบราว์เซอร์รุ่นเก่าได้หรือไม่ ฉันไม่คิดอย่างนั้น คุณฟังดูมีสิทธิ์และข้อมูลส่วนใหญ่ของคุณนั้นถูกต้อง แต่ประสบการณ์บอกฉันว่าแท็กสคริปต์ปิดตัวเองจะเป็นปัญหาและดีที่สุดที่จะหลีกเลี่ยงพวกเขาทั้งหมดแทนที่จะทำให้คุณปวดหัว
Metagrapher

6
@Metagrapher ถ้าเบราว์เซอร์รุ่นเก่าไม่รองรับ XHTML จริงหรือคุณไม่สามารถตั้งค่าประเภท MIMEได้มันก็จะไม่ทำงาน อย่างไรก็ตามในเบราว์เซอร์ที่รองรับ XHTML (เบราว์เซอร์หลักทั้งหมด ณ จุดนี้) ที่มีapplication/xhtml+xmlประเภท MIMEฉันสามารถรับประกันได้ว่า<script/>จะใช้งานได้ ด้วยประเภท MIME เท่านั้น
Kornel

4
@capdragon: เบราว์เซอร์รุ่นเก่าไม่รองรับ XHTML (ทำหน้าที่เป็น 'application / xhtml + xml') หากคุณส่งเอกสาร XHTML เป็น 'text / html' ดังนั้น XHTML จะแสดงผลเป็นแท็กซุป (เช่นเบราว์เซอร์แยกวิเคราะห์เป็น HTML และพิจารณาข้อผิดพลาดแท็กปิดตัวเองซึ่งกู้คืนได้อย่างสวยงาม) ตัวเลือกของคุณคือ 1. เขียน HTML 4 (ไม่ใช่ตัวเลือกที่แน่นอนหากใช้ ASP.NET ซึ่งแสดง XHTML), 2. ให้บริการ XHTML ของคุณในรูปแบบ 'application / xhtml + xml' (ต้องใช้ IE9 + และ MIME ชนิดนี้จะทำลายสคริปต์ในเบราว์เซอร์ทั้งหมด อยู่แล้วดังนั้น def ไม่ได้เป็นตัวเลือก) 3. เขียน HTML 5 ซึ่งโดยทั่วไปจะทำให้น้ำซุปแท็กมาตรฐาน :)
Triynko

41

องค์ประกอบหนึ่งที่ต้องระวังในหัวข้อนี้คือ<scriptองค์ประกอบ> หากคุณมีไฟล์ต้นฉบับภายนอกมันจะทำให้เกิดปัญหาเมื่อคุณปิดมันเอง ลองมัน:

<!-- this will not consistently work in all browsers! -->
<script type="text/javascript" src="external.js" />

สิ่งนี้จะทำงานใน Firefox แต่จะแตกใน IE6 เป็นอย่างน้อย ฉันรู้เพราะฉันวิ่งเข้าไปในนี้เมื่อตนเองอย่างกระตือรือร้นปิดองค์ประกอบทุกอย่างที่ฉันเห็น ;-)


ส่งผลกระทบต่อทุกรุ่นของ MSIE: webbugtrack.blogspot.com/2007/08/…
scunliffe

4
<script> ไม่ปิดตัวเองใน Firefox 3
hsivonen

มันเคยทำงานใน Firefox เมื่อฉันพบมัน ดูเหมือนว่ามันจะไม่ทำงานในเบราว์เซอร์ใด ๆ อีกต่อไป อาจจะสามารถทำงานในโหมดนิสัยใจคอได้หรือไม่?
Erik van Brakel

1
@erickson ทำงานได้ดีใน Firefox ถ้าคุณจะพิมพ์ MIME ของคุณถูกต้อง
Kornel

WebKit ทำต่อไปเพื่อเหตุผลที่เข้ากันได้
Yuhong Bao

35

ไวยากรณ์การปิดตัวเองทำงานกับองค์ประกอบทั้งหมดใน application / xhtml + xml ไม่รองรับองค์ประกอบใด ๆ ในข้อความ / html แต่องค์ประกอบที่“ ว่างเปล่า” ใน HTML4 หรือ“ โมฆะ” ใน HTML5 จะไม่ใช้แท็กปิดท้ายดังนั้นหากคุณใส่เครื่องหมายทับลงบนสิ่งที่ปรากฏ สนับสนุนไวยากรณ์การปิดตัวเอง


33

จากเว็บไซต์อ้างอิงของโรงเรียน W3 :

<area />
<base />
<basefont />
<br />
<hr />
<input />
<img />
<link />
<meta />

7
w3schools.com/tags/default.aspฉันเห็นแท็ก 12 แท็กลงท้ายด้วย/>:"area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "link", "meta", "param"
mpen

94
โปรดทราบว่า W3schools ไม่มีส่วนเกี่ยวข้องกับ W3C และแม้แต่ล้มเหลวในการตอบสนองต่อการแก้ไขที่ส่งโดยสมาชิก W3C
Kornel

2
บ่อยครั้งที่โรงเรียนของ w3 เกือบจะถูกต้องแล้ว วิธีที่ถูกต้องในการค้นหาองค์ประกอบที่ว่างเปล่าคือการเรียกใช้grep EMPTY xhtml1-strict.dtd | sortหรือgrep EMPTY xhtml1-transitional.dtd | sort
cayhorstmann

1
IMHO ผู้คนทุบตี W3Schools อย่างแรงเกินไป มันพิสูจน์ตัวเองแล้วว่าเป็นแหล่งข้อมูลที่ยอดเยี่ยมเมื่อคุณเริ่มการเดินทาง (!) ในหัวข้อที่คุณไม่รู้อะไรเลย
Priidu Neemre

28

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

area, base, br, col, embed, hr, img, input, keygen, link, menuitem, meta, param, source, track, wbr

commandรุ่นเก่าของสเปคยังระบุ นอกจากนี้ตามแหล่งต่าง ๆ แท็กที่ล้าสมัยหรือไม่ได้มาตรฐานดังต่อไปนี้จะเป็นโมฆะ:

basefont, bgsound, frame, isindex


10

หวังว่าจะช่วยให้ใครบางคน:

<base />
<basefont />
<frame />
<link />
<meta />

<area />
<br />
<col />
<hr />
<img />
<input />
<param />

5

สิ่งที่เกี่ยวกับ<meta>และ<link>? ทำไมพวกเขาถึงไม่อยู่ในรายการ?

กฎง่ายๆโดยย่ออย่าปิดองค์ประกอบใด ๆ ที่ตั้งใจให้มีเนื้อหาเพราะตนเองจะทำให้เกิดปัญหากับเบราว์เซอร์ไม่ช้าก็เร็ว

คนที่ปิดตัวเองโดยธรรมชาติเช่น<br>และ<img>ควรจะชัดเจน สิ่งที่ไม่ใช่ ... แค่อย่าปิดตัวเอง!


4

ครั้งสุดท้ายที่ฉันตรวจสอบสิ่งต่อไปนี้เป็นองค์ประกอบว่าง / ช่องว่างที่อยู่ใน HTML5

ใช้ได้กับผู้แต่ง: พื้นที่, ฐาน, br, col, คำสั่ง, ฝัง, แหล่งข้อมูลเหตุการณ์, ชั่วโมง, img, อินพุต, ลิงค์, เมตา, พารามิเตอร์, แหล่งที่มา

ไม่ถูกต้องสำหรับผู้แต่ง: basefont, bgsound, frame, spacer, wbr

นอกเหนือจาก HTML5 ใหม่ที่ควรจะให้แนวคิดเกี่ยวกับสิ่งที่อาจได้รับการสนับสนุนเมื่อแสดง XHTML เป็น text / html (เพียงทดสอบพวกเขาโดยตรวจสอบ DOM ที่ผลิต)

สำหรับ XHTML ทำหน้าที่เป็น application / xhtml + xml (ซึ่งทำให้เป็น XML) จะใช้กฎ XML และองค์ประกอบใด ๆ จะว่างเปล่า (แม้ว่า XHTML DTD จะไม่สามารถแสดงสิ่งนี้ได้)


4

คุณควรดูxHTML DTDพวกเขาอยู่ในรายการทั้งหมด นี่คือการตรวจสอบอย่างรวดเร็วทุกคนหลัก:

<br />
<hr />
<img />
<input />

1
แก้ไขและทำความสะอาดมาร์กอัป ระวังด้วยลิงค์ในหน้านี้พวกเขาจะโหลดช้า
E-satis

4

พวกเขากำลังเรียกว่าองค์ประกอบ "โมฆะ" ใน HTML 5 พวกเขากำลังที่ระบุไว้ในสเปคอย่างเป็นทางการ W3

องค์ประกอบที่เป็นโมฆะเป็นองค์ประกอบที่รูปแบบเนื้อหาไม่เคยอนุญาตให้มีเนื้อหาภายใต้สถานการณ์ใด ๆ

เมื่อวันที่เมษายน 2013 พวกเขาคือ:

พื้นที่, ฐาน, br, col, คำสั่ง, ฝัง, ชั่วโมง, img, ใส่, keygen, ลิงค์, เมตา, พารามิเตอร์, แหล่งที่มา, ติดตาม, wbr

ตั้งแต่เดือนธันวาคม 2018 (HTML 5.2) มีดังนี้:

พื้นที่, ฐาน, br, col, ฝัง, ชั่วโมง, img, ใส่, การเชื่อมโยง, เมตา, param, แหล่งที่มา, ติดตาม, wbr


2

อีกปัญหาแท็กปิดตัวเองสำหรับ IE คือองค์ประกอบชื่อเรื่อง เมื่อ IE (ลองใน IE7) เห็นสิ่งนี้มันจะแสดงหน้าว่างให้ผู้ใช้ อย่างไรก็ตามคุณ "ดูแหล่งที่มา" และทุกอย่างอยู่ที่นั่น

<title/>

ฉันเคยเห็นสิ่งนี้เมื่อ XSLT ของฉันสร้างแท็กปิดตัวเอง


Chromium ไม่ชอบ<title/>แท็กเช่นกัน
uınbɐɥs

2

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

<title/>

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

<script/>

นี่เป็นเรื่องใหญ่ที่ฉันเพิ่งเจอกับปัญหา เป็นเวลาหลายปีที่ฉันใช้<script/>แท็กปิดตัวเองเมื่อสคริปต์มาจากแหล่งภายนอก แต่ฉันเพิ่งเริ่มรับข้อความแสดงข้อผิดพลาด JavaScript เกี่ยวกับรูปแบบ null หลังจากการวิจัยหลายวันฉันพบว่าปัญหาคือ (ที่คาดคะเน) ว่าเบราว์เซอร์ไม่เคยไปถึง<form>แท็กเพราะไม่ทราบว่านี่เป็นจุดสิ้นสุดของ<script/>แท็ก ดังนั้นเมื่อฉันทำให้มันเป็น<script></script>แท็กแยกทุกอย่างทำงาน ทำไมหน้าเว็บที่แตกต่างกันที่ฉันทำในเบราว์เซอร์เดียวกันฉันไม่รู้ แต่มันก็เป็นเรื่องใหญ่ที่จะหาทางแก้ปัญหา!


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