Kendiliğinden kapanan komut dosyası öğeleri neden çalışmıyor?


1346

Tarayıcıların doğru tanımamasının nedeni nedir:

<script src="foobar.js" /> <!-- self-closing script element -->

Sadece bu tanınır:

<script src="foobar.js"></script>

Bu XHTML desteği kavramını bozuyor mu?

Not: Bu ifade en azından tüm IE (6-8 beta 2) için doğrudur.


12
Chrome ve Opera'da çalışıyor
corymathews

46
Chrome'un bazı yeni sürümleri bunu kırmış gibi görünüyor, kendi kendine kapanan komut dosyası etiketleri artık Chrome'da çalışmıyor
Adam Ness

13
Sadece komut dosyası etiketleri değil. Kendiliğinden kapanan div etiketlerinin de işe yaradığına inanmıyorum.
DOK

6
Temmuz 2011 itibariyle Chrome ve Firefox'ta bu sorun var. "Bu bir hata değil, bir özellik" - gerçekten sinir bozucu.
Martin Konicek

Yanıtlar:


481

XHTML 1 spesifikasyonu şunları söylüyor:

С.3. Eleman Minimizasyonu ve Boş Eleman İçeriği

İçerik modeli olmayan bir öğenin boş bir örneği verildiğinde EMPTY(örneğin, boş bir başlık veya paragraf) simge durumuna küçültülmüş formu (örneğin kullan <p> </p>ve kullan <p />) kullanmayın .

XHTML DTD komut dosyası öğelerini şu şekilde belirtir:

<!-- script statements, which may include CDATA sections -->
<!ELEMENT script (#PCDATA)>

111
Yine de, “yapma”, “olmamalı” ile aynı değildir. Bu bir kural değildir (bölüm başlığı tarafından önerilen uyumluluk için), bir kural değildir.
Konrad Rudolph

42
Aslında, bu kısıtlama için herhangi bir kullanım bulamıyorum :) Tamamen yapay görünüyor.
Filo

22
Doğru cevap Olavk tarafından verildi. XHTML 1.0'ın Ek C'si, olayların olmaları nedeni değil, sadece olayların nasıl çalışılacağıdır.
hsivonen

32
Şartnamenin normatif bir parçası değildir. XHTML'yi desteklemeyen
Kornel

12
Sorun <script />, spesifikasyonun buna izin vermemesi değil, içerik türü application / xhtml + xml değilse tarayıcıların bunu "etiket dışı çorba" olarak yorumlamamasıdır. Bkz. Stackoverflow.com/questions/348736/… @shabunc: tarayıcılar bunu anlıyor gibi görünebilir , ancak gerçekte olan şey, filonun alıntısını yorumlamaktan dolayı <p /> 'den sonra içeriği paragrafın içine koymaktır. p> boş değildir, kendi kendine kapanamaz. XHTML 1.1, bu olabilir kendi kendine kapanan ol.
Joe

241

Brad ve squadette söylediklerine eklemek için kendi kendine kapanan bir XML sözdizimi <script />aslında olduğu doğru XML, ancak bunun için pratikte işe, web sunucusu da benzeri bir XML mime ile düzgün oluşturulmuş XML olarak belgelerinizi göndermesi gerekir application/xhtml+xmlHTTP içinde Content-Type başlığı (ve değil olarak text/html).

Ancak, bir XML mimetype göndererek sadece seven IE7, tarafından ayrıştırılır olmamak sayfalarınızı neden olacaktır text/html.

Gönderen w3 :

Özetle, XHTML Ailesi belgeleri için 'application / xhtml + xml' kullanılmalıdır ve 'text / html' kullanımı HTML uyumlu XHTML 1.0 belgeleriyle sınırlı olmalıdır. 'application / xml' ve 'text / xml' de kullanılabilir, ancak uygun olduğunda bu genel XML medya türleri yerine 'application / xhtml + xml' kullanılmalıdır.

