2012-02-02 50 views
30

En un documento HAML, que tienen:"[IE!]" Comentarios condicionales en Haml

/[if IE] 
    This is IE 
/[if !IE] 
    This is not IE 

Los primeros evalúa condicionales correctamente en IE (y presumiblemente en Firefox y Chrome, como "Este es IE" hace no renderizar en esos navegadores). Sin embargo, el segundo condicional no parece evaluarse adecuadamente en Firefox o Chrome, ya que "Esto no es IE" no se procesa.

Supongo que he hecho algo mal. ¿Algunas ideas?

+0

¿Cuál es el código HTML generado real? –

+0

Respuesta

91

Al usar los comentarios condicionales de IE, hay dos tipos diferentes que debe tener en cuenta. En primer lugar, cuando todo el contenido se encuentra dentro de un comentario HTML (entre <!-- y -->), pero IE se leyó a causa de la condición:

<!--[if IE]> 
    This is inside a HTML comment, so most browsers will ignore it, but IE will 
    interpret it. 
<![endif]--> 

El otro tipo es no un solo comentario, pero algunos contenidos que navegadores verán, rodeada por dos comentarios que hacer que IE ignorarlo:

<!--[if !IE]> --> 
    This is not a HTML comment, so browsers should see it, but IE will ignore it. 
<!-- <![endif]--> 

(el resaltado de código de SO muestra la diferencia - en la parte superior de un todo es gris ya que todo comentario, pero en éste el texto es más oscuro ya que no es un comentario).

The Haml support for IE conditional comments solo es útil para crear el primer tipo, ya que es parte de la sintaxis para crear comentarios de bloque. Si intenta usarlo para la segunda clase (ya que tienes aquí) se obtiene algo así como:

<!--[if !IE]> 
    This is inside a HTML comment, so other browsers will ignore it. 
    IE will also ignore it, as the conditional states !IE. 
    So everything ignores it. 
<![endif]--> 

que es efectivamente un comentario incondicional.

Con el fin de utilizar el tipo de [if !IE] en Haml, es probable que tenga que hacerlo manualmente:

%p Some other content 
<!--[if !IE]> --> 
%p 
    Here's some content that shouldn't appear in IE. 
<!-- <![endif]--> 

También se puede hacer uso de la Haml surround helper, así:

%p Some other content 
=surround '<!--[if !IE]> -->', '<!-- <![endif]-->' do 
    %p 
    Here's some content that shouldn't appear in IE. 

(Si está utilizando Rails, deberá usar html_safe en las cadenas, es decir, surround '<!--[if !IE]> -->'.html_safe, '<!-- <![endif]-->'.html_safe do).

Si está usando esto mucho, podría valer la pena crear un método auxiliar que envuelva esta llamada al surround.