Jest to konieczne, aby napisać <html>
, <head>
i <body>
znaczniki?
Na przykład mogę zrobić taką stronę:
<!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>
A Firebug poprawnie oddziela głowę i ciało:
Walidacja W3C mówi, że jest ważna.
Ale rzadko widzę tę praktykę w Internecie.
Czy jest jakiś powód, aby pisać te tagi?
title
znacznika. Jest to najmniejszy dokument, który uważa za ważny:<!DOCTYPE html> <title>A</title>
Odpowiedzi:
Pomijając
html
,head
orazbody
znaczniki pewnością jest dozwolone przez specyfikację HTML. Głównym powodem jest to, że przeglądarki zawsze starały się być spójne z istniejącymi stronami internetowymi, a bardzo wczesne wersje HTML nie definiowały tych elementów. Kiedy HTML2.0po pierwsze, zrobiono to w taki sposób, aby tagi były wywnioskowane, gdy brakowało.Często uważam, że wygodne jest pomijanie tagów podczas prototypowania, a zwłaszcza podczas pisania przypadków testowych, ponieważ pomaga to skupić się na analizie. Proces wnioskowania powinien tworzyć elementy dokładnie w taki sposób, jak w Firebug, a przeglądarki są w tym dość konsekwentne.
Ale...
IE ma co najmniej jeden znany błąd w tym obszarze. Nawet IE9 to pokazuje. Załóżmy, że znacznik jest następujący:
Powinieneś (i zrobić to w innych przeglądarkach) DOM, który wygląda następująco:
Ale w IE dostajesz to:
Przekonaj się sam.
Ten błąd wydaje się ograniczony do
form
znacznika początkowego poprzedzającego dowolną treść tekstową i dowolnybody
znacznik początkowy.źródło
Przewodnik po stylach Google dla HTML zaleca pominięcie wszystkich opcjonalnych tagów.
Która obejmuje
<html>
,<head>
,<body>
,<p>
i<li>
.https://google.github.io/styleguide/htmlcssguide.html#Optional_Tags
źródło
<script src="http://localhost:35729/livereload.js"></script>
. W przypadku szablonów egzotycznych nie rozumieją, gdzie powinny wstawić kod.W przeciwieństwie do uwagi @Liza Daly na temat HTML5, ta specyfikacja jest w rzeczywistości dość konkretna w kwestii tego, które tagi można pominąć i kiedy (a reguły są nieco inne niż HTML 4.01, głównie w celu wyjaśnienia, gdzie należą niejednoznaczne elementy, takie jak komentarze i białe znaki)
Odpowiedni odnośnik to http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#optional-tags i mówi:
Znacznik początkowy elementu html można pominąć, jeśli pierwszą rzeczą wewnątrz elementu html nie jest komentarz.
Znacznik końcowy elementu html można pominąć, jeśli po elemencie html nie następuje od razu komentarz.
Znacznik początkowy elementu head może zostać pominięty, jeśli element jest pusty lub jeśli pierwszą rzeczą wewnątrz elementu head jest element.
Znacznik końcowy elementu head można pominąć, jeśli po elemencie head nie następuje natychmiast znak spacji lub komentarz.
Znacznik początkowy elementu body można pominąć, jeśli element jest pusty lub pierwsza rzecz wewnątrz elementu body nie jest znakiem spacji lub komentarzem, z wyjątkiem sytuacji, gdy pierwszą rzeczą wewnątrz elementu body jest skrypt lub element stylu.
Znacznik końcowy elementu body można pominąć, jeśli po elemencie body nie następuje natychmiast komentarz
Tak więc twój przykład jest prawidłowym HTML5 i zostałby przeanalizowany w ten sposób, z tagami html, head i body w domyślnych pozycjach:
Zauważ, że komentarz „ten skrypt będzie w głowie” jest tak naprawdę analizowany jako część ciała, chociaż sam skrypt jest częścią głowy. Zgodnie ze specyfikacją, jeśli chcesz, aby w ogóle było inaczej, tagi
</HEAD>
i<BODY>
mogą nie zostać pominięte. (Mimo że odpowiednie<HEAD>
i</BODY>
tagi nadal mogą być)źródło
Można je pominąć w HTML4:
http://www.w3.org/TR/html401/struct/global.html
W HTML5 nie ma dokładnie „wymaganych” lub „opcjonalnych” elementów, ponieważ składnia HTML5 jest bardziej luźno zdefiniowana. Na przykład
title
:http://www.w3.org/TR/html5/semantics.html#the-title-element-0
Pomijanie ich w prawdziwym XHTML5 jest nieprawidłowe, chociaż prawie nigdy nie jest używane (w porównaniu z XHTML-podobnym do HTML5).
Jednak z praktycznego punktu widzenia często chcesz, aby przeglądarki działały w „trybie standardów”, aby zapewnić przewidywalność renderowania HTML i CSS. Zapewnienie DOCTYPE i bardziej uporządkowanego drzewa HTML zagwarantuje bardziej przewidywalne wyniki w różnych przeglądarkach.
źródło
html
,head
abody
elementy są obowiązkowe, ale tagi są opcjonalne.To prawda, że specyfikacje HTML pozwalają na pominięcie niektórych tagów w niektórych przypadkach, ale generalnie jest to nierozsądne.
Ma dwa efekty - sprawia, że specyfikacja jest bardziej złożona, co z kolei utrudnia autorom przeglądarki pisanie poprawnych implementacji (jak pokazuje błąd IE).
To zwiększa prawdopodobieństwo błędów przeglądarki w tych częściach specyfikacji. Jako autor strony internetowej możesz uniknąć tego problemu, dołączając te tagi - więc chociaż specyfikacja nie mówi, że musisz, to zmniejsza to ryzyko błędu, co jest dobrą praktyką inżynierską.
Co więcej, najnowsza specyfikacja HTML 5.1 WG mówi obecnie (pamiętaj, że jest to praca w toku i może się jeszcze zmienić).
http://www.w3.org/html/wg/drafts/html/master/sections.html#the-body-element
To jest trochę subtelne. Możesz pominąć ciało i głowę, a przeglądarka określi, gdzie należy wstawić te elementy. Niesie to za sobą ryzyko braku jawności, co może powodować zamieszanie.
Więc to
powoduje, że element script jest dzieckiem elementu body, ale to
spowoduje, że tag skryptu będzie potomkiem elementu head.
Możesz to zrobić wyraźnie
a następnie cokolwiek masz najpierw, skrypt lub h1, oba będą, jak można się spodziewać, pojawią się w elemencie ciała. Są to rzeczy, które łatwo przeoczyć podczas refaktoryzacji i debugowania kodu. (powiedzmy na przykład, że masz JS, który szuka pierwszego elementu skryptu w ciele - w drugim fragmencie przestałby działać).
Zasadą jest, że wyrażanie się na różne tematy jest zawsze lepsze niż pozostawianie rzeczy otwartych na interpretację. Pod tym względem XHTML jest lepszy, ponieważ zmusza cię do całkowitego wyrażenia swojej struktury elementu w kodzie, co czyni go prostszym, a zatem mniej podatnym na błędną interpretację.
Więc tak, możesz je pominąć i być technicznie poprawnym, ale generalnie jest to nierozsądne.
źródło
<!DOCTYPE html>
.Firebug pokazuje to poprawnie, ponieważ Twoja przeglądarka automatycznie naprawia dla ciebie złe znaczniki. To zachowanie nie jest nigdzie określone i może (będzie) różnić się w zależności od przeglądarki. Te tagi są wymagane przez używany DOCTYPE i nie należy ich pomijać.
Element HTML jest elementem głównym każdej strony HTML. Jeśli spojrzysz na opis wszystkich innych elementów, zobaczysz, gdzie można użyć elementu (i prawie wszystkie elementy wymagają głowy lub ciała).
źródło
<title>
po<p></p>
na przykład.)