2009-06-02 17 views

Respuesta

34

Escribir el <!DOCTYPE> primero es sin duda la mejor práctica.

Recuerdo problemas extraños hace mucho, mucho tiempo en un navegador (probablemente IE6) ignoró una <!DOCTYPE> porque había algo aparentemente inocente antes de que - creo que sólo los espacios en blanco, pero tal vez era un comentario. En cualquier caso, era un error horrible y horrible de tener que rastrear, y ciertamente nunca hay una buena razón para tener comentarios o espacios en blanco antes del <!DOCTYPE>.

Escribir el primer <!DOCTYPE> es, diría, sólo algo experimentado desarrolladores web hacen para evitar horribles, insectos difíciles de alcanzar.

+0

Gracias, voy a colocar mi comentario después de la etiqueta html en su lugar. –

+0

Tiene que venir antes de todo, incluido si desea que funcione correctamente. – nertzy

+7

Esto me mordió. Pasé 4 horas tratando de descubrir por qué IE7/8 renderizó TODO FUERA DEL LUGAR.Después de revisar cada etiqueta para ver los frenillos de cierre y demás cosas, creé un nuevo archivo y copié el código línea por línea (no los comentarios) y todo funcionó bien. Completamente desconcertado, pensé al azar "¿y si ...?" cuando noté la línea de comentarios justo antes de DOCTYPE en el archivo original. ¡Estaba mi culpable! – dariopy

12

Si bien es aceptable según el estándar, creo que definitivamente quiere evitarlo, ya que lanzará IE en modo peculiar.

(Ver Triggering different rendering modes)

+4

Cualquier cosa que no sea el espacio en blanco que precede al DOCTYPE arroja IE (6 y 7, al menos - no estoy seguro acerca de 8) en modo peculiar. –

3

que pueden causar Internet Explorer 7 para la presentación en el modo de caprichos como si un tipo de documento no estaba allí en absoluto, de acuerdo con this page.

0

Comentarios antes del tipo de documento están permitidos, pero causan todas las versiones de IE para volver al modo peculiaridades. En realidad, se usan para ese propósito algunas veces. La declaración XML (<?xml version ...?>) tiene el mismo efecto, en IE6 y por debajo de.

118

Es plena validez hacer

<!-- this, --> 
<!DOCTYPE html> 

Sin embargo, que trae todos versiones de IE en peculiaridades-mode (a menos que sea obligados en el modo de no-peculiaridades - vea la sección Gotchas a continuación). Lo más simple es mover el comentario debajo de DOCTYPE.

<!DOCTYPE html> 
<!-- this, --> 

Sin embargo, otra manera de hacerlo es “actualización” el comentario en una adecuada condicional comentario , como este:

<!--[if !IE]> this <![endif]--> 
<!DOCTYPE html> 

Explicación: un condicional comentario hace no cuenta como un comentario, en el mundo de IE.

sintaxis alternativa: Para olvidar/recuerde que los comentarios condicionales son una intrusión de Microsoft en el estándar HTML, se podría, por ejemplo, no

<!--[if anybrowser]> this <![endif]--> 
<!DOCTYPE html> 

Del mismo modo, para apuntar IE, en particular, se podría hacer

<!--[if !anybrowser]> this <![endif]--> 
<!DOCTYPE html> 

Gotchas

Un comentario dentro un comentario condicional traerá IE en peculiaridades-mode si IE ve (es decir: si uno utiliza un [si IE] condición, o un equivalente a [si IE] - como el [if! anybrowser] condición que he mencionado anteriormente). Así, por ejemplo, esto traería IE en caprichos-mode:

<![if IE]><!-- this --><![endif]> 
<!DOCTYPE html> 

como sería

<!--[if IE]><!--><!-- this <![endif]--> 
<!DOCTYPE html> 

y muchas otras variantes. Mientras que, por ejemplo,

<!--[if IE]><!DOCTYPE html><!--><!-- this <![endif]--> 
<!DOCTYPE html> 

haría no causa peculiaridades modo, porque aquí el comentario condicional tiene un DOCTYPE antes cualquier otro contenido, y por lo tanto IE considera que el primer contenido de la página es un DOCTYPE.

Por último, las versiones de IE más nuevo, IE8 e IE9, pueden ser obligados a las normas-mode (y a peculiaridades-mode también) por el uso de otro Microsoft invención - compatible x-ua-la directiva. Ver http://msdn.microsoft.com/en-us/library/cc288325(v=vs.85).aspx En ese caso, entonces

<!-- this --> 
<!DOCTYPE html> 
<!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]--> 

se fuerza IE8 e IE9 en sin efectos raros modo, mientras que IE6 y IE7 permanecerán en peculiaridades modo. Mientras que, por el contrario, este

<!--[if gte IE 8]><meta http-equiv="X-UA-Compatible" content="IE=8" ><![endif]--> 
<!DOCTYPE html> 

haría fuerza IE8 e IE9 en modo estándar, a pesar que el contenido del comentario condicional hace no comienzo con un DOCTYPE. Y IE6 e IE7 también permanecerán en el modo no-quirks ya que el comentario condicional no se dirige a ellos.

+3

Hace mucho tiempo decidí evitar el problema al colocar mi comentario principal después del DOCTYPE, pero gracias por la explicación detallada (y fascinante) del comportamiento de IE. –

+2

A + :) Voy a tomar su palabra, esta es una respuesta increíblemente detallada, gracias, me gusta mucho. Claramente no te detuviste ante el rabbithole: –

Cuestiones relacionadas