Mengapa elemen skrip penutup otomatis tidak berfungsi?

1346

Apa alasan browser tidak mengenali dengan benar:

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

Hanya ini yang dikenali:

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

Apakah ini mematahkan konsep dukungan XHTML?

Catatan: Pernyataan ini setidaknya benar untuk semua IE (6-8 beta 2).

dimarzionis
sumber
12
Bekerja di Chrome dan Opera
corymathews
46
Beberapa versi terbaru Chrome tampaknya telah mematahkan ini, tag skrip yang menutup sendiri tidak lagi berfungsi di Chrome
Adam Ness
13
Bukan hanya tag skrip. Saya tidak percaya bahwa tag div yang menutup sendiri juga berfungsi.
DOK
6
Pada Juli 2011, Chrome dan Firefox memiliki masalah ini. "Ini bukan bug, ini fitur" - benar-benar menjengkelkan.
Martin Konicek
4
Versi yang lebih umum dari ini ditanyakan dua hari kemudian: stackoverflow.com/questions/97522/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Jawaban:

481

Spesifikasi XHTML 1 mengatakan:

С.3 Minimisasi Elemen dan Konten Elemen Kosong

Diberikan contoh kosong elemen yang model kontennya tidak EMPTY(misalnya, judul atau paragraf kosong) tidak menggunakan formulir yang diperkecil (mis. Gunakan <p> </p>dan tidak <p />).

XHTML DTD menetapkan elemen skrip sebagai:

<!-- script statements, which may include CDATA sections -->
<!ELEMENT script (#PCDATA)>
skuadron
sumber
111
Namun, "jangan" tidak sama dengan "tidak boleh". Ini adalah pedoman (untuk kompatibilitas, seperti yang disarankan oleh judul bagian), bukan aturan.
Konrad Rudolph
42
Sebenarnya, saya tidak dapat menemukan kegunaan untuk pembatasan ini :) Sepertinya benar-benar buatan.
skuadet
22
Jawaban yang tepat diberikan oleh olavk. Apendiks C dari XHTML 1.0 bukanlah alasan mengapa segala sesuatunya seperti itu adanya - itu hanya bagaimana mengatasi apa adanya.
hsivonen
32
Ini bukan bagian normatif dari spesifikasi. Ini hanya lampiran tentang cara menangani browser yang tidak mendukung XHTML
Kornel
12
Masalahnya <script />bukan karena spesifikasi tidak mengizinkannya, tetapi browser tidak menafsirkannya sebagai "non-tag-soup" jika jenis kontennya bukan application / xhtml + xml. Lihat: stackoverflow.com/questions/348736/... @shabunc: peramban mungkin tampaknya memahaminya, tetapi yang sebenarnya terjadi adalah meletakkan konten setelah <p /> di dalam paragraf, karena menafsirkan kutipan skuadron berarti bahwa sejak < p> tidak kosong, tidak bisa menutup sendiri. Di XHTML 1.1, itu bisa ditutup sendiri.
Joe
241

Untuk menambah apa yang dikatakan oleh Brad dan skuadet, sintaksis self-closing XML <script />sebenarnya adalah XML yang benar, tetapi untuk itu dalam praktiknya, server web Anda juga perlu mengirim dokumen Anda sebagai XML yang dibentuk dengan benar dengan mimetype XML seperti application/xhtml+xmlpada HTTP. Header Jenis-Konten (dan bukan sebagai text/html).

Namun, mengirimkan mimetype XML akan menyebabkan halaman Anda tidak diuraikan oleh IE7, yang hanya disukai text/html.

Dari w3 :

Singkatnya, 'aplikasi / xhtml + xml' HARUS digunakan untuk dokumen Keluarga XHTML, dan penggunaan 'teks / html' HARUS dibatasi untuk dokumen XHTML 1.0 yang kompatibel dengan HTML. 'application / xml' dan 'text / xml' MUNGKIN juga dapat digunakan, tetapi bila perlu, 'application / xhtml + xml' HARUS digunakan daripada jenis media XML generik.

Saya bingung mengenai hal ini beberapa bulan yang lalu, dan satu-satunya solusi yang dapat dikerjakan (kompatibel dengan FF3 + dan IE7) adalah dengan menggunakan <script></script>sintaks lama dengan text/html(sintaks HTML + mimetype HTML).

