Apakah HTML5 mengubah standar untuk berkomentar HTML?

131

Baru-baru ini saya menemukan bahwa mungkin ada cara baru untuk berkomentar di HTML5.

Alih-alih <!-- -->komentar multi-line khas yang saya baca, saya pikir saya perhatikan bahwa IDE saya membuat <!div >komentar reguler . Jadi saya mengujinya, dan saya terkejut Chrome berkomentar tag itu. Itu hanya mengomentari tag dan bukan isi div, jadi saya harus berkomentar lebih dekat <!/div>untuk menghindari menutup div lain.

Saya menguji yang lain dan tampaknya secara umum menempatkan tanda seru di depan setiap pembukaan tag, simbol ini <, membuat tag itu dikomentari.

Apakah ini benar-benar baru? Apakah ini praktik yang buruk? Ini sebenarnya sangat nyaman, tetapi apakah masih praktis (jika bukan baru)?

Edit detail tambahan: Meskipun kesalahan sintaksis atau kesalahan interpretasi dari sintaksis khusus ini adalah alasan yang bagus, mengapa Chrome benar-benar menjadikannya sebagai komentar lengkap?

Kode ini ditulis sebagai :

<!div displayed> some text here that is still displayed <!/div>

Dan kemudian diterjemahkan sebagai :

<!--div displayed--> some text here that is still displayed <!--/div-->
Andrew
sumber
19
Kemungkinan besar itu hanya kesalahan sintaksis dan / atau tag omong kosong dan karenanya diabaikan.
tipuan
@menerima Saya agak berharap bahwa karena browser dapat lunak dengan bagaimana mereka membuat html sesuai dengan aturan yang kurang ketat.
Andrew
1
@ Lemony-Andrew Apa IDE yang melakukan itu? Menurut jawaban yang dipilih, kami dapat melaporkan ini sebagai masalah (atau memperbaikinya jika open source).
Dereckson
1
@Derecksonit, saya mengecek IDE saya setelah jawaban resmi dibuat untuk memastikan mata saya tidak menipu saya. Kebetulan itu tidak secara de facto dikomentari, tetapi warna teks biasa yang serupa. Ini semua kebetulan.
Andrew

Jawaban:

196

Tidak ada standar baru untuk komentar dalam HTML5. Sintaks komentar yang valid masih <!-- -->. Dari bagian 8.1.6 dari W3C HTML5 :

Komentar harus dimulai dengan urutan empat karakter U + 003C KURANG DARI MASUK, U + 0021 MARK EKLAMASI, U + 002D HYPHEN-MINUS, U + 002D HYPHEN-MINUS ( <!--).

The <!sintaks berasal di SGML DTD markup, yang bukan bagian dari HTML5. Dalam HTML5, disediakan untuk komentar, bagian CDATA, dan deklarasi DOCTYPE. Oleh karena itu apakah alternatif ini adalah praktik yang buruk tergantung pada apakah Anda menganggap penggunaan (atau lebih buruk, ketergantungan pada) markup usang menjadi praktik yang buruk.

Validator.nu menyebut apa yang Anda miliki "komentar Bogus." - yang artinya diperlakukan seperti komentar meskipun itu bukan komentar yang valid. Ini mungkin untuk kompatibilitas ke belakang dengan pra-HTML5, yang berbasis SGML, dan memiliki deklarasi markup yang mengambil formulir <!FOO>, jadi saya tidak akan menyebut ini baru. Alasan mereka diperlakukan seperti komentar ini karena deklarasi SGML markup yang deklarasi khusus tidak dimaksudkan untuk diberikan, tapi karena mereka tidak ada artinya di HTML5 (dengan pengecualian atas), sejauh HTML5 DOM yang bersangkutan mereka yang tidak lebih dari komentar .

