¿Cuáles son los diferentes doctypes en html y qué significan?


Como describe el título, ¿cuáles son los diferentes tipos de documentos disponibles y qué significan? Noto que el diseño se ve un poco diferente en IE7 cuando cambio de

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >

A

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Hay otros y cuáles son los efectos o ramificaciones?

Gracias!

Author: Chris Conway, 2008-11-01

6 answers

Un Doctype, o Declaración de Tipo de Documento asocia el documento con un Definición de Tipo de Documento.

La Definición de Tipo de documento es un estándar para un documento XML. Hay muchos DTDs, tanto para documentos XML como XHTML. XML en sí no tiene mucho de un esquema o un conjunto muy específico de reglas, aparte del requisito de que todo esté bien formado. Puede pensar en un DTD como un esquema más específico para el documento.

Modos de renderizado

Debido al movimiento de los estándares, la mayoría de los navegadores modernos en realidad tienen diferentes modos de renderizado (modo estándar, para renderizar su documento y css de acuerdo con los estándares web más recientes, y modo quirks, en el que el navegador trae de vuelta algunas ideas de renderizado de los primeros días de la web). Estos modos se instituyen con fines de compatibilidad con versiones anteriores. El vasto paisaje de páginas web que se crearon en el la primera era de la web se representan de acuerdo con las reglas de su tiempo, mientras que los documentos más nuevos pueden apelar a la nueva ola de estándares. A medida que pasa el tiempo y se imaginan nuevos formatos, se podría crear un DTD correspondiente.

Discrepancias en el navegador

En un mundo ideal, una página que está siendo cargada por un navegador leería el Doctype en la parte superior y lo usaría para buscar una Definición de Tipo de documento. A continuación, utilizaría el esquema de ese DTD como base para la lectura el resto del documento. Los Doctypes, entonces, serían esenciales para validar documentos de marcado. El DTD proporcionaría el estándar contra el cual su documento debe ser validado.

Desafortunadamente, no es un mundo ideal. Los navegadores no necesariamente se comportan consistentemente aquí, y si lo hacen, el comportamiento consistente no está del todo en línea con la visión original de Doctypes. Aunque el análisis se realiza independientemente del Doctype, los principales navegadores al menos examinarán el Doctype para determinar el modo de representación. Si su Doctype está ausente o está incompleto, es probable que el navegador se esté renderizando en modo quirks. Para que los documentos modernos y bien escritos aparezcan correctamente, el navegador debe renderizar en modo estándar . Mozilla, Safari, y algunas versiones recientes de Opera realmente implementan un Casi Estándares modo, que está dedicado enteramente a las páginas de transición.

Cuando cambia el Doctype y nota cambios en la forma en que un se muestra la página, es porque el navegador puede estar aplicando un conjunto de reglas ligeramente diferente cuando intenta analizar el documento. Como consecuencia, la página resultante puede ser un poco diferente, dependiendo de si todas sus partes se ajustan a la DTD, o al menos, dependiendo del navegador, que sus datos validen dentro del modo de representación que sugiere el doctype.

Elegir un Doctype

En la búsqueda del cumplimiento de las normas, se deben usar tipos de documentos estrictos siempre que sea posible.

Al escribir en XHTML , este Doctype es común:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Cuando se escribe en HTML 4.1 , este es común en su lugar:

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

Algunos otros tipos de documentos comunes para XHTML y HTML 4 se enumeran aquí, para completar:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

<!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 Frameset//EN"
"http://www.w3.org/TR/html4/frameset.dtd">

Debate sobre Tipos de Documentos Estrictos versus Transicionales

Los evangelistas de estándares han pedido a los desarrolladores web que dejen de usar el Doctype de Transición en nuevas páginas y en su lugar usen Strict. Nuevo, este es un caso en el que la teoría y la práctica tienen algunas dificultades para reconciliarse. La esperanza original del transitional Doctype era proporcionar un centro de transición para la transición de sitios web heredados hacia el cumplimiento de estándares. Con los doctypes transicionales, la restricción de elementos y atributos es literalmente "menos estricta", por lo que los desarrolladores podrían ejecutar su trabajo en modo estándar antes, y eliminar gradualmente las diferencias pendientes con el tiempo.

Existe Controversia porque no siempre es tan simple para un desarrollador cambiar el Doctype en un entorno empresarial. Los desarrolladores independientes y los fabricantes de sitios web pequeños o medianos a menudo pueden tener un tiempo más fácil determinar su tipo de documento y hacer esta transición. En un entorno de producción empresarial para un servicio basado en web muy demandado, hay dependencias inherentemente más complicadas en sistemas heredados y productos de código de terceros, que a su vez pueden estar en una hoja de ruta para la eliminación o rediseño, pero la ejecución de tales cambios debe hacerse de manera metódica e incremental.

Herramientas Útiles

El W3C (World Wide Web Consortium) es un grupo que desempeña un papel activo en la definición de este tipo de normas. Mantienen una herramienta en línea útil en http://validator.w3.org/ para verificar y validar documentos con respecto a sus estándares. Hay muchas otras herramientas de terceros y navegador extensiones con funcionalidad similar.

 53
Author: keparo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-07 00:11:40