Jika server Anda mengirim text/htmljenis dalam tajuk HTTP, bahkan dengan dokumen XHTML yang dibentuk dengan benar, FF3 + akan menggunakan mode rendering HTML yang berarti <script />tidak akan berfungsi (ini adalah perubahan, Firefox sebelumnya kurang ketat).

Ini akan terjadi terlepas dari setiap mengutak-atik http-equivelemen meta, prolog XML atau DOCTYPE di dalam dokumen Anda - cabang Firefox setelah mendapat text/htmlheader, yang menentukan apakah parser HTML atau XML terlihat di dalam dokumen, dan parser HTML tidak mengerti <script />.

joelhardi
sumber
3
Apakah benar untuk menyimpulkan bahwa jika Anda menjatuhkan dukungan untuk IE7, mengirim teks / xml akan memberi Anda dukungan browser yang luas untuk <script />?
Chris Moschini
7
Jadi, singkatnya, <script /> hanya akan berfungsi jika jenis halaman MIME Anda adalah xhtml / xml. Untuk halaman teks / html biasa, itu tidak akan berfungsi. DAN jika kita mencoba menggunakan tipe MIME "xhtml / xml", itu akan merusak kompatibilitas IE. Untuk meringkas, Tetap Tenang dan Gunakan <script> ... </script> Terima kasih Joe ;-)
Navin Israni
1
Penjelasan yang bagus. Hal lain yang perlu diperhatikan adalah Firefox juga akan .htmlmembuat file lokal dirender sebagai tag-sup terlepas dari meta tag, untuk alasan yang sama. Untuk file XHTML, Firefox hanya akan merendernya jika diberi nama .xhtml.
alecov
@ChrisMoschini. Mungkin, tapi gunakan application/xhtml+xml, bukan text/xml.
TRiG
167

Jika ada yang penasaran, alasan utamanya adalah bahwa HTML pada awalnya adalah dialek SGML, yang merupakan kakak lelaki tua XML yang aneh. Dalam tanah SGML, elemen dapat ditentukan dalam DTD sebagai penutupan sendiri (misalnya BR, HR, INPUT), secara implisit dekat (mis. P, LI, TD), atau secara eksplisit dapat ditutup (misalnya TABLE, DIV, SCRIPT). XML, tentu saja, tidak memiliki konsep ini.

Pengurai tag-tag yang digunakan oleh peramban modern berkembang dari peninggalan ini, meskipun model penguraian mereka bukan lagi SGML murni. Dan tentu saja, XHTML Anda yang dibuat dengan hati-hati sedang diperlakukan sebagai sup tag-terinspirasi SGML yang ditulis dengan buruk kecuali jika Anda mengirimnya dengan tipe mime XML. Ini juga sebabnya ...

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

... ditafsirkan oleh browser sebagai:

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

... yang merupakan resep untuk bug tak dikenal yang indah yang dapat membuat Anda cocok saat Anda mencoba kode melawan DOM.

Greim
sumber
4
Saya penasaran. mengapa browser memilih untuk menafsirkannya seperti itu?
Ahmed Aeon Axan
32
@AhmedAeonAxan: PElemen tidak dapat berisi DIVelemen (ini adalah HTML tidak valid), sehingga browser secara implisit menutup Pelemen (didefinisikan sebagai "implisit dekat") sebelum DIVtag pembuka . Namun, browser cenderung berperilaku berbeda dalam hal ini (seperti yang dapat mereka lakukan dengan HTML yang tidak valid).
MrWhite
5
@ColeJohnson Tidak, ini bukan tag sup; greim membingungkan batas antara HTML yang valid dan tidak valid. Tag soup adalah apa yang Anda dapatkan ketika penulis tidak memedulikan aturan, karena browser menggunakan koreksi kesalahan. </p>Tag akhir yang hilang di sisi lain sebenarnya adalah bagian dari definisi HTML!
Tn. Lister
3
@ Tuanister - Semacam. "Tag soup" menggambarkan bagaimana HTML diurai, bukan bagaimana itu ditulis. Itu adalah istilah yang digunakan untuk menggambarkan strategi yang berbeda yang digunakan browser untuk memahami HTML, dan sangat berbeda dengan parsing XML yang ketat. Penguraian XML hanya diizinkan untuk tipe mime XML, tetapi karena itu tidak pernah mencapai penggunaan luas, browser kembali ke berbagai skema "tag soup", bahkan untuk dokumen yang valid.
greim
8
HTML5 sebenarnya menstandarkan parsing 'tag soup', termasuk cara yang konsisten untuk menangani markup yang tidak valid. Sampai saat itu, browser semacam harus mencari tahu apa yang harus dilakukan dengan markup yang tidak valid sendiri, menyebabkan ketidakkonsistenan. Pengurai HTML di browser saat ini adalah salah satu perangkat lunak paling canggih yang pernah ditulis. Sangat cepat dan dapat menangani hampir semua input, menghasilkan hasil yang konsisten.
Stijn de Witt
161

