¿Es necesario para escribir <html>
, <head>
y <body>
las etiquetas?
Por ejemplo, puedo hacer una página así:
<!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>
Y Firebug separa correctamente la cabeza y el cuerpo:
La validación de W3C dice que es válida.
Pero rara vez veo esta práctica en la web.
¿Hay alguna razón para escribir estas etiquetas?
title
etiqueta. Este es el documento más pequeño que considera válido:<!DOCTYPE html> <title>A</title>
Respuestas:
La omisión de los
html
,head
ybody
las etiquetas es, sin duda permitido por las especificaciones de HTML. La razón subyacente es que los navegadores siempre han tratado de ser coherentes con las páginas web existentes, y las primeras versiones de HTML no definieron esos elementos. Cuando HTML2,0primero lo hizo, se hizo de una manera que las etiquetas serían inferidas cuando faltan.A menudo me parece conveniente omitir las etiquetas al crear prototipos y especialmente al escribir casos de prueba, ya que ayuda a mantener el marcado centrado en la prueba en cuestión. El proceso de inferencia debe crear los elementos exactamente de la manera que se ve en Firebug, y los navegadores son bastante consistentes al hacerlo.
Pero...
IE tiene al menos un error conocido en esta área. Incluso IE9 exhibe esto. Supongamos que el marcado es este:
Debería (y lo hace en otros navegadores) obtener un DOM que se vea así:
Pero en IE obtienes esto:
Véalo usted mismo.
Este error parece estar limitado a la
form
etiqueta de inicio que precede a cualquier contenido de texto y a cualquierbody
etiqueta de inicio.fuente
La Guía de estilo de Google para HTML recomienda omitir todas las etiquetas opcionales.
Que incluye
<html>
,<head>
,<body>
,<p>
y<li>
.https://google.github.io/styleguide/htmlcssguide.html#Optional_Tags
fuente
<script src="http://localhost:35729/livereload.js"></script>
. Para las plantillas exóticas, no entienden dónde deben insertar su código.Contrariamente a la nota de @Liza Daly sobre HTML5, esa especificación es bastante específica sobre qué etiquetas se pueden omitir y cuándo (y las reglas son un poco diferentes de HTML 4.01, principalmente para aclarar dónde pertenecen elementos ambiguos como los comentarios y los espacios en blanco)
La referencia relevante es http://www.w3.org/TR/2011/WD-html5-20110525/syntax.html#optional-tags , y dice:
La etiqueta de inicio de un elemento html puede omitirse si lo primero dentro del elemento html no es un comentario.
La etiqueta final de un elemento html puede omitirse si el elemento html no es seguido inmediatamente por un comentario.
La etiqueta de inicio de un elemento principal puede omitirse si el elemento está vacío, o si lo primero dentro del elemento principal es un elemento.
La etiqueta final de un elemento principal puede omitirse si el elemento principal no es seguido inmediatamente por un carácter de espacio o un comentario.
La etiqueta de inicio de un elemento del cuerpo puede omitirse si el elemento está vacío, o si lo primero dentro del elemento del cuerpo no es un carácter de espacio o un comentario, excepto si lo primero dentro del elemento del cuerpo es un script o un elemento de estilo.
La etiqueta final de un elemento del cuerpo puede omitirse si el elemento del cuerpo no es seguido inmediatamente por un comentario.
Por lo tanto, su ejemplo es HTML5 válido y se analizaría de esta manera, con las etiquetas html, head y body en sus posiciones implícitas:
Tenga en cuenta que el comentario "este script estará en la cabeza" en realidad se analiza como parte del cuerpo, aunque el script en sí es parte de la cabeza. De acuerdo con la especificación, si desea que sea diferente, entonces las etiquetas
</HEAD>
y<BODY>
no pueden omitirse. (Aunque las etiquetas correspondientes<HEAD>
y</BODY>
todavía pueden ser)fuente
Es válido omitirlos en HTML4:
http://www.w3.org/TR/html401/struct/global.html
En HTML5, no hay elementos "obligatorios" u "opcionales" exactamente, ya que la sintaxis HTML5 se define más libremente. Por ejemplo
title
:http://www.w3.org/TR/html5/semantics.html#the-title-element-0
No es válido omitirlos en XHTML5 verdadero, aunque eso casi nunca se usa (frente a HTML5 que actúa como XHTML).
Sin embargo, desde un punto de vista práctico, a menudo desea que los navegadores se ejecuten en "modo estándar", para la previsibilidad en la representación de HTML y CSS. Proporcionar un DOCTYPE y un árbol HTML más estructurado garantizará resultados más predecibles entre navegadores.
fuente
html
,head
ybody
, los elementos son obligatorios, pero las etiquetas son opcionales.Es cierto que las especificaciones HTML permiten que se omitan ciertas etiquetas en ciertos casos, pero generalmente no es aconsejable hacerlo.
Tiene dos efectos: hace que la especificación sea más compleja, lo que a su vez hace que sea más difícil para los autores de navegadores escribir implementaciones correctas (como demostró que IE lo hizo mal).
Esto hace que la probabilidad de errores del navegador en estas partes de la especificación sea alta. Como autor de un sitio web, puede evitar el problema al incluir estas etiquetas, por lo que, aunque la especificación no dice que tiene que hacerlo, reduce la posibilidad de que las cosas salgan mal, lo cual es una buena práctica de ingeniería.
Además, la última especificación HTML 5.1 WG dice actualmente (tenga en cuenta que es un trabajo en progreso y aún puede cambiar).
http://www.w3.org/html/wg/drafts/html/master/sections.html#the-body-element
Esto es un poco sutil. Puede omitir cuerpo y cabeza, y el navegador deducirá dónde deben insertarse esos elementos. Esto conlleva el riesgo de no ser explícito, lo que podría causar confusión.
Así que esto
da como resultado que el elemento de script sea hijo del elemento body, pero esto
daría como resultado que la etiqueta del script sea un elemento secundario del elemento head.
Podrías ser explícito al hacer esto
y luego, lo que tenga primero, el script o el h1, ambos aparecerán, previsiblemente, en el elemento del cuerpo. Estas son cosas que son fáciles de pasar por alto al refactorizar y depurar código. (por ejemplo, tiene JS que está buscando el primer elemento de script en el cuerpo; en el segundo fragmento dejaría de funcionar).
Como regla general, ser explícito sobre las cosas siempre es mejor que dejar las cosas abiertas a la interpretación. En este sentido, XHTML es mejor porque te obliga a ser completamente explícito sobre la estructura de tu elemento en tu código, lo que lo hace más simple y, por lo tanto, menos propenso a malinterpretar.
Entonces sí, puede omitirlos y ser técnicamente válido, pero generalmente no es prudente hacerlo.
fuente
<!DOCTYPE html>
.Firebug muestra esto correctamente porque su navegador corrige automáticamente el marcado incorrecto por usted. Este comportamiento no se especifica en ninguna parte y puede (variará) de un navegador a otro. Esas etiquetas son requeridas por el DOCTYPE que está utilizando y no deben omitirse.
El elemento html es el elemento raíz de cada página html. Si nos fijamos en la descripción de todos los demás elementos, dice dónde se puede usar un elemento (y casi todos los elementos requieren cabeza o cuerpo).
fuente
<title>
después de un<p></p>
, por ejemplo.)