jueves, octubre 20, 2005

(HTML) DOCTYPE

La declaración DOCTYPE


Si has leido estos apuntes desde el principio recordarás que una de las primeras cosas que se decian era que ninguna etiqueta precedia a la etiqueta html al comienzo del documento.



Tambien decíamos que la excepción era la declaración DOCTYPE. Es el momento de ocuparnos de ella.


DOCTYPE se refiere, obviamente, al tipo de documento. Mas técnicamente, podemos decir que un documento HTML válido debe declarar cual de las versiones de HTML está siguiendo, y puede además señalar la DTD (Document Type Definition) correspondiente.



Aunque luego los veremos con mas detalle, fíjate en la declaración de DOCTYPE html estricto, es decir, el que sigue con mas rigor el standard html:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
... resto de la página ...

Donde vemos que en definitiva se trata de declarar al principio del documento cual es su contenido: en este caso, que se trata de un documento escrito en html, version 4.01, en inglés (Advierte que lo que se identifica como inglés no es el contenido del documento, sino el lenguaje de marcas utilizado. Los documentos HTML siempre deben estar marcados como EN); a continuación en la línea siguiente se incluye una URI (concepto similar a URL, pero mas amplio) donde el navegador puede obtener la DTD y descargarla si la precisa.


versiones de DOCTYPE en html


Limitándonos ahora al html, podemos decir que la version 4.01 (que va a ser la última, ya no hay mas, las siguientes serán xhtml y familia) admite tres tipos de documento:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">

El primero es el que ya conocemos, html estricto, es decir, el mas ajustado al estandard. Un documento que se ajuste a esta declaración NO puede tener frames, ni elementos html que se hayan declarado en desuso. Para entendernos: en los documentos estrictos no puedes usar etiquetas html relacionadas con la presentación del texto, como el elemento font o el atributo align. Para esta finalidad debes usar solo CSS. Ajustarse plenamente a la sintaxis html puede ofrecer alguna dificultad, y por ello aunque es el modo recomendado por el W3C, en la práctica suelen usarse DOCTYPES mas tolerantes



El html transicional incluye todo lo que incluye el DTD estricto más los elementos y atributos declarados en desuso. Digamos que este es el tipo de declaración mas flexible, y la que se usa con mas frecuencia.



Por ultimo la tercera declaración se emplea para documentos html con frames, y es idéntica a la declaración de html transicional, solo que con dicho soporte para frames.


Utilidad práctica. Quirk mode v. standard mode


Las actuales versiones de mozilla 1+ (netscape 6+) y iexplorer (6+) cambian la forma en la que visualizan documentos html dependiendo de la DOCTYPE utilizada en el documento. En algunos caso lo visualizan ajustandose todo lo que son capaces a los standards oficiales ("Standard Mode"), mientras que en otro caso emulan la visualización (no ajustada a estos estandards) de los navegadores antiguos. Por ejemplo, Mozilla y Netscape tienen lo que llaman Quirk Mode que interpreta la página como lo haría la antigua version de netscape 4.x.



La razón de esto es que los diseñadores de navegadores son conscientes de que hay millones de páginas en internet que no están "bien escritas" desde el punto de vista del standard oficial, y que nunca van a ser corregidas. Estas páginas se solían ver razonablemente bien en los navegadores antiguos, mucho mas tolerantes (y a la vez imprecisos) en la interpretación de las etiquetas html. Para evitar que este legado de páginas no pudiera verse en los nuevos (e indudablemente mejores) navegadores, estos intentan determinar que a tipo de documento se enfrentan a traves del doctype, ajustando su visualización.


Mozilla


Mozilla tiene tres modos, que son standard, casi standard, y quirk mode.



El Quirk Mode, Mozilla se comporta como lo haría el Navigator 4, es decir, que ignorará cualquier irregularidad de código que encuentre, intentando mostrar el contenido a toda costa.



el modo casi standard emula al navigator en menor medida, y el modo standard se ajusta a las prescripciones del w3c.


Las siguientes DOCTYPE lanzan el modo standard:



  • Cualquier documento que llegue al navegador como XML

  • Cualquier documento que tenga un doctype correcto correspondiente a las versiones html 4.01, 4.0 o xhtml 1.0

  • Cualquier documento con DOCTYPE fijada como "DOCTYPE HTML SYSTEM"

  • Cualquier Doctype que no indique su DTD


El modo "casi standard" (solo existente en las versiones siguientes a Mozilla 1.0) se lanza:



  • Con los DOCTYPE correspondientes a XHTML transicional y frameset

  • Con los DOCTYPE correspondientes al HTML 4.01 transicional y frameset.


Y finalmente en quirk mode:

  • Cuando el documento carece de DOCTYPE

  • Cuando tiene una declaración DOCTYPE que no puede ser entendida (mal escrita, etc)

  • Cuando el DOCTYPE hace referencia a una versión de html anterior a la 4.0


Puedes ver con mas detalle el tema del quirk mode aqui.


iexplorer


Microsoft tambien tiene un modo de visualización "ajustado a los standard" que se lanza siempre que hay al comienzo del documento una declaración DOCTYPE valida, necesitandose además en algun caso incluir la URI de la DTD. (es decir, el DOCTYPE completo como mostramos al principio de esta pagina).



Este modo ajustado es desactivado cuando no existe declaración DOCTYPE, o si existe, pero no se refiere a ninguna versión concreta de HTML, o se refiere a una versión anterior a 4.0. (ojo, solo si esta version anterior es la 3.2, la 2.0 o la 2)



Si el DOCTYPE se refiere a HTML transicional o con soporte de frames, solo se lanza el modo estricto si ademas del DOCTYPE se adjunta la URI de la DTD.



También se lanza el modo estricto si la DOCTYPE se refiere a la version HTML 4.0strict o en general cuando se refiere a la versión 4.0 sin mas especificación.



Finalmente tambien se lanza el modo estricto si existe un DOCTYPE no reconocido, o si se refiere a las versiones HTML 1.0 o HTML 3.22.



Puedes ver una tabla completa aqui.


Opera


A partir de la versión 7.0 el navegador Opera tambien tiene dos modos de visualización, standard y quirk mode. Opera determina que modo utilizar en cada página siguiendo el mismo criterio que internet explorer 6.0 para windows. He aqui una tabla comparativa entre los tres navegadores.


Y encontrado por ahi en la red, un bookmarklet para comprobar en que modo se visualiza cada página: simplemente arrastra este link a la barra de enlaces de tu navegador y pulsalo cuando estes visualizando la página que deseas comprobar: Render Mode


Aparecerá un popup con alguno de los siguientes valores:



  • BackCompat: quirk mode (no standard)

  • CSS1Compat: standard mode