Yang lain telah menjawab "bagaimana" dan mengutip spec. Berikut adalah kisah nyata "mengapa tidak <script/>", setelah beberapa jam menggali laporan bug dan milis.


HTML 4

HTML 4 didasarkan pada SGML .

SGML memiliki beberapa shorttags , seperti <BR//, <B>text</>, <B/text/, atau <OL<LI>item</LI</OL>. XML mengambil bentuk pertama, mendefinisikan ulang akhiran sebagai ">" (SGML fleksibel), sehingga menjadi <BR/>.

Namun, HTML tidak didefinisikan ulang, jadi <SCRIPT/> harus berarti <SCRIPT>> .
(Ya, '>' harus menjadi bagian dari konten, dan tag masih belum ditutup.)

Jelas, ini tidak kompatibel dengan XHTML dan akan menghancurkan banyak situs (pada saat browser sudah cukup dewasa untuk peduli tentang ini ), jadi tidak ada yang menerapkan shorttag dan spesifikasi menyarankan untuk tidak melakukannya .

Secara efektif, semua tag tanpa akhir yang 'berfungsi' adalah tag dengan tag akhir yang dilarang pada parser yang secara teknis tidak sesuai dan pada kenyataannya tidak valid. Itu W3C yang datang dengan peretasan ini untuk membantu transisi ke XHTML dengan membuatnya kompatibel dengan HTML .

Dan <script>tag akhir tidak dilarang .

Tag "Self-ending" adalah hack dalam HTML 4 dan tidak ada artinya.


HTML 5

HTML5 memiliki lima jenis tag dan hanya tag 'batal' dan 'asing' diizinkan untuk menutup sendiri .

Karena <script>tidak batal ( mungkin memiliki konten) dan tidak asing (seperti MathML atau SVG), <script>tidak dapat ditutup sendiri, terlepas dari bagaimana Anda menggunakannya.

Tapi kenapa? Tidak bisakah mereka menganggapnya sebagai benda asing, membuat kasus khusus, atau sesuatu?

HTML 5 bertujuan untuk kompatibel dengan implementasi HTML 4 dan XHTML 1. Ini tidak didasarkan pada SGML atau XML; sintaksinya terutama berkaitan dengan mendokumentasikan dan menyatukan implementasi. (Inilah sebabnya <br/> <hr/>dll. Adalah HTML 5 yang valid meskipun HTML4 tidak valid.)

Menutup diri <script>adalah salah satu tag di mana implementasi yang digunakan berbeda. Ini digunakan untuk bekerja di Chrome, Safari , dan Opera ; setahu saya itu tidak pernah bekerja di Internet Explorer atau Firefox.

Ini dibahas ketika HTML 5 sedang dirancang dan ditolak karena itu merusak kompatibilitas browser . Laman web yang ditutup dengan tag skrip sendiri mungkin tidak ditampilkan dengan benar (jika ada) di peramban lama. Ada proposal lain , tetapi mereka juga tidak bisa menyelesaikan masalah kompatibilitas.

Setelah draft dirilis, WebKit memperbarui parser agar sesuai.

Menutup diri <script>tidak terjadi di HTML 5 karena kompatibilitas ke belakang ke HTML 4 dan XHTML 1.


