XHTML'deki geçerli tüm kendiliğinden kapanan öğeler nelerdir (büyük tarayıcılar tarafından uygulandığı şekliyle)?


188

XHTML'deki (büyük tarayıcılar tarafından uygulandığı şekliyle) geçerli tüm kendi kendine kapanan öğeler (ör. <br/>) nelerdir?

XHTML'nin teknik olarak herhangi bir öğenin kendi kendine kapanmasına izin verdiğini biliyorum, ancak tüm büyük tarayıcılar tarafından desteklenen bu öğelerin bir listesini arıyorum. <Div /> gibi kendiliğinden kapanan öğelerin neden olduğu bazı sorunların örnekleri için http://dusan.fora.si/blog/self-closing-tags adresine bakın .


7
Bu varsayılan olarak XHTML'nin amaçlarından biri değil mi? XHTML'nin avantajlarından birinin HTML oluşturmak için bir XML oluşturucu kullanabileceğinizi düşündüm. Neden herhangi bir XML oluşturucu hangi etiketlerin kendi kendine kapanmasına izin verildiğinin farkında olsun ki? Çok garip.
Elijah

6
"Topal", "yanlış" cevabının kabul edilmesinin nedeni, kamens'in açıkça sorduğu sorusunu cevaplamasıdır. Tarayıcılarda oluşturma sorunlarına neden olmadan XHTML'yi metin / html olarak sunarken hangi öğelerin kendiliğinden kapatılabileceğini bilmek istiyordu. XHTML'de birçok sayfa yazılır ve teknik olarak yanlış olmasına rağmen metin / html olarak sunulur. Bu açıklama ile soru geliştirilebilir, ancak farklı bir soruyu cevaplamak (application / xml olarak hizmet verdiğinizde veya text / html'deki tekil etiketlerin kapanması gerekip gerekmediği) bu örnekte yardımcı olmaz.
Nick Lockwood

Yanıtlar:


180

XHTML'yi (Firefox, Opera, Safari, IE9 ) destekleyen her tarayıcı , her öğede kendi kendine kapanan sözdizimini destekler .

<div/>, <script/>, <br></br>Hepsi sadece para cezası çalışmalıdır. Yoksa, XHTML DOCTYPE eklenmiş bir HTML'niz var .

DOCTYPE, belgenin yorumlanma şeklini değiştirmez. Yalnızca MIME türü bunu yapar .

W3C'nin DOCTYPE'yi görmezden gelme kararı :

HTML WG bu sorunu tartıştı: amaç eski (yalnızca HTML) tarayıcıların yönergeleri izleyerek ve metin / html olarak sunarak XHTML 1.0 belgelerini kabul etmelerine izin vermekti. Bu nedenle, metin / html olarak sunulan belgelerin XHTML olarak değil HTML olarak ele alınması gerekir.

Bu çok yaygın bir tuzaktır, çünkü W3C Validator bu kuralı büyük ölçüde görmezden gelir, ancak tarayıcılar dini olarak takip eder. WebKit blogundan HTML, XML ve XHTML'yi anlama bölümünü okuyun :

Aslında, internetteki XHTML belgelerinin büyük çoğunluğu olarak sunuluyor text/html. Bu, hiç XHTML değil, aslında HTML ayrıştırıcılarının hata işlemesinde geçen geçersiz HTML oldukları anlamına gelir. Tüm bu "Geçerli XHTML 1.0!" web bağlantıları gerçekten “Geçersiz HTML 4.01!” diyor.


XHTML DOCTYPE ile gerçek XHTML veya geçersiz HTML'nizin olup olmadığını test etmek için bunu belgenize yerleştirin:

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

Bu doğrular ve gerçek XHTML'de o (bkz: mükemmel çalışıyor 1 vs 2 ). Gözlerinize inanamıyorsanız (veya MIME türlerini nasıl ayarlayacağınızı bilmiyorsanız), sayfanızı XHTML proxy'si aracılığıyla açın .

Kontrol etmenin başka bir yolu da Firefox'ta görüntüleme kaynağıdır. Geçersiz olduklarında eğik çizgileri kırmızı renkte vurgulayacaktır.

HTML5 / XHTML5'te bu değişmedi ve fark daha da net, çünkü ek bile yok DOCTYPE. Content-Typekral.


Kayıt için XHTML spesifikasyonu, XHTML'yi bir XML uygulaması yaparak herhangi bir öğenin kendi kendine kapanmasına izin verir : [benimkini vurgula]

Boş eleman etiketleri, EMPTY anahtar sözcüğü kullanılarak bildirilmiş olsun ya da olmasın, içeriği olmayan herhangi bir öğe için kullanılabilir .