Bunu birkaç ay önce şaşırmıştım ve tek uygulanabilir (FF3 + ve IE7 ile uyumlu) çözüm eski <script></script>sözdizimini text/html(HTML sözdizimi + HTML mimetype) ile kullanmaktı.

Sunucunuz text/htmltürünü HTTP başlıklarında gönderirse, aksi halde düzgün bir şekilde oluşturulmuş XHTML belgelerinde bile, FF3 + HTML işleme modunu kullanır, bu <script />da çalışmaz (bu bir değişikliktir, Firefox daha önce daha az katıydı).

Bu, http-equivmeta öğeler, XML prolog veya belgenizdeki doktrinle ilgilenmeden bağımsız olarak gerçekleşir - text/htmlÜstbilgi alındığında Firefox dalları , HTML veya XML ayrıştırıcının belgenin içine bakıp bakmadığını ve HTML ayrıştırıcısının anlamadığını belirler <script />.


3
IE7 için destek bırakırsanız, metin / xml göndermenin <script /> için geniş tarayıcı desteği alacağı sonucuna varmak doğru mu?
Chris Moschini

7
Kısacası, <script /> yalnızca sayfanın MIME türünüz xhtml / xml ise çalışır. Normal metin / html sayfaları için çalışmaz. VE "xhtml / xml" MIME türünü kullanmaya çalışırsak IE uyumluluğunu bozar. Özetlemek için, Sakin Olun ve <script> ... </script>
Kullanın

1
Mükemmel açıklama. Dikkat edilmesi gereken bir diğer nokta, Firefox'un .htmlbenzer nedenlerden dolayı meta etiketlerden bağımsız olarak etiket çorbası olarak işlenmiş yerel dosyalara sahip olacağıdır. XHTML dosyaları için, Firefox dosyaları yalnızca adlandırıldıklarında buna göre oluşturur .xhtml.
alecov

@ChrisMoschini. Muhtemelen, ama kullanın application/xhtml+xml, kullanmayın text/xml.
TRiG

166

Herkesin merak etmesi durumunda, nihai neden HTML'nin aslında XML'in garip ağabeyi olan SGML'nin bir lehçesi olmasıydı. SGML-topraklarında, elemanlar DTD'de kendiliğinden kapanan (ör. BR, HR, INPUT), dolaylı olarak kapatılabilir (örn. P, LI, TD) veya açıkça kapatılabilir (örn. TABLO, DIV, SCRIPT) olarak belirtilebilir. XML'in elbette bunun bir konsepti yoktur.

Modern tarayıcılar tarafından kullanılan etiket çorbası ayrıştırıcıları, bu ayrıştırma modeli artık saf SGML olmasa da bu mirastan evrimleşti. Ve elbette, özenle hazırlanmış XHTML'niz, XML mime türüyle göndermediğiniz sürece, kötü yazılmış SGML'den ilham alan etiket çorbası olarak kabul edilir. Bu yüzden ...

<p><div>hello</div></p>

... tarayıcı tarafından şu şekilde yorumlanır:

<p></p><div>hello</div><p></p>

... DOM'a kod yazmayı denediğinizde sizi uydurabilen hoş bir hatanın tarifi.


4
Merak ediyorum. tarayıcı neden bu şekilde yorum yapmayı seçiyor?
Ahmed Aeon Axan

32
@AhmedAeonAxan: PÖğe DIVöğeleri içeremez (bu geçersiz HTML'dir ), bu nedenle tarayıcı açılış etiketinden önce öğeyi örtük olarak kapatır P("örtük olarak kapatılabilir" olarak tanımlanır) DIV. Ancak, tarayıcılar bu açıdan farklı davranma eğilimindedirler (geçersiz HTML'lerde olduğu gibi).
MrWhite

