Apakah perlu menulis <html>
, <head>
dan memberi <body>
tag?
Sebagai contoh, saya dapat membuat halaman seperti itu:
<!DOCTYPE html>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
<title>Page Title</title>
<link rel="stylesheet" type="text/css" href="css/reset.css">
<script src="js/head_script.js"></script><!-- this script will be in head //-->
<div>Some html</div> <!-- here body starts //-->
<script src="js/body_script.js"></script>
Dan Firebug memisahkan kepala dan tubuh dengan benar:
Validasi W3C mengatakan itu valid.
Tetapi saya jarang melihat latihan ini di web.
Apakah ada alasan untuk menulis tag ini?
title
tag. Ini adalah dokumen terkecil yang dianggap sah:<!DOCTYPE html> <title>A</title>
Jawaban:
Menghilangkan tanda
html
,,head
danbody
tag tentu saja diizinkan oleh spesifikasi HTML. Alasan yang mendasarinya adalah bahwa browser selalu berusaha untuk konsisten dengan halaman web yang ada, dan versi awal HTML tidak mendefinisikan elemen-elemen itu. Ketika HTML2.0pertama kali, itu dilakukan dengan cara bahwa tag akan disimpulkan ketika hilang.Saya sering merasa nyaman untuk menghilangkan tag saat membuat prototipe dan terutama ketika menulis kasus uji karena membantu menjaga mark-up terfokus pada tes yang dimaksud. Proses inferensi harus membuat elemen persis seperti yang Anda lihat di Firebug, dan browser cukup konsisten dalam melakukan itu.
Tapi...
IE memiliki setidaknya satu bug yang dikenal di area ini. Bahkan IE9 menunjukkan ini. Misalkan markupnya adalah ini:
Anda harus (dan lakukan di browser lain) mendapatkan DOM yang terlihat seperti ini:
Tetapi di IE Anda mendapatkan ini:
Lihat sendiri.
Bug ini tampaknya terbatas pada
form
tag awal sebelum konten teks apa pun danbody
tag awal apa pun .sumber
Panduan Gaya Google untuk HTML merekomendasikan untuk menghapus semua tag opsional.
Itu termasuk
<html>
,<head>
,<body>
,<p>
dan<li>
.https://google.github.io/styleguide/htmlcssguide.html#Optional_Tags
sumber
<script src="http://localhost:35729/livereload.js"></script>
. Untuk templat eksotis, mereka tidak mengerti di mana mereka harus memasukkan kode mereka.Berlawanan dengan catatan @Liza Daly tentang HTML5, spek itu sebenarnya cukup spesifik tentang tag mana yang dapat dihilangkan, dan kapan (dan aturannya sedikit berbeda dari HTML 4.01, sebagian besar untuk memperjelas di mana elemen ambigu seperti komentar dan spasi termasuk)
Referensi yang relevan adalah http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#optional-tags , dan dikatakan:
Tag awal elemen html dapat dihilangkan jika hal pertama di dalam elemen html bukan komentar.
Tag akhir elemen html dapat dihilangkan jika elemen html tidak segera diikuti oleh komentar.
Tag awal elemen kepala dapat dihilangkan jika elemen kosong, atau jika hal pertama di dalam elemen kepala adalah elemen.
Tag akhir elemen kepala dapat dihilangkan jika elemen kepala tidak segera diikuti oleh karakter spasi atau komentar.
Tag awal elemen tubuh dapat dihilangkan jika elemen kosong, atau jika hal pertama di dalam elemen tubuh bukan karakter spasi atau komentar, kecuali jika hal pertama di dalam elemen tubuh adalah skrip atau elemen gaya.
Tag akhir elemen tubuh dapat dihilangkan jika elemen tubuh tidak segera diikuti oleh komentar.
Jadi contoh Anda adalah HTML5 yang valid, dan akan diuraikan seperti ini, dengan tag html, kepala dan badan di posisi tersirat mereka:
Perhatikan bahwa komentar "skrip ini akan ada di kepala" sebenarnya diuraikan sebagai bagian dari tubuh, meskipun skrip itu sendiri adalah bagian dari kepala. Menurut spesifikasi, jika Anda ingin itu sama sekali berbeda, maka tag
</HEAD>
dan<BODY>
mungkin tidak dihilangkan. (Meskipun tag yang sesuai<HEAD>
dan</BODY>
masih bisa)sumber
Ini valid untuk menghilangkannya dalam HTML4:
http://www.w3.org/TR/html401/struct/global.html
Di HTML5, tidak ada elemen "wajib" atau "opsional" yang tepat, karena sintaksis HTML5 lebih longgar. Sebagai contoh
title
:http://www.w3.org/TR/html5/semantics.html#the-title-element-0
Menghilangkan mereka dalam XHTML5 benar, meskipun hampir tidak pernah digunakan (dibandingkan XHTML-acting-like-HTML5).
Namun, dari sudut pandang praktis Anda sering ingin browser dijalankan dalam "mode standar," untuk dapat diprediksi dalam rendering HTML dan CSS. Menyediakan DOCTYPE dan struktur HTML yang lebih terstruktur akan menjamin hasil lintas-browser yang lebih mudah diprediksi.
sumber
html
,head
danbody
, elemen-elemen itu wajib, tetapi tag itu opsional.Memang benar bahwa spesifikasi HTML mengizinkan tag tertentu untuk dihilangkan dalam kasus tertentu, tetapi secara umum melakukannya tidak bijaksana.
Ini memiliki dua efek - itu membuat spec lebih kompleks, yang pada gilirannya membuat penulis browser lebih sulit untuk menulis implementasi yang benar (seperti yang ditunjukkan oleh IE yang salah).
Ini membuat kemungkinan kesalahan peramban di bagian-bagian spesifikasi ini tinggi. Sebagai penulis situs web, Anda dapat menghindari masalah dengan memasukkan tag ini - jadi sementara spek tidak mengatakan Anda harus melakukannya, hal itu mengurangi kemungkinan terjadi kesalahan, yang merupakan praktik rekayasa yang baik.
Terlebih lagi, spesifikasi HTML 5.1 WG terbaru saat ini mengatakan (perlu diingat ini adalah pekerjaan yang sedang berlangsung dan mungkin akan berubah).
http://www.w3.org/html/wg/drafts/html/master/sections.html#the-body-element
Ini agak halus. Anda dapat menghilangkan body dan head, dan browser kemudian akan menyimpulkan di mana elemen-elemen itu harus dimasukkan. Ini membawa risiko tidak eksplisit, yang dapat menyebabkan kebingungan.
Jadi ini
menghasilkan elemen skrip menjadi anak dari elemen tubuh, tapi ini
akan menghasilkan tag skrip menjadi anak dari elemen kepala.
Anda bisa eksplisit dengan melakukan ini
dan kemudian yang mana pun yang Anda miliki pertama kali, skrip atau h1, keduanya akan, diprediksi muncul di elemen tubuh. Ini adalah hal-hal yang mudah diabaikan saat melakukan refactoring dan debugging kode. (misalnya, Anda memiliki JS yang mencari elemen skrip 1 di badan - di cuplikan kedua ia akan berhenti berfungsi).
Sebagai aturan umum, menjadi eksplisit tentang hal-hal selalu lebih baik daripada membiarkan hal-hal terbuka untuk interpretasi. Dalam hal ini XHTML lebih baik karena memaksa Anda untuk sepenuhnya eksplisit tentang struktur elemen Anda dalam kode Anda, yang membuatnya lebih sederhana, dan karenanya kurang rentan terhadap salah tafsir.
Jadi ya, Anda dapat menghilangkannya dan secara teknis valid, tetapi umumnya tidak bijaksana untuk melakukannya.
sumber
<!DOCTYPE html>
.Firebug menunjukkan ini dengan benar karena Browser Anda secara otomatis memperbaiki markup buruk untuk Anda. Perilaku ini tidak ditentukan di mana pun dan dapat (akan) bervariasi dari browser ke browser. Tag tersebut diperlukan oleh DOCTYPE yang Anda gunakan dan tidak boleh dihilangkan.
The elemen html adalah elemen akar setiap halaman html. Jika Anda melihat deskripsi semua elemen lain, dikatakan di mana elemen dapat digunakan (dan hampir semua elemen memerlukan kepala atau badan).
sumber
<title>
setelah<p></p>
, misalnya.)