Ist es notwendig zu schreiben <html>
, <head>
und<body>
Tags?
Zum Beispiel kann ich eine solche Seite erstellen:
<!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>
Und Firebug trennt Kopf und Körper richtig:
Die W3C-Validierung gibt an, dass sie gültig ist.
Aber ich sehe diese Praxis selten im Internet.
Gibt es einen Grund, diese Tags zu schreiben?
title
Tag. Dies ist das kleinste Dokument, das es für gültig hält:<!DOCTYPE html> <title>A</title>
Antworten:
Weglassen der
html
,head
undbody
Tags wird sicherlich von den HTML - Spezifikationen erlaubt. Der Grund dafür ist, dass Browser immer versucht haben, mit vorhandenen Webseiten konsistent zu sein, und die sehr frühen Versionen von HTML haben diese Elemente nicht definiert. Beim HTML2.0Zuerst wurde es so gemacht, dass die Tags abgeleitet werden, wenn sie fehlen.Ich finde es oft bequem, die Tags beim Prototyping und insbesondere beim Schreiben von Testfällen wegzulassen, da dies dazu beiträgt, das Markup auf den betreffenden Test zu konzentrieren. Der Inferenzprozess sollte die Elemente genau erstellen, wie Sie es in Firebug sehen, und Browser sind dabei ziemlich konsistent.
Aber...
IE hat mindestens einen bekannten Fehler in diesem Bereich. Sogar IE9 zeigt dies. Angenommen, das Markup lautet wie folgt:
Sie sollten (und in anderen Browsern) ein DOM erhalten, das so aussieht:
Aber im IE bekommen Sie Folgendes:
Überzeugen Sie sich selbst.
Dieser Fehler scheint auf das
form
Start-Tag vor jedem Textinhalt und jedembody
Start-Tag beschränkt zu sein.quelle
Im Google Style Guide für HTML wird empfohlen, alle optionalen Tags wegzulassen.
Dazu gehört
<html>
,<head>
,<body>
,<p>
und<li>
.https://google.github.io/styleguide/htmlcssguide.html#Optional_Tags
quelle
<script src="http://localhost:35729/livereload.js"></script>
. Bei exotischen Vorlagen verstehen sie nicht, wo sie ihren Code einfügen sollen.Im Gegensatz zu @Liza Daly's Hinweis zu HTML5 ist diese Spezifikation tatsächlich ziemlich spezifisch darüber, welche Tags wann weggelassen werden können (und die Regeln unterscheiden sich ein wenig von HTML 4.01, hauptsächlich um zu verdeutlichen, wo mehrdeutige Elemente wie Kommentare und Leerzeichen hingehören).
Die relevante Referenz lautet http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#optional-tags und lautet:
Das Start-Tag eines HTML-Elements kann weggelassen werden, wenn das erste Element im HTML-Element kein Kommentar ist.
Das End-Tag eines HTML-Elements kann weggelassen werden, wenn auf das HTML-Element nicht sofort ein Kommentar folgt.
Das Start-Tag eines Kopfelements kann weggelassen werden, wenn das Element leer ist oder wenn das erste Element im Kopfelement ein Element ist.
Das End-Tag eines Kopfelements kann weggelassen werden, wenn dem Kopfelement nicht unmittelbar ein Leerzeichen oder ein Kommentar folgt.
Das Start-Tag eines Body-Elements kann weggelassen werden, wenn das Element leer ist oder wenn das erste Element im body-Element kein Leerzeichen oder Kommentar ist, es sei denn, das erste Element im body-Element ist ein Skript oder ein Stilelement.
Das End-Tag eines Body-Elements kann weggelassen werden, wenn auf das Body-Element nicht sofort ein Kommentar folgt.
Ihr Beispiel ist also gültiges HTML5 und wird wie folgt analysiert, wobei sich die HTML-, Kopf- und Body-Tags an ihren implizierten Positionen befinden:
Beachten Sie, dass der Kommentar "Dieses Skript wird im Kopf sein" tatsächlich als Teil des Körpers analysiert wird, obwohl das Skript selbst Teil des Kopfes ist. Laut der Spezifikation dürfen die Tags
</HEAD>
und<BODY>
nicht weggelassen werden , wenn Sie möchten, dass dies überhaupt anders ist . (Obwohl die entsprechenden<HEAD>
und</BODY>
Tags noch sein können)quelle
Es ist gültig, sie in HTML4 wegzulassen:
http://www.w3.org/TR/html401/struct/global.html
In HTML5 gibt es keine "erforderlichen" oder "optionalen" Elemente, da die HTML5-Syntax lockerer definiert ist. Zum Beispiel
title
:http://www.w3.org/TR/html5/semantics.html#the-title-element-0
Es ist nicht gültig, sie in echtem XHTML5 wegzulassen, obwohl dies fast nie verwendet wird (im Vergleich zu XHTML, das sich wie HTML5 verhält).
Aus praktischer Sicht möchten Sie jedoch häufig, dass Browser im "Standardmodus" ausgeführt werden, um die Vorhersagbarkeit beim Rendern von HTML und CSS zu gewährleisten. Durch die Bereitstellung eines DOCTYPE und eines strukturierteren HTML-Baums werden vorhersehbarere browserübergreifende Ergebnisse garantiert.
quelle
html
,head
undbody
sind die Elemente obligatorisch, aber die Tags sind optional.Es ist wahr, dass die HTML-Spezifikationen in bestimmten Fällen das Weglassen bestimmter Tags zulassen, dies ist jedoch im Allgemeinen unklug.
Es hat zwei Effekte - es macht die Spezifikation komplexer, was es wiederum für Browser-Autoren schwieriger macht, korrekte Implementierungen zu schreiben (wie der IE zeigt, wenn er falsch liegt).
Dies erhöht die Wahrscheinlichkeit von Browserfehlern in diesen Teilen der Spezifikation. Als Website-Autor können Sie das Problem vermeiden, indem Sie diese Tags einfügen. Obwohl die Spezifikation dies nicht vorschreibt, verringert dies die Wahrscheinlichkeit, dass etwas schief geht, was eine gute technische Praxis ist.
Darüber hinaus heißt es derzeit in der neuesten HTML 5.1 WG-Spezifikation (bedenken Sie, dass es sich um eine laufende Arbeit handelt, die sich möglicherweise noch ändert).
http://www.w3.org/html/wg/drafts/html/master/sections.html#the-body-element
Das ist etwas subtil. Sie können Körper und Kopf weglassen, und der Browser leitet dann ab, wo diese Elemente eingefügt werden sollen. Dies birgt das Risiko, nicht explizit zu sein, was zu Verwirrung führen kann.
Also das
führt dazu, dass das Skriptelement ein untergeordnetes Element des body-Elements ist, dies jedoch
würde dazu führen, dass das Skript-Tag ein untergeordnetes Element des head-Elements ist.
Sie könnten dies explizit tun
und je nachdem, was Sie zuerst haben, das Skript oder das h1, werden beide vorhersehbar im body-Element erscheinen. Dies sind Dinge, die beim Refactoring und Debuggen von Code leicht zu übersehen sind. (Nehmen wir zum Beispiel an, Sie haben JS, das nach dem ersten Skriptelement im Hauptteil sucht - im zweiten Snippet würde es nicht mehr funktionieren).
In der Regel ist es immer besser, explizit über Dinge zu sprechen, als sie der Interpretation zu überlassen. In dieser Hinsicht ist XHTML besser, weil es Sie dazu zwingt, Ihre Elementstruktur in Ihrem Code vollständig zu beschreiben, was es einfacher und daher weniger anfällig für Fehlinterpretationen macht.
Ja, Sie können sie weglassen und technisch gültig sein, aber es ist im Allgemeinen unklug, dies zu tun.
quelle
<!DOCTYPE html>
.Firebug zeigt dies korrekt an, da Ihr Browser das fehlerhafte Markup automatisch für Sie behebt. Dieses Verhalten ist nirgendwo angegeben und kann (wird) von Browser zu Browser variieren. Diese Tags werden von dem von Ihnen verwendeten DOCTYPE benötigt und sollten nicht weggelassen werden.
Das HTML-Element ist das Stammelement jeder HTML-Seite. Wenn Sie sich die Beschreibung aller anderen Elemente ansehen, wird angegeben, wo ein Element verwendet werden kann (und fast alle Elemente erfordern entweder Kopf oder Körper).
quelle
<title>
nach a<p></p>
zum Beispiel.)