5
@ColeJohnson Hayır, bu etiket çorbası değil; greim, geçerli ve geçersiz HTML arasındaki sınırı karıştırıyor. Etiket çorba, yazarlar kurallara uymadığında elde ettiğiniz şeydir, çünkü tarayıcılar hata düzeltme kullanır. </p>Öte yandan eksik bir bitiş etiketi aslında HTML tanımının bir parçasıdır!
Bay Lister

3
@MrLister - Sırala. "Etiket çorbası" nasıl yazıldığını değil, HTML'nin nasıl ayrıştırıldığını açıklar. Bu, HTML anlamında kullanılan tarayıcıların farklı stratejilerini tanımlamak için kullanılan bir terimdir ve katı XML ayrıştırmasının aksine durur. XML ayrıştırma işlemine yalnızca XML mime türleri için izin verilir, ancak daha önce yaygın olarak kullanılmayanlar için tarayıcılar, başka türlü geçerli belgeler için bile çeşitli "etiket çorbası" şemalarına geri döndü.
greim

8
HTML5 aslında geçersiz etiketlemeyi işlemek için tutarlı bir yol da dahil olmak üzere 'etiket çorbası'nın ayrıştırılmasını standartlaştırdı . O zamana kadar, tarayıcılar geçersiz işaretleme ile ne yapılacağını kendi başlarına bulmak zorunda kaldı ve tutarsızlıklara neden oldu. Geçerli tarayıcılardaki HTML ayrıştırıcı, şimdiye kadar yazılmış en gelişmiş yazılım parçalarından biridir. Şaşırtıcı derecede hızlı ve tutarlı sonuçlar üreten herhangi bir girdi ile başa çıkabilir.
Stijn de Witt

161

Diğerleri "nasıl" yanıtını verdiler ve spesifikasyonlardan alıntı yaptılar. İşte <script/>hata raporları ve posta listelerine birkaç saat geçtikten sonra "neden hayır " ın gerçek hikayesi .


HTML 4

HTML 4, SGML'ye dayanmaktadır .

SGML bazılarına sahiptir shorttags gibi <BR//, <B>text</>, <B/text/, veya <OL<LI>item</LI</OL>. XML ilk formu alır, sonunu ">" (SGML esnektir) olarak yeniden tanımlar, böylece olur <BR/>.

Ancak HTML yüzden redfine vermedi <SCRIPT/> gerektiği anlamına <SCRIPT>> .
(Evet, '>' içeriğin bir parçası olmalı ve etiket hala kapalı değil .)

Açıkçası, bu XHTML uyumlu değil ve olacak birçok site kırmak (zaman tarayıcılar tarafından yeterli olgun olduğumuzu bakım bu konuda böylece) kimse shorttags uygulanan ve şartname onlara karşı tavsiyede .

Etkili bir şekilde, tüm 'çalışan' kendinden uçlu etiketler, teknik olarak uygun olmayan ayrıştırıcılarda yasaklanmış bitiş etiketine sahip etiketlerdir ve aslında geçersizdir. HTML uyumlu hale getirerek XHTML'ye geçişe yardımcı olmak için bu hack ile gelen W3C idi .

Ve <script>bitiş etiketi yasaktır .

"Kendiliğinden biten" etiketi HTML 4'teki bir hack'tir ve anlamsızdır.


HTML 5

HTML5'in beş tür etiketi vardır ve yalnızca 'geçersiz' ve 'yabancı' etiketlerin kendi kendine kapanmasına izin verilir .

Çünkü <script>geçersiz değildir ( içeriği olabilir ) ve yabancı değildir (MathML veya SVG gibi), <script>nasıl kullandığınızdan bağımsız olarak kendi kendine kapanamaz .

Ama neden? Yabancı olarak kabul edemez, özel bir durum veya başka bir şey yapamazlar mı?