Langkah-langkah berikut dalam bagian 8.2.4 mengarah ke kesimpulan ini, yang tampaknya diikuti oleh Chrome pada surat itu:

  1. 8.2.4.1 Status data :

    Konsumsi karakter input berikutnya:

    "<" (U + 003C)
    Beralih ke status buka tag.

  2. 8.2.4.8 Tag status terbuka :

    Konsumsi karakter input berikutnya:

    "!" (U + 0021)
    Beralih ke status terbuka deklarasi markup.

  3. 8.2.4.45 Status terbuka deklarasi markup :

    Jika dua karakter berikutnya adalah karakter "-" (U + 002D), gunakan dua karakter tersebut, buat token komentar yang datanya berupa string kosong, dan alihkan ke status mulai komentar.

    Jika tidak, jika tujuh karakter berikutnya adalah kecocokan tidak peka huruf ASCII untuk kata "DOCTYPE", maka konsumsilah karakter tersebut dan alihkan ke status DOCTYPE.

    Jika tidak, jika ada simpul saat ini yang disesuaikan dan itu bukan elemen dalam namespace HTML dan tujuh karakter berikutnya adalah kecocokan huruf besar-kecil untuk string "[CDATA [" (lima huruf besar "CDATA" dengan U + 005B LEFT SQUARE BRACKET karakter sebelum dan sesudah), kemudian gunakan karakter tersebut dan beralih ke status bagian CDATA.

    Kalau tidak, ini adalah kesalahan parse. Beralih ke status komentar palsu. Karakter berikutnya yang dikonsumsi, jika ada, adalah karakter pertama yang ada di komentar.

    Perhatikan bahwa ia mengatakan untuk beralih ke keadaan mulai komentar hanya jika urutan karakter yang ditemui adalah <!--, jika tidak, itu adalah komentar palsu. Ini mencerminkan apa yang dinyatakan dalam bagian 8.1.6 di atas.

  4. 8.2.4.44 Status komentar Bogus :

    Konsumsi setiap karakter hingga dan termasuk karakter ">" (U + 003E) pertama atau akhir file (EOF), mana yang lebih dulu. Keluarkan token komentar yang datanya merupakan gabungan dari semua karakter mulai dari dan termasuk karakter yang menyebabkan mesin negara beralih ke status komentar palsu, hingga dan termasuk karakter segera sebelum karakter yang terakhir dikonsumsi (yaitu hingga karakter tepat sebelum karakter U + 003E atau EOF), tetapi dengan karakter U + 0000 NULL yang digantikan oleh karakter U + FFFD REPLACEMENT CHARACTER. (Jika komentar dimulai pada akhir file (EOF), token kosong. Demikian pula, token kosong jika dihasilkan oleh string " <!>".)

    Dalam bahasa Inggris yang sederhana, ini berubah <!div displayed>menjadi <!--div displayed-->dan <!/div>menjadi <!--/div-->, persis seperti yang dijelaskan dalam pertanyaan.

Pada catatan akhir, Anda mungkin bisa mengharapkan parser yang mematuhi HTML5 berperilaku sama dengan Chrome.

BoltClock
sumber
11
Terima kasih telah meluangkan waktu untuk menemukan alasan resmi di balik kejadian ini. Ini membersihkan semuanya sedikit dan memberikan banyak validitas dengan asumsi salah saya.
Andrew
2
Sungguh aneh bagaimana spesifikasi HTML5 memiliki aturan untuk memproses konten "tidak valid". Jika tidak valid, seharusnya tidak diproses sama sekali.
Arturo Torres Sánchez
2
Nah, begitulah HTML dan bahasa web dulu - ketat. Alasan struktur kode yang tidak tepat diproses dengan ringan adalah untuk situs dengan kualitas lebih baik. Semakin banyak situs web yang dapat dilihat oleh browser, dan tampilan yang benar dengan sintaks yang salah, semakin bahagia pengguna akhir mereka. Penulis standar web umum (kebanyakan bukan yang lain), menyadari bahwa vendor browser tidak mengikuti pedoman karena hal ini. HTML5 datang dan hanya dibangun di atas ide untuk membuat desain secara resmi lebih lunak.
Andrew
3
@ ArturoTorresSánchez: XHTML mencoba pendekatan "konten tidak valid = kesalahan" dan gagal total. Selain itu, aturan pada dasarnya mengatakan "jangan uraikan komentar palsu ini, anggap saja sebagai komentar dan uraikan hal valid berikutnya yang Anda temukan". Jadi tergantung pada sudut pandang Anda, HTML5 tidak melakukan apa yang Anda inginkan karena apa yang Anda inginkan menyebalkan atau HTML5 melakukan apa yang Anda inginkan.
slebetman
1
@ ArturoTorresSánchez: Secara historis, server HTML akan mengharapkan untuk melayani urutan karakter yang sama untuk semua jenis browser; walaupun dimungkinkan untuk merancang format dokumen sedemikian rupa sehingga parser yang lebih tua akan dapat membedakan dokumen yang menggunakan fitur "opsional" yang lebih baru yang harus diabaikan oleh parser lama, dokumen yang menggunakan fitur vital yang lebih baru dan harus ditolak oleh browser yang tidak t mendukung mereka, dan dokumen yang hanya tidak valid, hal seperti itu tidak dilakukan dengan HTML selama tahun-tahun pembentukannya.
supercat
12

Saya tidak berpikir ini adalah kebiasaan yang baik untuk diambil karena <!singkatan dari deklarasi markup suka <!DOCTYPE. Jadi Anda pikir itu dikomentari (well ... browser akan mencoba menafsirkannya).

Bahkan jika itu tidak muncul, ini tampaknya bukan sintaks yang benar untuk mengomentari kode HTML.

Yves Lange
sumber
Meskipun itu mungkin benar, kenapa Chrome benar-benar membuat tag-tag itu dikomentari, tetapi sekarang doctype.
Andrew
4
Saran (saya tidak yakin, hanya menebak): mencoba menafsirkan> tidak dapat berkomentar?
Yves Lange
Bagi saya itu cukup masuk akal.
Andrew
Sekali lagi (maaf berkeras), tapi ketahuilah bahwa ini hanyalah dugaan!
Yves Lange