sintax rails internet index internet-explorer conditional haml

internet explorer - rails - "[! IE]" comentarios condicionales en Haml



haml vs html (4)

En un documento de HAML, tengo:

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

El primer condicional se evalúa correctamente en IE (y presumiblemente en Firefox y Chrome, ya que "This is IE" no se representa 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?


Al usar los comentarios condicionales de IE, hay dos tipos diferentes que debes tener en cuenta. Primero, cuando todo el contenido está dentro de un comentario HTML (entre <!-- y --> ), pero IE lo leerá debido a 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 no es un solo comentario, sino cierto contenido que los navegadores verán, rodeado por dos comentarios que harán que IE lo ignore:

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

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

El soporte de Haml para comentarios condicionales de IE solo es útil para crear el primer tipo, ya que es parte de la sintaxis para crear comentarios en bloque. Si intentas usarlo para el segundo tipo (como lo tienes aquí) obtienes algo 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.

Para utilizar el tipo [if !IE] en Haml, es probable que deba hacerlo manualmente:

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

También puedes utilizar el 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á utilizando esto mucho, podría valer la pena crear un método auxiliar que envuelva esta llamada para surround .


Estoy haciendo una aplicación de rieles y encontré un problema poco después de lo que sugirió @matt en su respuesta. Estoy encontrando los siguientes problemas:

HAML

!!! = surround ''<!--[if !IE]> -->''.html_safe, ''<!-- <![endif]-->''.html_safe do %html.no-js{:lang => ''en''} %head %body

Aquí es cómo el navegador representa el HTML (sin terminar la etiqueta al final y lo agrega a la línea que declara)

<!DOCTYPE html> <!--[if !IE]> --><html class=''no-js'' lang=''en''></html> <head>..</head> <body>..</body>

Entonces, aquí está el código que está funcionando bien para mí.

!!! :plain <!--[if !IE]><!--> %html.no-js{:lang => ''en''} / <![endif]


Ha sido respondida, pero para aquellos que buscan la versión TL; DR :

/[if IE] This will only be rendered in IE /[if lte IE 8] This will only be rendered in IE 8 or less = surround ''<!--[if !IE]> -->''.html_safe, ''<!-- <![endif]-->''.html_safe do This will only be rendered in NON-IE browsers.


para la lista de condiciones:

!!! :plain <!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="en"> <![endif]--><!--[if IE 7]><html class="no-js lt-ie9 lt-ie8" lang="en"><![endif]--><!--[if IE 8]><html class="no-js lt-ie9" lang="en"> <![endif]--> <!--[if IE 9]><html class="no-js lt-ie10" lang="en"> <![endif]--> <!--[if gt IE 9]><!--> %html.no-js{:lang => ''en''} / <![endif] %head %title Yinlang