HTML 5 amaçları olması geriye dönük olarak uyumlu olan uygulamaları Bu SGML veya XML dayanmayan HTML 4 ve XHTML 1'in; sözdizimi temel olarak uygulamaların belgelenmesi ve birleştirilmesi ile ilgilidir. (Bu yüzden geçersiz HTML4 olmasına rağmen <br/> <hr/>vb. Geçerli HTML 5'tir.)

Kendi kendine kapanma <script>, uygulamaların farklı olduğu etiketlerden biridir. Bu Chrome, Safari iş için kullanılan , ve Opera ; bence hiçbir zaman Internet Explorer veya Firefox'ta çalışmadı.

Bu, HTML 5 hazırlanırken ve tarayıcı uyumluluğunu bozduğu için reddedildiğinde tartışıldı . Kendiliğinden kapanan komut dosyası etiketinin bulunduğu web sayfaları eski tarayıcılarda (hiç değilse) doğru görüntülenmeyebilir. Başka teklifler de vardı , ancak uyumluluk sorununu da çözemezler.

Taslak yayınlandıktan sonra, WebKit ayrıştırıcıyı uyumlu olacak şekilde güncelledi.

<script>HTML 4 ve XHTML 1 ile geriye dönük uyumluluk nedeniyle HTML 5'te kendi kendine kapanma gerçekleşmez.


XHTML 1 / XHTML 5

Ne zaman gerçekten XHTML olarak hizmet vermiş <script/>olduğu gerçekten kapalıdır diğer cevaplar ifade etmişlerdir.

Bunun dışında Spec diyor o gerektiğini HTML olarak görev yaparken çalıştım:

XHTML Belgeleri ... çoğu HTML tarayıcısı ile uyumlu olduğu için "Media / html" [RFC2854] İnternet Ortam Türü ile etiketlenmiş olabilir.

Peki ne oldu?

İnsanlar Mozilla sorulan için Firefox ayrıştırmak izin gibi belgeleri uygun XHTML bakılmaksızın (olarak bilinen Belirtilen içerik başlığının içeriği koklama ). Bu, kendi kendine kapanan komut dosyalarına izin verirdi ve web barındırıcıları doğru başlığı sunmak için yeterince olgun olmadığından içerik koklaması yine de gerekliydi ; IE de iyiydi .

Eğer ilk tarayıcı savaş IE 6 ile bitmiyor, XHTML de listede olmuş olabilir. Ama bitti. IE 6'nın XHTML ile ilgili bir sorunu var. Aslında IE destek vermedi Doğru MIME türü hiç zorlayarak, herkesi kullanmak text/htmlIE düzenlenen çünkü XHTML için önemli bir pazar payına bir on yıl boyunca.

Ve ayrıca içerik koklama olabilir gerçekten kötü ve insanların söylediğini kesilmelidir .

Son olarak, W3C'nin XHTML'nin koklanabilir olduğu anlamına gelmediği ortaya çıktı : belge hem HTML hem de XHTML ve Content-Typekurallar. Biri "sadece bizim spec izleyin" ve pratik olanı görmezden duran sağlam olduğunu söyleyebiliriz . Sonraki XHTML sürümlerinde devam eden bir hata .

Her neyse, bu karar Firefox için konuyu çözdü . Chrome'un doğması 7 yıl önceydi ; başka önemli bir tarayıcı yoktu. Böylece karar verildi.

Yalnızca doküman türünün belirtilmesi, aşağıdaki spesifikasyonlar nedeniyle XML ayrıştırmayı tetiklemez.


1
@AndyE Kendiliğinden kapanan <script> yazdığınızda, o sırada büyük tarayıcılar kapalı olduğunu düşünmez ve html dizisini javascript olarak ayrıştırır ve bu da geçerli HTML5'in bu eski tarayıcılarda kırılmasına neden olur. Böylece teklif reddedilir. Bu, bağlantılı HTML5 posta listesinde açıklanmaktadır.
Sheepy

