2012-02-02 2 views
30

В виде док Haml, у меня есть:«[IE]» условные комментарии в Haml

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

Первые условные Оценивает должным образом в IE (и, предположительно, в Firefox и Chrome, как «Это IE» делает не отображать в этих браузерах). Тем не менее, второе условие не кажется правильно оцененным в Firefox или Chrome, поскольку «Это не IE» не отображается.

Я предполагаю, что я сделал что-то неправильно. Есть идеи?

+0

Что такое реально генерируемой HTML? –

+0

ответ

91

При использовании условных комментариев IE существуют два разных типа, о которых вам нужно знать. Во-первых, когда весь контент находится внутри HTML комментария (между <!-- и -->), но IE прочтет из условия:

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

Другой тип не один комментарий, но некоторые содержание, браузеры будут видеть, окруженный двумя комментариями, которые сделают IE игнорировать:

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

(подсветка кода SO показывает разницу - в верхнем один все это серый, как это все комментарии, но в этот текст темнее так как это не комментарий).

The Haml support for IE conditional comments полезен только для создания первого рода, поскольку он является частью синтаксиса для создания комментариев блока. Если вы пытаетесь использовать его для второго рода (как вы здесь), вы получите что-то вроде:

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

, который фактически является безусловным комментарий.

Для того, чтобы использовать [if !IE] типа в Haml, вы, вероятно, придется сделать это вручную:

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

Вы также могли бы использовать в Haml surround helper, как это:

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

(Если вы используете Rails, вам нужно использовать html_safe на строках, то есть surround '<!--[if !IE]> -->'.html_safe, '<!-- <![endif]-->'.html_safe do).

Если вы используете это много, возможно, стоит создать вспомогательный метод, который переносит этот вызов на surround.

+2

Это отличный ответ. Я удивлен, что вы не получили больше очков за это. +1! – sscirrus