Ayrıca XHTML spesifikasyonunda açıkça gösterilir :

Boş elemanlar gerekir ya bir uç etiketi veya bitmelidir başlangıç etiketine sahip />. Örneğin, <br/>veya<hr></hr>


7
Afaik'i düzeltmeyin, çünkü kendi kendine kapanan sürümleri kullanmak <script>veya <div>farklı oluşturma / yorumlamaya neden olur.
ZeissS

13
@ZeissS sadece içinde text/html. Gerçek XHTML'de, application/xhtml+xmlgayet iyi çalıştığı için gönderildi . Lütfen indirmeden önce bağlandığım makaleyi (veya XHTML spesifikasyonu Ek C) okuyun.
Kornel

3
@pornel, kendiliğinden kapanan <script /> etiketlerinin eski tarayıcılarda çalışacağını garanti edebilir misiniz? Ben öyle düşünmüyorum. Kulağa güvenilir geliyor ve bilgilerinizin çoğu doğru, ancak deneyim bana kendiliğinden kapanan komut dosyası etiketlerinin sorunlu olacağını söylüyor ve kendinize bir baş ağrısı vermek yerine tamamen bunlardan kaçınmak en iyisidir.
Metagrafçı

6
@ Eski tarayıcılar gerçek XHTML'yi desteklemiyorsa VEYA MIME türünü ayarlayamazsanız, çalışmaz. Ancak, XHTML destekli tarayıcılarda (bu noktada tüm büyük olanlar) MIME türü ileapplication/xhtml+xml<script/> çalışacağını garanti edebilirim . MIME türü ile. Sadece.
Kornel

4
@capdragon: Eski tarayıcılar XHTML'yi ('application / xhtml + xml' olarak sunulur) desteklemez. Onlara 'text / html' olarak bir XHTML belgesi gönderirseniz, XHTML etiket çorbası olarak işlenir (yani tarayıcı HTML olarak ayrıştırır ve kendiliğinden kapandığı etiket hatalarını dikkate alır). Seçenekleriniz şunlardır: HTML 4 yazın (XHTML oluşturan ASP.NET kullanıyorsanız tam olarak bir seçenek değildir), 2. XHTML'nizi 'application / xhtml + xml' olarak sunun (IE9 + gerektirir ve bu MIME türü tüm tarayıcılardaki komut dosyalarını keser neyse, bu yüzden def bir seçenek değil), 3. temelde etiket çorba standart yapan HTML 5 yazın :)
Triynko

41

Bu konuda çok dikkat edilmesi gereken bir unsur <script> elementtir. Harici bir kaynak dosyanız varsa, kendi kendine kapattığınızda sorunlara neden olur. Dene:

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

Bu Firefox'ta çalışır, ancak en azından IE6'da kırılır. Biliyorum, çünkü gördüğüm her öğeyi aşırı gayretle kendi kendine kapatırken karşılaştım ;-)


: Tüm MSIE sürümlerini etkiler webbugtrack.blogspot.com/2007/08/...
scunliffe

4
<script> Firefox 3'te kendi kendine
kapanmıyor

Karşılaştığımda Firefox'ta çalışırdım. Artık hiçbir tarayıcıda çalışmıyor gibi görünüyor. Belki sadece tuhaflık modunda çalışabilir mi?
Erik van Brakel

1
@ erickson , MIME türünüzü doğru alırsanız Firefox'ta iyi çalışır .
Kornel

WebKit uyumluluk nedeniyle bunu yapmaya devam ediyor.
Yuhong Bao

35

Kendiliğinden kapanan sözdizimi application / xhtml + xml içindeki tüm öğeler üzerinde çalışır. Metin / html'deki hiçbir öğede desteklenmez, ancak HTML4'te "boş" veya HTML5'te "boş" olan öğeler yine de bir bitiş etiketi almaz, bu nedenle bunlara eğik çizgi eklerseniz, kendi kendine kapanan sözdizimi desteklendi.


33

Gönderen W3 Okullar referans sitesi :

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

7
w3schools.com/tags/default.asp Ben ile biten 12 etiket görüyorum />:"area", "base", "basefont", "br", "col", "frame", "hr", "img", "input", "link", "meta", "param"
mpen

94
W3schools'un W3C ile bağlantılı olmadığını ve hatta W3C üyeleri tarafından gönderilen düzeltmelere yanıt veremediğini lütfen unutmayın.
Kornel

2
Sık sık olduğu gibi, w3schools neredeyse haklı. Boş öğeleri bulmanın doğru bir yolu çalıştırmaktır grep EMPTY xhtml1-strict.dtd | sortveyagrep EMPTY xhtml1-transitional.dtd | sort
cayhorstmann