XHTML 1 / XHTML 5

Ketika benar-benar berfungsi sebagai XHTML, <script/>benar-benar tertutup, seperti yang dinyatakan oleh jawaban lain.

Kecuali bahwa spesifikasi mengatakan itu seharusnya berfungsi ketika berfungsi sebagai HTML:

Dokumen XHTML ... dapat dilabeli dengan Jenis Media Internet "text / html" [RFC2854], karena mereka kompatibel dengan sebagian besar browser HTML.

Jadi apa yang terjadi?

Orang-orang meminta Mozilla untuk membiarkan Firefox mem-parsing dokumen yang sesuai sebagai XHTML terlepas dari header konten yang ditentukan (dikenal sebagai sniffing konten ). Ini akan memungkinkan skrip penutup sendiri, dan penghirupan konten tetap diperlukan karena host web tidak cukup dewasa untuk melayani header yang benar; IE bagus dalam hal itu .

Jika perang browser pertama tidak berakhir dengan IE 6, XHTML mungkin sudah ada dalam daftar juga. Tapi itu memang berakhir. Dan IE 6 memiliki masalah dengan XHTML. Bahkan IE tidak mendukung jenis MIME yang benar sama sekali , memaksa semua orang untuk menggunakan text/htmluntuk XHTML karena IE diadakan pangsa pasar utama untuk seluruh dekade.

Dan juga mengendus konten bisa sangat buruk dan orang-orang mengatakan itu harus dihentikan .

Akhirnya, ternyata W3C tidak berarti XHTML dapat dihirup : dokumen keduanya , HTML dan XHTML, dan Content-Typeaturan. Bisa dikatakan mereka berdiri teguh pada "ikuti saja spec kami" dan mengabaikan apa yang praktis . Kesalahan yang berlanjut ke versi XHTML yang lebih baru.

Bagaimanapun, keputusan ini menyelesaikan masalah untuk Firefox. Itu 7 tahun sebelum Chrome lahir ; tidak ada browser signifikan lainnya. Jadi diputuskan.

Menentukan doctype saja tidak memicu parsing XML karena spesifikasi berikut.

Domba
sumber
1
@AndyE Ketika Anda menulis <script> yang ditutup sendiri, browser utama pada saat itu tidak menganggapnya ditutup, dan akan mem-parsing html selanjutnya sebagai javascript, menyebabkan HTML5 yang valid memecah browser lama ini. Dengan demikian proposal tersebut ditolak. Ini dijelaskan dalam milis HTML5 yang ditautkan.
Sheepy
2
@AndyE: Apa yang Anda gambarkan adalah kompatibilitas ke depan - kemampuan kode lama untuk bekerja dengan kompiler / juru bahasa baru / pengurai. Kompatibilitas mundur adalah kemampuan kode baru untuk bekerja dengan kompiler / interpreter / parser lama. Jadi ya, kompatibilitas ke belakang adalah masalah karena halaman yang ditulis dengan spesifikasi baru dalam pikiran tidak akan berfungsi di browser lama (dan ya, itu adalah tradisi pemrograman web untuk mencoba dan membuat kode baru berfungsi di browser lama sebanyak mungkin).
slebetman
3
@ Sentris Kenyataannya adalah, menolak skrip yang ditutup sendiri adalah jalan satu arah. Seperti yang tertaut , <script> yang ditutup sendiri akan menghancurkan semua browser, pengguna hanya akan melihat halaman kosong - konsol game, TV Internet, IE 11 pada PC Win7 perusahaan baru , jutaan runtime Java , atau milyaran smartphone. Bisakah Anda meningkatkan sebagian besar WebView dari sebagian besar bahasa di sebagian besar perangkat? Jika HTML5 mencoba mereka akan gagal seperti XHTML2.
Sheepy
6
jawaban yang sangat diremehkan
Kamil Tomšík
2
Sedikit koreksi: tag yang tampaknya berfungsi sendiri dalam HTML bukanlah tag dengan tag akhir opsional , tetapi tag dengan tag akhir terlarang (kosong, atau kosong, tag). Tag dengan tag akhir opsional , suka <p>atau <li>, tidak dapat 'ditutup sendiri' karena mereka dapat memiliki konten, jadi kode suka <p/>tidak lebih dari tag yang memulai (salah bentuk) dan konten setelahnya, jika diizinkan dalam elemen ini , akan berakhir di dalamnya.
Ilya Streltsyn
44

