210 votes

Est-il nécessaire d’écrire les balises HTML, le corps et la tête ?

Il est nécessaire d’écrire , et `` tags ?

Par exemple, je peux faire une telle page :

Et Firebug sépare correctement la tête et le corps :enter image description here

Validation W3C dit qu’il est valide.

Mais je vois rarement cette pratique sur le web.

Y a-t-il une raison quelconque d’écrire ces balises ?

151voto

Alohci Points 30645

L'omission de la html, head, et body tags est certainement autorisé par les spécifications HTML. La raison sous-jacente est que les navigateurs ont toujours cherché à être en accord avec les pages web, et les premières versions de HTML n'a pas de définir ces éléments. Quand HTML 2.0 première l'a fait, il l'a fait en sorte que les balises serait déduite lorsque manquant.

Je trouve souvent qu'il est commode d'omettre les balises lorsque le prototypage et en particulier lors de l'écriture des cas de tests, comme il aide à garder la marque axée sur le test en question. Le processus d'inférence doit créer les éléments exactement de la manière que vous voyez dans Firebug, et les navigateurs sont assez cohérentes.

Mais...

IE a au moins un bug connu dans ce domaine. Même IE9 expositions. Supposons que le balisage est bien présent:

<!DOCTYPE html>
<title>Test case</title>
<form action='#'>
   <input name="var1">
</form>

Vous devriez (et dans d'autres navigateurs) obtenir un DOM qui ressemble à ceci:

HTML
    HEAD
        TITLE
    BODY
        FORM action="#"
            INPUT name="var1"

Mais dans IE vous obtenez ceci:

HTML
    HEAD
       TITLE
       FORM action="#"
           BODY
               INPUT name="var1"
    BODY

Voir pour vous-même à http://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0D%0A%3Ctitle%3ETest%20case%3C%2Ftitle%3E%0D%0A%3Cform%20action%3D%22%23%22%3E%0D%0A%3Cinput%20name%3D%22var1%22%3E%0D%0A%3C%2Fform%3E%0D%0A

Ce bug semble limitée à l' form balise de début précédent, le contenu textuel et tout body balise de début.

89voto

Rima Points 51

Le Google Guide de Style pour HTML recommande d'omettre toutes les balises facultatives. Qui inclut <html>, <head>,<body>, <p>, and <li>.

Google ne comprennent une remarque cependant recommandant que "Cette approche peut nécessiter un délai de grâce d'être établie que d'une plus grande orientation que c'est sensiblement différents de ce que les développeurs web sont généralement enseignées. Pour des raisons de cohérence et de simplicité de raisons c'est mieux servi en omettant toutes les balises facultatives, pas juste un choix."

<!-- Not recommended -->
<!DOCTYPE html>
<html>
  <head>
     <title>Spending money, spending bytes</title>
  </head>
  <body>
    <p>Sic.</p>
  </body>
</html>

<!-- Recommended -->
<!DOCTYPE html>
<title>Saving money, saving bytes</title>
<p>Qed.

http://google-styleguide.googlecode.com/svn/trunk/htmlcssguide.xml#Optional_Tags

51voto

Ian Clelland Points 15066

Contrairement à @Liza Daly note sur l'HTML5, cette spécification est en fait tout à fait spécifique à propos des étiquettes qui peuvent être omis, et quand (et les règles sont un peu différentes de HTML 4.01, principalement à clarifier les éléments ambigus, comme les commentaires et les espaces appartiennent)

La référence pertinent est http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#optional-tagset il dit:

  • Un élément html de la balise de début peut être omis si la première chose à l'intérieur de l'élément html n'est pas un commentaire.

  • Un élément html de la balise de fin peut être omis si l'élément html n'est pas immédiatement suivi d'un commentaire.

  • Un élément de tête de la balise de début peut être omis si l'élément est vide, ou si la première chose à l'intérieur de l'élément de tête est un élément.

  • Un élément de tête de la balise de fin peut être omis si l'élément de tête n'est pas immédiatement suivie par un caractère espace ou un commentaire.

  • Un élément de corps de la balise de début peut être omis si l'élément est vide, ou si la première chose à l'intérieur de l'élément de corps n'est pas un espace ou un commentaire, sauf si la première chose à l'intérieur de l'élément de corps est un script ou un élément de style.

  • Un élément de corps de la balise de fin peut être omis si le corps de l'élément n'est pas immédiatement suivi d'un commentaire.

Donc ton exemple est valide HTML5, et serait analysée comme ça, avec le code html, la tête et le corps des balises dans leurs implicite positions:

<!DOCTYPE html><HTML><HEAD>     
    <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></HEAD><BODY><!-- this script will be in head //-->


<div>Some html</div> <!-- here body starts //-->

    <script src="js/body_script.js"></script></BODY></HTML>

Notez que le commentaire "ce script doit être dans la tête" est réellement analysée comme une partie du corps, bien que le script lui-même est une partie de la tête. Selon la spécification, si vous voulez être différent, alors l' </HEAD> et <BODY> balises ne peuvent pas être omis. (Bien que la correspondante <HEAD> et </BODY> balises qui peut encore l'être)