2
@AndyE: Açıkladığınız şey ileri uyumluluktur - eski kodun yeni derleyici / yorumlayıcı / ayrıştırıcı ile çalışabilmesi. Geriye dönük uyumluluk, yeni kodun eski derleyici / yorumlayıcı / ayrıştırıcıyla çalışabilmesidir. Yani evet, geriye dönük uyumluluk sorunu vardı, aksi takdirde yeni özellik göz önünde bulundurularak yazılan sayfalar eski tarayıcılarda işe yaramayacaktır (ve evet, eski tarayıcılarda mümkün olduğunca yeni kod çalışması yapmak için web programlama geleneği).
slebetman

3
@Dmitry Gerçek şu ki, kendi kendine kapalı betiğe izin vermemek tek yönlü bir sokak. Gibi bağlantılı , kendinden kapalı <script> kıracak tüm oyun konsolları, internet TV, IE 11 - tarayıcıları, kullanıcıların sadece boş bir sayfa göreceksiniz yeni kurumsal Win7 PC, milyonlarca Java çalışma zamanı veya akıllı telefon milyarlarca. Çoğu cihazda çoğu dilde WebView'i yükseltebilir misiniz? HTML5 bunu deneseydi, XHTML2 gibi başarısız olurlardı.
Sheepy

6
çok yetersiz cevap
Kamil Tomšík

2
Biraz düzeltme: HTML'de kendi kendine kapalı gibi görünen etiketler, isteğe bağlı bitiş etiketlerine sahip olanlar değil, yasaklanmış bitiş etiketlerine (boş veya geçersiz etiketler) sahip etiketlerdir. İçeriği olabileceğinden , veya gibi isteğe bağlı bitiş etiketlerine sahip etiketler 'kendiliğinden kapatılamaz' , bu nedenle kod , bu öğede izin veriliyorsa, (hatalı biçimlendirilmiş) bir başlangıç ​​etiketinden ve sonraki içerikten başka bir şey değildir. , sonunda sona erer. <p><li><p/>
Ilya Streltsyn

44

Internet Explorer 8 ve öncesi XHTML ayrıştırmayı desteklemez. Bir XML bildirimi ve / veya bir XHTML dokümanı kullansanız bile, eski IE yine de belgeyi düz HTML olarak ayrıştırır. Ve düz HTML'de, kendi kendine kapanan sözdizimi desteklenmez. Sondaki eğik çizgi yok sayılır, açık bir kapanış etiketi kullanmanız gerekir.

IE 9 ve üstü gibi XHTML ayrıştırma desteğine sahip tarayıcılar bile , belgeyi XML içerik türüyle sunmadığınız sürece belgeyi HTML olarak ayrıştıracaktır. Ancak bu durumda eski IE belgeyi hiç göstermez!


9
"IE, XHTML ayrıştırmayı desteklemiyor." bu yazıldığı andaki IE sürümleri için doğruydu, ancak artık doğru değil.
EricLaw

@EricLaw, IE'nin hangi sürümünün bunu düzelttiğini açıklayabilir misiniz? (ve herhangi bir özel koşul (ör. geçerli bir doküman türü gereklidir))
scunliffe

2
@scunliffe IE9, XHTML için tam desteğe sahip ilk sürümdü. blogs.msdn.com/b/ie/archive/2010/11/01/…
EricLaw

28

Yukarıdaki kişiler sorunu hemen hemen açıkladılar, ancak işleri açıklığa kavuşturabilecek bir şey, insanlar <br/>HTML belgelerinde her zaman kullansa da /, böyle bir pozisyonda herhangi bir temelde göz ardı edilir ve sadece yapmaya çalışırken kullanılır. XML ve HTML olarak ayrıştırılabilir bir şey. <p/>foo</p>Örneğin, deneyin ve düzenli bir paragraf olsun.


22

Kendiliğinden kapanan komut dosyası etiketi çalışmaz, çünkü komut dosyası etiketi satır içi kod içerebildiğinden ve HTML bir özelliğin varlığına bağlı olarak bu özelliği açıp kapatacak kadar akıllı değildir.

