“[!IE]”Haml的条件评论

时间:2012-02-02 05:40:23

标签: internet-explorer conditional haml

在HAML文档中,我有:

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

第一个条件在IE中正确评估(可能在Firefox和Chrome中,因为“这是IE”在这些浏览器中不呈现)。但是,第二个条件似乎没有在Firefox或Chrome中正确评估,因为“这不是IE”不会呈现。

我猜我做错了什么。有什么想法吗?

4 个答案:

答案 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]-->

实际上是无条件评论。

要在Haml中使用[if !IE]类型,您可能需要手动执行:

%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

答案 1 :(得分:1)

条件清单:

!!!
: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

答案 2 :(得分:1)

已经回答,但对于那些寻找 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.

答案 3 :(得分:0)

我正在做一个rails应用程序,我发现有点问题跟随@matt在他的回答中提出的建议,我发现以下问题:

HAML

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

以下是浏览器如何呈现HTML(在最后没有结束标记,并在声明行本身添加它)

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

所以,这里的代码对我来说很合适。

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