Sakelar mode yang termasuk dalam artikel ini cocok untuk Firefox dan browser berbasis tokek lainnya, Safari, Chrome dan browser berbasis webkit lainnya, opera, konqueror, penjelajah internet untuk Mac, Internet Explorer untuk Windows, dan browser dengan IE bawaan. Hindari menyebutkan nama mesin browser dan sebaliknya menggunakan nama browser mesin yang paling terkenal.
Artikel ini berfokus pada mekanisme pemilihan pola daripada merekam perilaku yang tepat dari setiap pola.
Berikut adalah berbagai mode yang berbeda:
Pemilihan pola konten teks/html tergantung pada sniffing doctype (sniffing doctype, yang dibahas kemudian dalam artikel ini). Di IE8, polanya juga tergantung pada faktor -faktor lain. Namun, secara default di IE8, pola situs non-tranet yang tidak disediakan pada daftar hitam Microsoft tergantung pada jenis dokumen.
Tidak berlebihan untuk menekankan perbedaan dalam perilaku pola yang tepat di setiap browser, bahkan jika ada diskusi terpadu dalam artikel ini.
Dalam Firefox, Safari, Chrome, dan Opera, Aplikasi/XHTML+XML HTTP Tipe (bukan elemen meta atau Doctype!) Akan memicu pola XML. Dalam pola XML, browser mencoba memberikan dokumen XML spesifikasi yang benar sejauh ada di browser.
IE6, 7 dan 8 tidak mendukung aplikasi/xhtml+xml, dan begitu juga Mac IE5.
Di browser Nokia S60 berbasis WebKit, jenis konten Application/XHTML+XML HTTP tidak dapat memicu skema XML karena fokus di taman berdinding ponsel adalah kompatibilitas dengan konten yang tidak teratur. (Browser seluler gaya lama tidak dapat menggunakan parser XML nyata karena konten non-standar telah ditandai XML.)
Karena Konqueror tidak sepenuhnya diuji, saya tidak bisa mengatakan apa yang akan terjadi di browser ini.
Pola yang beberapa mesin tidak ada hubungannya dengan konten web. Untuk kelengkapan, mereka hanya disebutkan di sini. Opera memiliki mode WML2.0. WebKit di Leopard memiliki mode khusus untuk widget dasbor lama.
Berikut adalah efek utama dari pola -pola ini:
Pola teks/html terutama mempengaruhi tata letak CSS. Misalnya, ini adalah kekhasan untuk tabel untuk tidak mewarisi gaya. Dalam mode Quirk beberapa browser, model kotak menjadi model kotak IE5.5. Dokumen ini tidak mencantumkan semua tata letak keanehan.
Mode kuasi-standar (dalam browser dengan mode ini), hanya sel tabel yang mengandung gambar berbeda dalam mode tinggi dan standar.
Dalam skema XML, pemilih memiliki perilaku sensitif yang berbeda. Selain itu, aturan unik untuk elemen tubuh HTML tidak dapat diterapkan pada browser yang lebih lama yang tidak menerapkan perubahan CSS2.1 terbaru.
Ada juga beberapa keanehan yang mempengaruhi penguraian HTML dan CSS dan akan menyebabkan halaman web yang memenuhi standar tidak diuraikan secara tidak benar. Tata letak keanehan menentukan apakah keanehan ini dihidupkan. Dalam kasus apa pun, sangat penting untuk memahami kesamaan dan perbedaan utama pola quirk dan pola standar dalam tata letak dan penguraian CSS (parsing non-HTML).
Beberapa orang secara keliru menyebut mode parsing mode standar yang ketat, yang membuat orang salah paham dengan aturan sintaks HTML yang menegakkan browser dan evaluasi browser tentang kebenaran tag. Ini bukan masalahnya. Bahkan ketika tata letak mode standar mulai berlaku, browser masih akan membuat tag sup (tag sup, http://en.wikipedia.org/wiki/tag_soup) Koreksi. (Sebelum Netscape6 dirilis pada tahun 2000, Mozilla memang memiliki pola penguraian untuk menegakkan aturan sintaks HTML. Pola -pola ini ditinggalkan tidak kompatibel dengan konten web yang ada.)
Kesalahpahaman umum lainnya adalah tentang parsing xhtml. Biasanya diyakini bahwa parse yang berbeda diperoleh dengan menggunakan XHTML Doctype. Bahkan, ini bukan masalahnya. Jenis konten sama dengan dokumen parser dan html yang digunakan dalam dokumen XHTML dari Text/HTML. Apa yang dirawat oleh browser saat ini adalah bahwa XHTML dengan Teks Jenis Dokumen/HTML hanyalah sup tag dengan crout (tebasan tambahan di mana -mana).
Hanya ketika dokumen tipe dokumen XML (misalnya: Aplikasi/XHTML+XML atau XMAPPLICATION/) digunakan, parser akan memicu skema XML untuk parsing. Parser pada saat ini benar -benar berbeda dari parser HTML.
Sementara pola quirk terutama tentang CSS, beberapa tentang skrip. Misalnya, dalam pola Quirk Firefox, atribut ID HTML menetapkan referensi objek ke ruang lingkup skrip global seperti di IE. Dampak skrip di IE8 lebih layak diperhatikan daripada browser lainnya.
Dalam skema XML, beberapa DOM API berperilaku sama sekali berbeda karena perilaku DOM API dari XML tidak kompatibel dengan perilaku HTML bila didefinisikan.
Browser modern menggunakan sniffing Doctype untuk menentukan mode mesin teks/dokumen HTML. Ini berarti bahwa pilihan skema didasarkan pada deklarasi jenis dokumen (atau hilang) dimulai dengan dokumen HTML. (Ini tidak cocok untuk dokumen menggunakan tipe dokumen XML.)
Dokumen Jenis Deklarasi (DOCTYPE) adalah pemalsuan sintaks SGML. SGML adalah kerangka kerja markup gaya lama. Html sebelum html5 didefinisikan berdasarkan itu. Dalam spesifikasi HTML4.01, deklarasi jenis dokumen menjelaskan informasi versi HTML. Meskipun namanya adalah deklarasi jenis dokumen dan spesifikasi HTML 4.01 menjelaskan informasi versi, deklarasi jenis dokumen tidak berlaku untuk mengklasifikasikan dokumen SGML atau XML sebagai jenis dokumen tertentu, bahkan jika terlihat seperti (karena namanya). (Lebih banyak konten ada di Lampiran)
Baik spesifikasi HTML4.01 maupun ISO 8879 (SGML) tidak mengatakan apa pun tentang menggunakan deklarasi jenis dokumen sebagai konversi mode mesin. Sniffing Doctype didasarkan pada pengamatan. Ketika sniffing Doctype dirancang, sebagian besar keanehan tidak memiliki deklarasi jenis dokumen atau referensi ke DTD lama. HTML5 menerima fakta ini dan mendefinisikan Doctype sebagai satu -satunya konversi mode dalam teks/html.
Deklarasi tipe dokumen pre-html5 (pre-html5) khas berisi (dipisahkan oleh blanks) <! Doctype String, pengidentifikasi umum untuk elemen root (html), string publik, pengidentifikasi umum DTD dalam kutipan, pengidentifikasi sistem yang mungkin (URL) dan karakter untuk DTD yang sama. Deklarasi Jenis Dokumen adalah sebelum elemen root dokumen memulai label.
Berikut adalah panduan sederhana untuk cara memilih Doctype saat membuat dokumen teks/html baru:
Saya tidak merekomendasikan doctype xhtml, karena xhtml dianggap berbahaya untuk digunakan sebagai teks/html. Ngomong -ngomong, jika Anda memilih untuk menggunakan XHTML Doctype, perhatikan bahwa deklarasi XML menyebabkan IE6 (tetapi bukan IE7!) Untuk memicu pola quirk.
Panduan sederhana untuk aplikasi/xhtml+xml tidak pernah menggunakan Doctype. Halaman web di bawah metode ini tidak sepenuhnya konsisten dengan xhmtl1.0, tetapi ini tidak masalah. (Silakan lihat lampiran di bawah)
Daftar terpisah setelah diperkenalkan bahwa IE8 akan menggunakan konversi pola berbasis meta-elemen sebagai salah satu faktor untuk pemilihan pola, selain Doctype. (Lihat ulasan oleh Ian Hickson, David Baron, David Baron lagi, Robert O'Callahan dan Maciej Stachowiak.)
Ada 4 mode untuk IE8: IE5.5 Mode Quirk, Mode Standar IE7, Mode Qual-Standard IE8 dan Mode Standar IE8. Pemilihan mode tergantung pada data dari beberapa aspek: Doctype, elemen meta, header HTTP, data unduhan reguler dari Microsoft, domain LAN, pengaturan yang dibuat oleh pengguna, pengaturan yang dibuat oleh administrator LAN, mode kerangka kerja induk (jika ada) dan alamat tombol tampilan bilah yang kompatibel dipicu oleh pengguna. (Untuk aplikasi lain yang tertanam di mesin, polanya juga tergantung pada aplikasi tertanam.)
Untungnya, IE8 umumnya akan menggunakan sniffing Doctype seperti browser lainnya jika terjadi berikut:
Kecuali untuk dua kasus tentang X-UA-Compatible, IE8 melakukan sniffing Doctype seperti IE7. Emulasi IE7 (emulasi IE7) disebut tampilan yang kompatibel.
Dalam kasus X-UA-Compatible, IE8 berperilaku sangat berbeda dari browser lainnya. Saya ingin melihat lampiran atau diagram alur dalam format PDF dan PNG di halaman ini.
Sayangnya, tidak ada header HTTP atau tag meta untuk X-UA-Compatible, dan bahkan dengan Doctype yang sesuai, IE8 memungkinkan pengguna untuk secara tidak sengaja mengurangi halaman dari mode standar IE8 ke mode IE7, yang merupakan mode standar IE7 yang disimulasikan. Lebih buruk lagi, administrator LAN dapat melakukan hal yang sama. Microsoft juga dapat membuat daftar hitam semua nama domain yang Anda gunakan.
Untuk menangani efek ini, Doctype tidak cukup, Anda memerlukan header dan meta tag HTTP yang kompatibel dengan X-UA.
Panduan sederhana berikut adalah untuk dokumen teks/html baru yang sudah memiliki mode standar pemicu dokter atau mode standar kuasi di browser lain untuk cara memilih header http yang kompatibel dengan X-AA atau tag meta:
Tolong jangan membawa sniffing Doctype ke XML.
Sniffing Doctype adalah untuk memecahkan masalah sup chowder berlabel menggunakan metode seperti sup chowder. Sniffing Doctype adalah pendekatan sementara yang dirancang setelah rilis spesifikasi HTML4 dan CSS2, yang membedakan dokumen yang sudah ketinggalan zaman dari dokumen agar sesuai dengan perilaku yang mungkin diharapkan oleh penulisnya.
Kadang -kadang disarankan untuk menggunakan sniffing Doctype pada XML untuk menjadwalkan pemrosesan yang berbeda, mengidentifikasi kosa kata yang digunakan, atau untuk mengaktifkan fitur. Ini adalah ide yang buruk. Penjadwalan dan pengakuan kosa kata harus didasarkan pada namespace, sedangkan aktivasi fitur harus didasarkan pada instruksi atau elemen pemrosesan eksplisit.
Seluruh gagasan tentang performa yang baik adalah untuk memperkenalkan parsing DTD yang memungkinkan XML, dan mempromosikan dokumen bebas-dokter. Dalam kasus formal, dua dokumen XML memiliki bentuk kanonik yang sama dan aplikasi memprosesnya secara berbeda (dan bukan karena tidak ada pilihan untuk menangani entitas eksternal), aplikasi mungkin rusak. Dalam praktiknya, jika dua dokumen XML menyebabkan konten yang sama dilaporkan (qnames abaikan) ke prosesor konten SAX2 dan aplikasi prosesnya secara berbeda, aplikasi dapat dipecahkan. Mempertimbangkan bahwa sebagai penulis web, tidak mungkin untuk percaya bahwa setiap orang akan mengurai halaman mereka menggunakan xmlprocessor yang membahas entitas tambahan (bahkan jika beberapa browser tampaknya melakukannya, karena mereka memetakan pengidentifikasi publik tertentu ke DTD yang mendefinisikan entitas dengan kumpulan yang ringkas), memasukkan Doctype ke dalam XML untuk digunakan di web tidak ada artinya dan seringkali mengarah ke dalam kargo. ;
Selain itu, ketika spesifikasi tingkat rendah mendefinisikan dua hal yang sama, spesifikasi tingkat tinggi tidak boleh mencoba memberi mereka makna yang berbeda. Harap pertimbangkan <! Doctype html public -// w3c // dtd xhtml 1.0 strict // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd>. Jika pengidentifikasi publik dihapus, DTD yang sama masih ditentukan, jadi Doctype <! Doctype HTML System http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd> berarti sama dengan dokter sebelumnya. Haruskah mereka mengendus secara berbeda? Itu bisa menjadi teori lebih lanjut. Misalkan salin ke example.com DTD yang disebut foobar.dtd: <! Doctype html System http://example.com/foobar.dtd>. Bagaimana cara mengendus ini? Itu harus memiliki arti yang sama. Bahkan seluruh DTD dapat diposting di dokumen.
Dengan kata lain, jika ada #include foo.h, Anda tidak boleh mengikat sihir hitam apa pun dengan nama foo.h, karena harus memungkinkan penyalinan isi foo.h ke dalam dokumen atau menyalin foo.h ke bar.h dan mewakili #include bar.h.
Alasan saya tidak khawatir tentang HTML dan SGML yang membangun parameter yang sama adalah karena browser web tidak menggunakan parser SGML nyata untuk mengurai HTML, jadi saya pikir tidak ada gunanya untuk menyamar sebagai SGML untuk diproses. Ngomong -ngomong, jika Anda belum percaya, silakan baca artikel W. Eliot Kimber tentang masalah ini comp.text.sgml
Dalam tabel berikut, pola quirk, pola standar dan kriteria kuasi direpresentasikan sebagai Q, S, dan A, masing-masing. Ketika browser hanya memiliki dua mode, mode standar ditandai sebagai s jika ketinggian baris sel tabel konsisten dengan kinerja mode standar mozilla, dan mode standar ditandai sebagai jika ketinggian baris sel meja konsisten dengan kinerja mode standar mozilla.
Harap dicatat bahwa XHTML yang melayani menggunakan model konten XML diterjemahkan dalam mode XML.
Tujuan tabel ini bukan untuk mengatakan bahwa semua dokter dalam tabel adalah pilihan yang masuk akal untuk membuat halaman baru. Tujuan dari tabel ini adalah untuk menunjukkan jenis data apa yang menjadi dasar rekomendasi saya.
Simbol singkatan berikut digunakan untuk judul kolom:
| DOCTYPE | NS6 | Moz tua | Moz & Safari & Opera10 & HTML5 | Opera9.0 | IE8 & Opera9.5 | IE7 & Opera7.10 | IE6 & Opera7.0 | Mac IE5 | KONQ3.2 |
|---|---|---|---|---|---|---|---|---|---|
| Tidak ada | Q | Q | Q | Q | Q | Q | Q | Q | Q |
| <! Doctype Html public -// w3c // dtd html 3.2 final // en> | Q | Q | Q | Q | Q | Q | Q | Q | Q |
| <! Doctype Html public -// w3c // dtd html 4.0 // en> | S | S | S | S | S | A | A | A | A |
| <! Doctype Html public -// w3c // dtd html 4.01 // en> | S | S | S | S | S | A | A | Q | A |
| <! Doctype Html public -// w3c // dtd html 4.0 // en http://www.w3.org/tr/html4/strict.dtd> | S | S | S | S | S | A | A | A | A |
| <! Doctype Html public -// w3c // dtd html 4.01 // en http://www.w3.org/tr/html4/strict.dtd> | S | S | S | S | S | A | A | A | A |
| <! Doctype Html public -// w3c // dtd html 4.0 transitional // en> | Q | Q | Q | Q | Q | Q | Q | Q | Q |
| <! Doctype Html public -// w3c // dtd html 4.01 transisi // en> | Q | Q | Q | Q | Q | Q | Q | Q | Q |
| <! Doctype Html public -// w3c // dtd html 4.01 transisi // en http://www.w3.org/tr/html4/loose.dtd> | S | S | A | A | A | A | A | A | Q |
| <! Doctype Html public -// w3c // dtd html 4.01 transisi // en http://www.w3.org/tr/1999/rec-html401-19991224/loose.dtd> | Q | S | A | A | A | A | A | A | Q |
| <! Doctype Html public -// w3c // dtd html 4.0 transisi // en http://www.w3.org/tr/html4/loose.dtd> | Q | Q | Q | Q | A | A | A | A | Q |
| <! Doctype html public -// w3c // dtd xhtml 1.1 // en http://www.w3.org/tr/xhtml11/dtd/xhtml11.dtd> | S | S | S | S | S | A | A | A | A |
| <! Doctype html public-// w3c // dtd xhtml dasar 1.0 // en http://www.w3.org/tr/xhtml-basic/xhtml-basic10.dtd> | S | S | S | S | S | A | A | A | A |
| <! Doctype html public -// w3c // dtd xhtml 1.0 strict // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd> | S | S | S | S | S | A | A | A | A |
| <! Doctype html public -// w3c // dtd xhtml 1.0 transisi // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd> | S | S | A | A | A | A | A | A | Q |
| <? XML Versi = 1.0 Encoding = UTF -8?> <! Doctype html public -// w3c // dtd xhtml 1.1 // en http://www.w3.org/TR/xhtml11/dtd/xhtml11.dtd> | S | S | S | S | S | A | Q | A | Q |
| <? XML Versi = 1.0 Encoding = UTF-8?> <! Doctype html public-// w3c // dtd xhtml dasar 1.0 // en http://www.w3.org/tr/xhtml-basic/xhtmlbasic10.dtd> | S | S | S | S | S | A | Q | A | Q |
| <? xml Versi = 1.0 Encoding = UTF -8?> <! Doctype html public -// w3c // dtd xhtml 1.0 strict // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-strict.dtd> | S | S | S | S | S | A | Q | A | Q |
| <? xml Versi = 1.0 Encoding = UTF -8?> <! Doctype html public -// w3c // dtd xhtml 1.0 transisi // en http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd> | S | S | A | A | A | A | Q | A | Q |
| <! Doctype Html public ISO/IEC 15445: 2000 // dtd html // en> | Q | S | S | Q | Q | Q | Q | Q | Q |
| <! Doctype HTML PUBLIK ISO/IEC 15445: 2000 // DTD Markup Hypertext Bahasa // en> | Q | S | S | S | S | A | A | A | Q |
| <! Doctype HTML PUBLIK ISO/IEC 15445: 1999 // dtd html // en> | S | S | S | Q | Q | Q | Q | Q | Q |
| <! Doctype HTML PUBLIK ISO/IEC 15445: 1999 // DTD Markup Hypertext Bahasa // en> | S | S | S | S | S | A | A | A | Q |
| <! Doctype html> | Q | S | S | S | S | A | A | A |
Kode sniffing Doctype Moziila secara signifikan dimodifikasi pada Oktober 2000, September 2001 dan Juni 2002. Negara -negara yang didirikan oleh Mozilla (dan Netscape 6.x) yang dijelaskan dalam dokumen ini dapat dilihat di ftp.mozilla.org sejak 2000.10.19. Dokumen ini tidak membahas cara kerja Sniffing Doctype di Mozilla M18 (dan Netscape 6.0 PR3). Kode sniffing Doctype Safari juga telah sangat dimodifikasi sejak beta publik pertama. Dokumen ini tidak termasuk perilaku lebih awal dari versi V73, juga disebut 0,9.
Kode Sniffing Doctype sebelum Konqueror3.5 tampaknya berasal dari versi awal Safari. Konqueror sekarang cocok dengan Safari, dan kode sniffing Doctype -nya berasal dari Mozilla.
Seperti yang dapat dilihat dari meja, sniffing Doctype Opera berubah dari IE-like reguler menjadi seperti mozilla, meskipun opera9.5 dan 9.6 sedang dalam perjalanan ke belakang. Sementara itu, perilaku tata letak mode Quirk Opera telah dialihkan dari meniru mode Quirk IE6 ke mode Quirk Mozilla.
Langkah -langkah ini dapat dilihat melalui diagram alur dalam format PDF dan PNG.
Terima kasih kepada Simon Pieters, Simon Pieters dan Anne Van Kesteren karena telah membantu saya memperbaiki tabel pola dan komentar mereka untuk berbagai versi opera. Terima kasih kepada Simon Pieters yang telah membuat diagram alur IE8 lainnya.