Öte yandan, HTML'nin dış kaynaklara referanslar eklemek için mükemmel bir etiketi vardır: <link>etiket ve kendi kendine kapanabilir. Stil sayfalarını, RSS ve Atom yayınlarını, kanonik URI'leri ve diğer tüm güzellikleri dahil etmek için zaten kullanılıyor. Neden JavaScript değil?

Komut dosyası etiketinin kendi içinde olmasını istiyorsanız bunu söylediğim gibi yapamazsınız, ancak akıllı bir seçenek olmasa da bir alternatif var. Kendiliğinden kapanan bağlantı etiketini kullanabilir ve JavaScript'inize, bir tür metin / javascript ve komut dosyası olarak aşağıdaki gibi bir şey vererek bağlayabilirsiniz:

<link type="text/javascript" rel ="script" href="/path/tp/javascript" />

4
Bunu sevdim, neden "akıllı" değil?
Josh M.

5
Tam olarak bir komut dosyası yükleme işini gerçekleştirmek için önceden tanımlanmış bir komut dosyası etiketi olduğundan .. Neden başka bir şey kullanarak konuları karıştırın ki? Çivi çekiç çekiç .. Bir ayakkabı kullanmak akıllıca olur mu?
Dave Lawrence

8
@daveL - Ve <style>etiketlerimiz var, ancak harici CSS dosyaları için bağlantı etiketleri kullanıyoruz. Bağlantı etiketinin tanımı: "<link> etiketi, belge ile harici kaynak arasındaki bağlantıyı tanımlar." Bağlantı etiketinin harici CSS veya JS için kullanılması mükemmel mantıklı görünüyor ... bunun için ... harici dosyalarda bağlantı kurmak için. Not bu şekilde olsaydı Spec / çapraz browserness / vs bahsetmiyorum, sadece CSS ve JS hem de getirdiği için bağlantı etiketleri kullanarak mantıksal doğası üzerinde yorum ki ... aslında anlamda bir çok yapar . Ayakkabının [analoji] uygun olduğundan emin değilim.
Jimbo Jonny

20

XML ve XHTML'den farklı olarak HTML'nin kendi kendine kapanan sözdizimi hakkında bilgisi yoktur. XHTML'yi HTML olarak yorumlayan tarayıcılar, /karakterin etiketin kendi kendine kapanması gerektiğini gösterdiğini bilmez ; bunun yerine boş bir özellik olarak yorumluyorlar ve ayrıştırıcı hala etiketin 'açık' olduğunu düşünüyor.

Tıpkı <script defer>olarak kabul edilir <script defer="defer">, <script />olarak kabul edilir <script /="/">.


33
Bu açıklama zariftir, aslında yanlıştır. Doğru olsaydı, DOM'daki kod öğesi için bir "/" özniteliği olurdu. IE, Firefox ve Opera'yı kontrol ettim ve hiçbiri aslında böyle bir özellik içermiyor.
Alohci

11
/ geçerli bir öznitelik adı karakteri değil, bu nedenle atıldı. Aksi takdirde bu açıklama oldukça açıktır.
koridorlar - Monica

1
Aslında, bazı HTML ayrıştırıcıları (ve özellikle doğrulayıcılar) /, NET (Null End Tag) yapısının bir parçası olarak yorumlayabilir .
IllidanS4 Monica'nın

18

Internet Explorer 8 ve daha eski sürümler, XHTML için uygun MIME türünü desteklemez application/xhtml+xml. XHTML'yi text/html, Internet Explorer'ın bu eski sürümlerinde herhangi bir şey yapmak için yapmanız gereken olarak sunuyorsanız , HTML 4.01 olarak yorumlanacaktır. Kısa sözdizimini yalnızca kapanış etiketinin atlanmasına izin veren herhangi bir öğeyle kullanabilirsiniz. Bkz. HTML 4.01 Spesifikasyonu .