16voto

Liza Daly Points 1855

C'est valable pour les omettre dans le HTML4:

7.3 The HTML element
start tag: optional, End tag: optional

7.4.1 The HEAD element
start tag: optional, End tag: optional

http://www.w3.org/TR/html401/struct/global.html

En HTML5, il n'y a pas "nécessaire" ou "facultatif" éléments exactement, comme l'HTML5 syntaxe est plus vaguement définis. Par exemple, title:

Le titre de l'élément est un enfant dans la plupart des situations, mais quand un protocole de niveau supérieur fournit des informations de titre, par exemple, dans la ligne d'Objet de l'un e-mail lorsque de HTML est utilisé comme un e-mail de création de format, le titre de l'élément peut être omis.

http://www.w3.org/TR/html5/semantics.html#the-title-element-0

Il n'est pas valide pour les omettre dans le vrai XHTML5, même si ce n'est presque jamais utilisé (par rapport à XHTML-intérim-comme-HTML5).

Cependant, à partir d'un point de vue pratique, vous souhaitez souvent les navigateurs pour s'exécuter en "mode standard" pour la prévisibilité dans le rendu HTML et CSS. Fournir un DOCTYPE et plus structurées HTML arbre de garantie de plus en plus prévisible de la croix-navigateur de résultats.

16voto

Peter Bagnall Points 738

Il est vrai que le code HTML spécifications permettre à certaines balises être omis dans certains cas, mais en général, cela est imprudent.

Il a deux effets: la spec de plus en plus complexes, ce qui rend plus difficile pour navigateur les auteurs à écrire corriger les implémentations (comme démontré par IE se tromper).

Cela rend la probabilité de navigateur erreurs dans ces parties de la spécification de haut. Comme un site web de l'auteur vous pouvez éviter le problème en incluant ces balises - ainsi, alors que la spec ne veut pas dire que vous devez, ce qui réduit la chance de choses qui vont mal, qui est de bonnes pratiques d'ingénierie.

Qui plus est, la dernière HTML 5.1 GT spec actuellement dit (garder à l'esprit c'est un travail en cours et peut encore changer).

Un élément de corps de la balise de début peut être omis si l'élément est vide, ou si la première chose à l'intérieur de l'élément de corps n'est pas un caractère d'espace ou un commentaire, sauf si la première chose à l'intérieur de l'élément de corps est une meta, link, script, style, ou un élément du modèle.

http://www.w3.org/html/wg/drafts/html/master/sections.html#the-body-element

C'est un peu subtile. Vous pouvez omettre le corps et la tête, et le navigateur va alors en déduire où ces éléments doivent être insérés. Cela comporte le risque de ne pas être explicite, ce qui pourrait causer de la confusion.

Donc, ce

<html>
  <h1>hello</h1>
  <script ... >
  ...

résultats dans le script de l'élément enfant de l'élément de corps, mais présent

<html>
  <script ... >
  <h1>hello</h1>

le résultat serait dans la balise script d'être un enfant de l'élément de tête.

Vous pourriez être explicite en faisant cela

<html>
    <body>
      <script ... >
      <h1>hello</h1>

et puis selon ce que vous avez tout d'abord, le script ou le h1, ils seront tous deux, de manière prévisible apparaissent dans le corps de l'élément. Ce sont des choses qui sont faciles à oublier tout de refactoring et de débogage de code. (disons par exemple, vous avez JS qui est à la recherche pour le 1er élément de script dans le corps - dans le deuxième extrait, il serait d'arrêt de travail).

En règle générale, être explicite sur les choses, c'est toujours mieux que de laisser les choses ouvertes à l'interprétation. À cet égard, le XHTML est meilleure car elle vous oblige à être complètement explicite au sujet de votre structure de l'élément dans votre code, ce qui rend plus simple, et donc moins sujettes à des erreurs d'interprétation.

Donc oui, vous pouvez les omettre et techniquement valable, mais il est généralement déconseillé de le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X