在HAML文档中,我有:
/[if IE]
This is IE
/[if !IE]
This is not IE
第一个条件在IE中正确评估(可能在Firefox和Chrome中,因为“这是IE”在这些浏览器中不呈现)。但是,第二个条件似乎没有在Firefox或Chrome中正确评估,因为“这不是IE”不会呈现。
我猜我做错了什么。有什么想法吗?
答案 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]