2012-02-02 11 views
30

In un documento HAML, ho:"[IE!]" Commenti condizionali in Haml

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

I valuta prima condizionali correttamente in IE (e presumibilmente in Firefox e Chrome, come "Si tratta di IE" fa non rendere in quei browser). Tuttavia, il secondo condizionale non sembra valutare correttamente in Firefox o Chrome, poiché "This is not IE" non è reso.

Immagino di aver fatto qualcosa di sbagliato. Qualche idea?

+0

Qual è il codice HTML effettivo generato? –

+0

risposta

91

Quando si utilizzano i commenti condizionali di IE, è necessario conoscere due tipi diversi. In primo luogo, quando l'intero contenuto è all'interno di un commento HTML (tra <!-- e -->), ma IE leggerlo a causa della condizione:

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

L'altro tipo è non un singolo commento, ma alcuni contenuti che browser vedranno, circondato da due commenti che renderà IE ignorarlo:

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

(codice di evidenziazione del SO mostra la differenza - nella top uno tutto è grigio come è tutta commento, ma in questo testo è più scuro perché non è un commento).

The Haml support for IE conditional comments è utile solo per la creazione del primo tipo, poiché fa parte della sintassi per la creazione di commenti di blocco. Se si tenta di utilizzarlo per il secondo tipo (come avete qui) si ottiene qualcosa di simile:

<!--[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]--> 

che è effettivamente un commento incondizionata.

Per poter utilizzare il tipo [if !IE] in Haml, probabilmente dovrete farlo manualmente:

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

Si potrebbe anche fare uso del Haml surround helper, in questo modo:

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

(Se si utilizza Rails, sarà necessario utilizzare html_safe sulle stringhe, ovvero surround '<!--[if !IE]> -->'.html_safe, '<!-- <![endif]-->'.html_safe do).

Se si utilizza molto questo, potrebbe valere la pena creare un metodo di supporto che avvolge questa chiamata a surround.

+2

Questa è una grande risposta. Sono sorpreso che tu non abbia ottenuto più voti per questo. +1! – sscirrus

+4