XML 'kısa form', / adında bir öznitelik olarak yorumlanır (bu, (eşittir işareti olmadığından), "/" örtük değerine sahip olarak yorumlanır. HTML 4.01'de bu kesinlikle yanlıştır - bildirilmemiş niteliklere izin verilmez - ancak tarayıcılar bunu yoksayar.

IE9 ve üzeri XHTML 5 desteği ile servis edilir application/xhtml+xml.


IE 9, XHTML'yi destekler ve IE artık% 51'den fazla değildir. Cevabınızı güncelleyebilir misiniz?
Damian Yerrick

5

Çünkü SCRIPT TAG bir VOID ELEMENT değildir.

Bir In HTML Belgesi - GEÇERSİZDİR ELEMANLARI yok hiç bir "kapatma etiketi" gerekiyor!

In xhtml , her şey Jenerik olduğunu bu nedenle tüm ihtiyaç sonlandırma örneğin bir "kapanış etiketi"; Br, basit bir satır sonu, <br></br>veya steno dahil <br /> .

Ancak, Komut Dosyası Öğesi hiçbir zaman geçersiz veya parametrik bir Öğe değildir, çünkü her şeyden önce komut dosyası etiketi Veri Tanımı bildirimi değil, Tarayıcı Talimatıdır.

Prensip olarak, Anlambilimsel Fesih Talimatı, örneğin bir "kapanış etiketi", yalnızca anlambilimi bir sonraki etiket tarafından sonlandırılamayan talimatları işlemek için gereklidir. Örneğin:

<H1>anlambilim aşağıdakilerle sona erdirilemez <P>çünkü kendi anlambiliminin tamamını geçersiz kılacak ve dolayısıyla önceki H1 komut setini sonlandıracak kadar taşımaz. O kırmak mümkün olacak olsa akışı yeni bir paragraf hattına, değil "yeterince güçlü" Mevcut yazı tipi boyutunu ve stil line-height geçersiz kılmak için bir akış aşağı dökülen yani H1 sızan (P buna sahip olmaması nedeniyle ).

"/" (Sonlandırma) sinyallemesi bu şekilde ve neden icat edilmiştir.

Gibi bir genel açıklama yok sonlandırma Etiketi < />, karşılaşılan çağlayan herhangi bir tek düşüş için yeterli olurdu, örneğin: <H1>Title< />ama her zaman böyle değil, çünkü biz de Stream: split çok sayıda ara etiketleme "iç içe" yetenekli olmak istiyoruz sarmadan / başka bir kaskat üzerine düşmeden önce sellere. Sonuç olarak < />, gibi bir genel sonlandırıcı bir mülkün sonlandırılacağı hedefi belirleyemez. Örneğin: <b>kalın <i>kalın italik < /> italik </> normal. Kuşkusuz niyetimizi doğru şekilde yerine getiremez ve büyük olasılıkla cesur kalın-italik kalın normal olarak yorumlayacaktır .

Bu nasıl nosyonu bir sarıcı yani., Konteyner doğdu. (Bu kavramlar o kadar benzerdir ki ayırt etmek imkansızdır ve bazen aynı eleman her ikisine de sahip olabilir. <H1>Aynı anda hem sarıcı hem de kaptır <B>. Düz, anlambilimsiz bir kaba ihtiyacımız olacak. Ve elbette bir DIV Elementinin icadı geldi.

DIV elemanı aslında 2BR-Konteynerdir. Tabii ki CSS'nin gelmesi tüm durumu tuhaf hale getirdi ve dolaylı olarak birçok büyük sonuçla büyük bir karışıklığa neden oldu.

CSS ile yeni icat edilmiş bir DIV'nin BR öncesi ve sonrası doğal davranışını kolayca geçersiz kılabildiğinden, genellikle "hiçbir şey yapma kabı" olarak adlandırılır. Hangi, doğal olarak yanlış! DIV'ler blok öğelerdir ve hem uç sinyallemeden önce hem de sonra akış çizgisini doğal olarak keser. Yakında WEB, DIV-itis sayfasından acı çekmeye başladı. Çoğu hala.

Herhangi bir HTML Etiketinin yerel davranışını tamamen geçersiz kılma ve tamamen yeniden tanımlama yeteneğiyle CSS'in gelmesi, bir şekilde HTML varlığının tüm anlamını karıştırmayı ve bulanıklaştırmayı başardı ...

Aniden tüm HTML etiketleri eski gibi göründü, tahrif edildi, orijinal anlamlarından, kimliklerinden ve amaçlarından çıkarıldı. Her nasılsa, artık gerekli olmadıkları izlenimini edinirsiniz. Söylemek: Tüm veri sunumu için tek bir kapsayıcı etiket yeterli olacaktır. Gerekli özellikleri eklemeniz yeterlidir. Bunun yerine neden anlamlı etiketler olmasın; Etiket adlarını gittikçe icat edin ve CSS'nin geri kalanını rahatsız etmesine izin verin.

Xhtml böyle doğdu ve elbette yeni gelenler ve neyin ne olduğu ve hepsinin lanet amacı nedir, çarpık bir vizyon tarafından ödenen büyük künt. W3C World Wide Web'den Ne Yanlış Gittiler yoldaşlarına gitti? !!

HTML amacı akarsu insan alıcıya anlamlı veriler.

Bilgi vermek.

Resmi kısım sadece bilgi dağıtımının netliğine yardımcı olmak için vardır. xhtml, bilgilere en ufak bir önem vermez. - Buna göre, bilgi kesinlikle önemsizdir.

Buradaki en önemli şey, xhtml'in sadece bazı genişletilmiş HTML'nin bir sürümü olmadığını , xhtml'in tamamen farklı bir canavar olduğunu bilmek ve anlayabilmektir ; gerekçesiyle; ve bu yüzden onları ayrı tutmak akıllıca olur.


3

'Gerçek XHTML', 'sahte XHTML' ve HTML arasındaki farkın yanı sıra sunucu tarafından gönderilen MIME türünün önemi burada zaten iyi açıklanmıştı . Şu anda denemek istiyorsanız, yetenekli tarayıcılar için kendi kendine kapalı komut dosyası etiketi de dahil olmak üzere canlı önizlemeli basit düzenlenebilir snippet:

div { display: flex; }
div + div {flex-direction: column; }
<div>Mime type: <label><input type="radio" onchange="t.onkeyup()" id="x" checked  name="mime"> application/xhtml+xml</label>
<label><input type="radio" onchange="t.onkeyup()" name="mime"> text/html</label></div>
<div><textarea id="t" rows="4" 
onkeyup="i.src='data:'+(x.checked?'application/xhtml+xml':'text/html')+','+encodeURIComponent(t.value)"
><?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
[<!ENTITY x "true XHTML">]>
<html xmlns="http://www.w3.org/1999/xhtml">
<body>
  <p>
    <span id="greet" swapto="Hello">Hell, NO :(</span> &x;.
    <script src="data:text/javascript,(g=document.getElementById('greet')).innerText=g.getAttribute('swapto')" />
    Nice to meet you!
    <!-- 
      Previous text node and all further content falls into SCRIPT element content in text/html mode, so is not rendered. Because no end script tag is found, no script runs in text/html
    -->
  </p>
</body>
</html></textarea>

<iframe id="i" height="80"></iframe>

<script>t.onkeyup()</script>
</div>

Hello, true XHTML. Nice to meet you!Aşağıdaki textarea'yı görmelisiniz .

Aciz tarayıcılar için, metin alanının içeriğini kopyalayabilir ve .xhtml(veya .xht) uzantılı bir dosya olarak kaydedebilirsiniz ( bu ipucu için teşekkürler Alek ).


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.