1
IMHO, insanlar W3Schools'u çok zorlaştırıyor. Hakkında hiç bir şey bilmediğiniz bir konuda BAŞLATILDIĞINIZ (!) İçin harika bir kaynak olduğu kanıtlanmıştır.
Priidu Neemre

28

Daha iyi bir soru şudur: HTML modunda bile kodu etkilemeden hangi etiketler kendi kendine kapatılabilir? Cevap: yalnızca boş içeriği olan (geçersiz). HTML özelliklerine göre aşağıdaki öğeler geçersizdir:

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

Spesifikasyonun eski sürümü de listelenmiştir command. Ayrıca, çeşitli kaynaklara göre aşağıdaki eski veya standart olmayan etiketler geçersizdir:

basefont, bgsound, frame, isindex


10

Umarım bu birine yardımcı olur:

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

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

5

Ne hakkında <meta>ve <link>? Neden bu listede değiller?

Hızlı kural, içerik olması amaçlanan herhangi bir öğeyi kendi kendine kapatmayın, çünkü kesinlikle er ya da geç tarayıcı sorunlarına neden olacaktır.

Doğal olarak kendiliğinden kapanan, gibi <br>ve <img>açık olanlar olmalıdır. Olmayanlar ... sadece kendi kendine kapanma!


4

En son kontrol ettiğimde, HTML5'te listelenen boş / geçersiz öğeler şunlardı.

Yazarlar için geçerlidir: alan, taban, br, col, komut, gömme, eventsource, hr, img, giriş, bağlantı, meta, param, kaynak

Yazarlar için geçersiz: basefont, bgsound, çerçeve, boşluk bırakıcı, wbr

HTML5'te yeni olan azınlığın yanı sıra, XHTML'yi metin / html olarak sunarken desteklenebilecekler hakkında bir fikir vermelidir. (Sadece üretilen DOM'yi inceleyerek test edin.)

Uygulama / xhtml + xml (XML yapar) olarak sunulan XHTML'ye gelince, XML kuralları uygulanır ve herhangi bir öğe boş olabilir (XHTML DTD bunu ifade edemese de).


4

XHTML DTD'lere bir göz atmalısınız, hepsi listelenmiştir. İşte tüm ana olanlar hızlı bir inceleme:

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

1
Düzeltildi ve temizlenmiş işaretleme. Dikkatli bu sayfalarda bağlantılar, yavaş yüklemek için.
e-satis

4

HTML 5'te bunlara "geçersiz" öğeler denir. Bunlar resmi W3 spesifikasyonunda listelenmiştir .

Geçersiz öğe, içerik modeli hiçbir koşulda içeriğe sahip olmasına asla izin vermeyen bir öğedir.

Nisan 2013 itibariyle bunlar:

alan, bankası, komut, katıştır, saat, giriş, keygen, bağlantı, kaynak, parça, wbr

Aralık 2018 itibarıyla (HTML 5.2):

alan, bankası, gömmek, saat, giriş, bağlantı, kaynak, parça, wbr


2

IE için bir başka kendiliğinden kapanan etiket sorunu başlık öğesidir. IE (sadece IE7'de denedi) bunu gördüğünde, kullanıcıya boş bir sayfa sunar. Ancak "kaynağı görüntülemek" ve her şey var.

<title/>

Başlangıçta XSLT'm kendiliğinden kapanan etiketi oluşturduğunda gördüm.


Chromium da <title/>etiketleri sevmez .
uınbɐɥs

2

Özellikle yazdığım sayfaların çoğunun oluşturulduğundan veya etiketin içeriğinden dolayı, bu konuda aşırı büyütmeye çalışmayacağım. Kendilerini kapatarak bana sıkıntı veren sadece ikisi:

<title/>

Bunun için, her zaman ayrı bir kapanış etiketi vererek başvurdum, çünkü orada bir kez <head></head>gerçekten kodunuzu yine de çalışmak için herhangi bir messier yapmaz.

<script/>

Bu son zamanlarda sorun yaşadığım en büyük şey. <script/>Senaryo harici bir kaynaktan geldiğinde yıllarca kendiliğinden kapanan etiketler kullandım. Ancak son zamanlarda boş bir form hakkında JavaScript hata mesajları almaya başladım. Birkaç günlük araştırmadan sonra, sorunun (sözde) tarayıcının <form>etikete asla ulaşamaması olduğunu gördüm çünkü bunun etiketin sonu olduğunu fark etmedi <script/>. Ayrı <script></script>etiketler haline getirdiğimde her şey işe yaradı. Neden aynı tarayıcıda yaptığım farklı sayfalarda farklı, bilmiyorum, ama çözümü bulmak büyük bir rahatlama oldu!


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.