Internet Explorer 8 dan yang lebih lama tidak mendukung penguraian XHTML. Bahkan jika Anda menggunakan deklarasi XML dan / atau XHTML doctype, IE lama masih mem-parsing dokumen sebagai HTML biasa. Dan dalam HTML biasa, sintaksis yang menutup sendiri tidak didukung. Garis miring trailing hanya diabaikan, Anda harus menggunakan tag penutup eksplisit.

Bahkan browser dengan dukungan untuk penguraian XHTML, seperti IE 9 dan yang lebih baru , akan tetap mem-parsing dokumen sebagai HTML kecuali jika Anda menyajikan dokumen dengan tipe konten XML. Tetapi dalam hal itu IE lama tidak akan menampilkan dokumen sama sekali!

JacquesB
sumber
9
"IE tidak mendukung parsing XHTML." benar untuk versi IE pada saat ini ditulis, tetapi tidak lagi benar.
EricLaw
@ EricLaw dapatkah Anda menjelaskan versi IE mana yang diperbaiki ini? (dan persyaratan spesifik apa pun - misalnya
dokumen yang
2
@scunliffe IE9 adalah versi pertama dengan dukungan penuh untuk XHTML. blogs.msdn.com/b/ie/archive/2010/11/01/...
EricLaw
28

Orang-orang di atas sudah cukup banyak menjelaskan masalah ini, tetapi satu hal yang mungkin membuat semuanya menjadi jelas adalah bahwa, meskipun orang menggunakan <br/>dan sepanjang waktu dalam dokumen HTML, /pada posisi seperti itu pada dasarnya diabaikan, dan hanya digunakan ketika mencoba untuk membuat sesuatu yang keduanya dapat diuraikan sebagai XML dan HTML. Coba <p/>foo</p>, misalnya, dan Anda mendapatkan paragraf reguler.

Marijn
sumber
22

Tag skrip penutup otomatis tidak berfungsi, karena tag skrip dapat berisi kode sebaris, dan HTML tidak cukup pintar untuk mengaktifkan atau menonaktifkan fitur tersebut berdasarkan keberadaan atribut.

Di sisi lain, HTML memang memiliki tag yang sangat baik untuk menyertakan referensi ke sumber daya luar: <link>tag, dan itu bisa menutup sendiri. Ini sudah digunakan untuk memasukkan stylesheet, RSS dan Atom feed, URI kanonik, dan segala macam barang lainnya. Kenapa tidak JavaScript?

Jika Anda ingin tag skrip tertutup sendiri, Anda tidak dapat melakukan itu seperti yang saya katakan, tetapi ada alternatifnya, meskipun bukan yang cerdas. Anda dapat menggunakan tag tautan penutup otomatis dan tautan ke JavaScript dengan memberikannya jenis teks / javascript dan rel sebagai skrip, seperti di bawah ini:

<link type="text/javascript" rel ="script" href="/path/tp/javascript" />
defau1t
sumber
4
Saya suka itu, mengapa bukan "pintar"?
Josh M.
5
Karena ada tag skrip yang telah ditentukan sebelumnya untuk melakukan pekerjaan memuat skrip dengan tepat .. Mengapa Anda mengacaukan masalah menggunakan sesuatu yang lain? Palu palu di paku .. Apakah pintar menggunakan sepatu?
Dave Lawrence
8
@daveL - Dan kami memiliki <style>tag, namun menggunakan tag tautan untuk file CSS eksternal. Definisi tag tautan: " Tag <link> mendefinisikan tautan antara dokumen dan sumber daya eksternal." Tampak logis bahwa tag tautan akan digunakan untuk CSS eksternal atau JS ... itulah gunanya ... menghubungkan dalam file eksternal. perhatikan saya tidak berbicara spec / cross-browserness / etc, saya hanya mengomentari sifat logis menggunakan tag tautan untuk membawa baik CSS dan JS ... sebenarnya akan sangat masuk akal jika memang seperti itu . Tidak yakin sepatu [analogi] cocok.
Jimbo Jonny
20

Tidak seperti XML dan XHTML, HTML tidak memiliki pengetahuan tentang sintaksis yang menutup sendiri. Browser yang menafsirkan XHTML sebagai HTML tidak tahu bahwa /karakter menunjukkan bahwa tag harus ditutup sendiri; alih-alih mereka menafsirkannya seperti atribut kosong dan parser masih menganggap tag itu 'terbuka'.

Sama seperti <script defer>diperlakukan sebagai <script defer="defer">, <script />diperlakukan sebagai <script /="/">.

rpetrich
sumber
33
Elegan seperti penjelasan ini, itu sebenarnya salah. Jika itu benar, akan ada atribut "/" untuk elemen skrip di DOM. Saya telah memeriksa IE, Firefox dan Opera, dan tidak ada yang benar-benar mengandung atribut seperti itu.
Alohci
11
/ bukan karakter nama atribut yang valid, jadi dibuang. Kalau tidak, penjelasan ini cukup jelas.
hallvors - mengembalikan Monica
1
Sebenarnya, beberapa parser HTML (dan terutama validator) dapat menginterpretasikannya /sebagai bagian dari konstruksi NET (Tag Akhir Null).
IllidanS4 ingin Monica kembali
18

Internet Explorer 8 dan yang lebih lama tidak mendukung tipe MIME yang tepat untuk XHTML application/xhtml+xml,. Jika Anda menjalankan XHTML sebagai text/html, yang harus Anda lakukan untuk versi Internet Explorer yang lebih lama untuk melakukan apa saja, itu akan ditafsirkan sebagai HTML 4.01. Anda hanya dapat menggunakan sintaks pendek dengan elemen apa pun yang memungkinkan tag penutup dihilangkan. Lihat Spesifikasi HTML 4.01 .

XML 'short form' ditafsirkan sebagai atribut bernama /, yang (karena tidak ada tanda sama dengan) ditafsirkan memiliki nilai implisit "/". Ini benar-benar salah dalam HTML 4.01 - atribut yang tidak dideklarasikan tidak diizinkan - tetapi browser akan mengabaikannya.

IE9 dan kemudian mendukung XHTML 5 disajikan dengan application/xhtml+xml.

Mike Dimmick
sumber
IE 9 mendukung XHTML dan IE tidak lagi> 51%. Bisakah Anda memperbarui jawaban Anda?
Damian Yerrick
5

Itu karena SCRIPT TAG bukan ELEMEN BISA.

Dalam Dokumen HTML - ELEMEN VOID tidak memerlukan "tag penutup" sama sekali!

Dalam xhtml , semuanya Generik, oleh karena itu mereka semua perlu terminasi misalnya "tag penutup"; Termasuk br, line-break sederhana, <br></br>atau steno -nya <br />.

Namun, Elemen Skrip tidak pernah menjadi Elemen batal atau parametrik, karena tag skrip sebelum hal lain, adalah Instruksi Browser, bukan deklarasi Deskripsi Data.

Pada prinsipnya, Instruksi Pengakhiran Semantik misalnya, "tag penutup" hanya diperlukan untuk memproses instruksi yang semantiknya tidak dapat diakhiri dengan tag berikutnya. Contohnya:

<H1>semantik tidak dapat diakhiri dengan mengikuti <P>karena ia tidak membawa cukup banyak semantiknya sendiri untuk mengesampingkan dan karenanya menghentikan set instruksi H1 sebelumnya. Meskipun akan dapat memecah aliran menjadi baris paragraf baru, itu tidak "cukup kuat" untuk mengesampingkan ukuran font saat ini & gaya-ketinggian garis mengalir ke sungai , yaitu bocor dari H1 (karena P tidak memilikinya ).

Ini adalah bagaimana dan mengapa pensinyalan "/" (terminasi) telah ditemukan.

Tag terminasi tanpa-deskripsi umum seperti < />, akan mencukupi untuk setiap jatuh tunggal dari kaskade yang ditemui, misalnya: <H1>Title< />tetapi itu tidak selalu terjadi, karena kami juga ingin dapat "bersarang", beberapa penandaan perantara dari Stream: split ke torrents sebelum membungkus / jatuh ke kaskade lain. Akibatnya terminator generik seperti < />tidak akan dapat menentukan target properti untuk diakhiri. Sebagai contoh: <b>bold <i>bold-italic < /> italic </> normal. Tidak diragukan lagi akan gagal untuk mendapatkan maksud kita dengan benar dan kemungkinan besar akan menafsirkannya sebagai huruf tebal- tebal yang normal.

Ini adalah bagaimana gagasan pembungkus yaitu., Wadah lahir. (Gagasan ini sangat mirip sehingga tidak mungkin untuk membedakan dan kadang-kadang elemen yang sama memiliki keduanya. <H1>Keduanya adalah pembungkus dan wadah pada saat yang sama. Sedangkan <B>hanya pembungkus semantik). Kita akan membutuhkan wadah polos, tidak ada semantik. Dan tentu saja penemuan Unsur DIV datang.

Elemen DIV sebenarnya adalah 2BR-Container. Tentu saja kedatangan CSS membuat situasi lebih aneh daripada yang seharusnya dan menyebabkan kebingungan besar dengan banyak konsekuensi besar - secara tidak langsung!

Karena dengan CSS Anda dapat dengan mudah mengganti perilaku pra & setelah asli dari DIV yang baru ditemukan, sering disebut sebagai "wadah jangan lakukan apa-apa". Yang tentu saja salah! DIV adalah elemen blok dan akan secara alami memutus garis aliran baik sebelum dan sesudah pensinyalan akhir. Segera WEB mulai menderita halaman DIV-itis. Sebagian besar masih.

Datangnya CSS dengan kemampuannya untuk sepenuhnya menimpa dan sepenuhnya mendefinisikan kembali perilaku asli dari setiap Tag HTML, entah bagaimana berhasil membingungkan dan mengaburkan seluruh makna keberadaan HTML ...

Tiba-tiba semua tag HTML muncul seolah-olah usang, mereka rusak, dilucuti dari semua makna, identitas, dan tujuan aslinya. Entah bagaimana Anda akan mendapatkan kesan bahwa mereka tidak lagi diperlukan. Mengatakan: Satu tag pembungkus kontainer akan cukup untuk semua presentasi data. Cukup tambahkan atribut yang diperlukan. Mengapa tidak memiliki tag yang bermakna sebagai gantinya; Ciptakan nama tag saat Anda pergi dan biarkan CSS yang mengganggu.

Inilah bagaimana xhtml dilahirkan dan tentu saja tumpul besar, yang dibayar mahal oleh pendatang baru dan visi yang menyimpang tentang apa itu apa, dan apa tujuan utama dari semua itu. W3C pergi dari World Wide Web ke What Went Wrong, Kamerad? !!

Tujuan HTML adalah untuk mengalirkan data yang bermakna ke penerima manusia.

Untuk menyampaikan Informasi.

Bagian formal ada di sana hanya untuk membantu kejelasan pengiriman informasi. xhtml tidak memberikan sedikit pun pertimbangan untuk informasi tersebut. - Untuk itu, informasinya sama sekali tidak relevan.

Hal yang paling penting dalam masalah ini adalah untuk mengetahui dan dapat memahami bahwa xhtml bukan hanya versi dari beberapa HTML yang diperluas , xhtml adalah binatang yang sama sekali berbeda; alasan; dan karena itu bijaksana untuk memisahkan mereka.

Bekim Bacaj
sumber
3

Perbedaan antara 'true XHTML', 'faux XHTML' dan HTML serta pentingnya tipe MIME yang dikirim oleh server telah dijelaskan di sini dengan baik . Jika Anda ingin mencobanya sekarang, berikut ini cuplikan sederhana yang dapat diedit dengan pratinjau langsung termasuk tag skrip yang ditutup sendiri untuk peramban yang cakap:

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>

Anda akan melihat Hello, true XHTML. Nice to meet you!teks di bawah ini.

Untuk browser yang tidak mampu, Anda dapat menyalin konten textarea dan menyimpannya sebagai file dengan .xhtml(atau .xht) ekstensi ( terima kasih Alek untuk petunjuk ini ).

myf
sumber