A los navegadores no les importa qué doctype usas (bueno, casi cierto), lo usan para una cosa y solo para una cosa: para decidir qué modo de renderizado usar. Vea por ejemplo la documentación de OperaFx o para ejemplos del mundo real sobre qué algoritmos se usan para decidir qué modo usar (supongo que también hay documentación para IE enterrada en algún lugar de MSDN ... [Esto puede ser la página correcta](http://msdn.microsoft.com/en-us/library/ms535242(VS.85).aspx), I no lo sé, lo siento).

Sin embargo, hay dos modos principales en la mayoría de los navegadores (algunos navegadores tienen un modo casi estándar también):

  • modo quirks (utilizado cuando no se encuentra ningún tipo de documento "correcto"," correcto " desde el punto de vista de los navegadores): intente renderizar el documento como lo haría alguna versión antigua de IE (una de las diferencias más importantes, es decir, afecta al renderizado más, es que algunos navegadores explotan el bug mode),
  • y modo estándar (utilizado cuando el navegador encuentra un doctype que considera correcto): intente hacer lo que dicen los estándares.

Se puede utilizar (el no estándar) document.compatMode propiedad en los navegadores mencionados anteriormente para comprobar qué modo se utilizó para renderizar el documento actual.

(Nota sobre XHTML: Asumí que usted sirve sus documentos como HTML (text/html), si usted sirve su documento como XHTML (probablemente application/xhtml+xml) la mayoría del navegador salta al modo estándar directamente y no me importa el tipo médico en absoluto AFAIK.)

POR cierto: la recomendación (o, lo que parecía una recomendación) en la otra respuesta está rota, el transitional DTD no debe usarse en documentos nuevos. Siempre use estricto (el término "estricto" es un poco engañoso, debe ser "predeterminado" o algo más que no asuste), punto:

Los autores deben usar la DTD Estricta cuando sea posible, pero pueden usar la DTD de Transición cuando se admite el atributo y los elementos de presentación se requiere. -- HTML 4.01: 22 Definición de Tipo de Documento de Transición.

Recomendamos que los autores escriban documentos que se ajusten a la DTD estricta en lugar de los otros DTD definidos por esta especificación. -- HTML 4.01: 4 Conformidad: requisitos y recomendaciones

Y hay muchas publicaciones de blog sobre esto, por ejemplo, no más DOCTYPEs de transición, por favor (de 2006, pero algunos , obviamente, todavía tienen problemas con esto :).

Este post comenzó señalando que a los navegadores no les importa lo que elijas, y luego se convirtió en una diatriba sobre cómo elegir el DTD correcto, interesante ... Pero si usted va a gastar (/residuos?) tiempo y energía para elegir un DTD también podría elegir el correcto (desde una perspectiva estándar HTML 4.01 que es).

O , puede ignorar todo esto y usar lo siguiente en su lugar, pronto de todos modos :

<!doctype html>

(Esto responder a "¿alguna razón para no empezar a usar el doctype HTML 5?"estaba relacionado con la última parte.)

 7
Author: cic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:05

Aquí está la explicación oficial de los diversos DTD del W3C:

http://www.w3.org/QA/2002/04/valid-dtd-list.html

También puede encontrar lo siguiente beneficioso:

http://www.freedivs.com/tutorials/Choosing%20a%20DOCTYPE/

 3
Author: Noah Goodrich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-01 03:23:06
 3
Author: hsivonen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-02 21:00:33

Hay mucha desinformación en torno a los tipos de documentos. La confusión se deriva del hecho de que doctypes originalmente estaba destinado a un propósito (para identificar el DTD, es decir. la versión HTML utilizada), pero en los navegadores del mundo real se utilizan para un propósito completamente no relacionado.

Las declaraciones Doctype solo se usan para una cosa en los navegadores actuales, que es cambiar entre quirks modo de representación y estándares modo de representación para CSS. Así que básicamente es una cosa CSS, no una cosa HTML.

El renderizado en modo Quirks es compatible con versiones anteriores con algunos errores de renderizado antiguos en navegadores más antiguos, y es principalmente útil para el contenido heredado que no desea corregir. El nuevo contenido siempre debe usar el modo estándar, ya que se renderiza de manera más correcta y consistente entre los navegadores. (Todavía hay diferencias de representación entre los navegadores cuando se utiliza el modo estándar, pero hay mucho peor en el modo peculiaridades.)

No hace ninguna diferencia si elige un HTML o XHTML docytype, tampoco hará ninguna diferencia si eliges strict o transitional doctype. El modo de renderizado se selecciona básicamente así:

  • Si el documento no tiene ningún tipo de documento, se selecciona el modo quirks.
  • Si el documento tiene un doctype no reconocido, se selecciona el modo estándar . Esto significa que puede escribir un doctype aleatorio como <!DOCTYPE Chris> y funcionará perfectamente bien.
  • Documentos oficiales del W3C sin el url correcta (la segunda cadena en la etiqueta) selecciona quirks modo. Todos los demás tipos de documentos seleccionan el modo estándar. (Editar: por supuesto, es más complejo que eso, e incluso difiere entre los navegadores que de los doctypes reconocidos desencadena el modo peculiaridades. Se hsivonens overview, enlazado desde otra respuesta.)

Históricamente los doctypes tenían la intención de declarar qué versión y subconjunto de HTML se usaban. HTML4 define varias versiones, donde "transitional" permite un número de elementos y atributos que (como FONT) no están permitidos en "strict". Un navegador teóricamente podría procesar documentos " estrictos "diferentes a los documentos"transicionales". Sin embargo ningún navegador realmente hace esto.

Edit: scunliffe señala que IE8 tendrá otro modo de renderizado, el modo "estándares IE8". Sin embargo AFAIK este modo no se activa por un doctype sino por una meta-etiqueta.

 2
Author: JacquesB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-03 12:45:36

Básicamente, el doctype determina lo loco que va a ser IE.

Si no lo configura a XHTML, o "estricto", estará viviendo en un mundo de dolor cuando se trata de IE (incluso si lo configura, seguirá odiando a IE, pero lo hace mucho mejor).

 0
Author: dicroce,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-11-01 22:11:25