我们可以像这样使用 <body class="all" <!--[if IE 7]>class="ie"<![endif]--> >吗?

3

我们可以像这样使用 <body class="all" <!--[if IE 7]>class="ie"<![endif]--> > 吗?

我希望将所有的CSS都放在一个文件中。


1
如果你决定只使用一个CSS文件,Ricebowl提出的IE only div解决方案是捕获你想要的内容的最佳方式。 - Matt Mitchell
4个回答

2
简短回答:不需要(至少不能在行内),但是你为什么需要呢? :)
只需在IE条件样式表中定义一个 body { } 样式,如下所示:
<!--[if IE 7]>
  <link rel="stylesheet" type="text/css" href="ie7.css">
<![endif]-->

在里面有:

body { /* or body.all { */
  background: pink; /* Pink is pretty!, or green, whatever */
}

我想把所有的样式都放在一个CSS文件中。 - Jitendra Vyas
1
@metal-gear-solid - 在你的主CSS之后放置这个,无论它的body声明中有什么样式,都会覆盖先前定义的属性(除了!important),就像任何其他CSS一样。至于“我想把所有样式都放在一个CSS中”这部分...好吧,如果你要做IE特定的样式,那么你不能拥有有效的CSS,你必须使用hacky CSS,我建议不要这样做。 - Nick Craver
真是的,尼克...给我们其他人一个机会吧... ;) 你为什么不结婚或者什么的?!(前几天去了你的网站...祝你们俩一切顺利!) - Gert Grenander
@Gert - 你会在我的活动图表中看到一个平坦线,大约在九月中旬的时候 ;) - Nick Craver
@metal-gear-solid:你应该将IE特定的样式分离出来,否则你会遇到维护噩梦。 :) - Gert Grenander
同意Gert G的观点,但如果只有一两个浏览器需要特殊处理,而你又不想在服务器端合并CSS文件,那么你可以在CSS文件中添加大量注释来标识“这是为IE准备的”部分。 - Matt Mitchell

2

您可以使用以下方法:

<body class="all">
  <!--[if ie]>
    <div class="ieOnly">
  <![endif]-->

<div id="content">

<p>...</p>

</div>

  <!--[if ie]>
    </div>
  <![endif]-->
</body>

这样,用于解决IE缺陷/差异的CSS选择器比普通选择器更加具体。

#content {/* for non-IE browsers */}

body.all .ieOnly #content {/* for IE */}

...并且应该覆盖“正常”的#content规则,而且只有IE浏览器会应用它,因为选择器中有一个在其他浏览器中“不可见”的元素.ieOnly

严格来说,你不能按照你在问题中提出的方式做,但是有替代方法可供选择。


聪明的想法是在body中使用IE标签,而不仅仅是在样式声明中使用。 - Matt Mitchell
它允许在单个样式表中使用完全有效的CSS,HTML也是有效的,这取决于您对IE条件注释的看法。但是,它应该可以很好地验证。 - David Thomas
@metal-gear-solid:什么?不。在(x)html文档中有多个body标签是从来没有有效的。我让你觉得可能吗?(*除非后续的body标签在框架/iframe内,并且父文档具有适当的doctype。) - David Thomas

1

不,即使使用IE的条件注释,您也无法特定地注释掉属性。但是可能有其他表达方式。


不使用条件注释和不同的CSS以及CSS hack,我想要给body添加一个类,然后可以使用该类来满足所有IE特定的CSS需求。 - Jitendra Vyas

1
如果你想在不使用hack的情况下根据浏览器向body添加一个类,那么你需要使用服务器端代码和UA嗅探。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接