2011-05-23 49 views
6

我是新的有条件的CSS。我的问题是,使用它来处理跨浏览器问题是否正确?CSS if语句...是对的吗?

例如:

#header 
{ 
    [if IE 7] width: 600px; 
    [if Webkit] width:300px;  
} 

编者按:OP是最有可能使用这样的:http://www.conditional-css.com/

+0

你从哪里得到这个例子? – 2011-05-23 18:39:36

+0

退房http://www.conditional-css.com/advanced – 2011-05-23 18:40:04

+0

@BalaR:有趣!我从来没有听说过这个。在问题中应该注意吸引适当的答案。 – 2011-05-23 18:40:55

回答

6

使用的实际CSS文件中的条件语句(或类),但是, html。

喜欢本作例子:

<!--[if lte IE 6]> 
<link href="css/layoutIE6.css" rel="stylesheet" type="text/css" /> 
<![endif]--> 

这是写在HTML文件中,而不是CSS文件!

您发布的格式我认为并不实际,我敢打赌它没有验证,所以它不是标准的。

+0

打我到同一个答案! – Hacknightly 2011-05-23 18:39:56

+0

谢谢... jackJoe!我在网上看到了你的解决方案...问题是我怎样才能用一个CSS文件做同样的事情......而不是针对每种情况下的不同文件 – BorisD 2011-05-23 18:42:34

+0

@BorisD好,取决于是否有标准方法。我建议的解决方案是在标准范围内,如果你想要一个非标准的解决方案,可以使用“hack”方法,比如为类属性添加一个下划线,例如:_font:Arial(至少适用于IE6),或者使用“星级”入侵(为类属性添加一个asterix,与IE7一起工作)。请注意,这种方法在很大的CSS文件中很难排除故障! – jackJoe 2011-05-23 18:50:23

1

至于你的陈述的有效性,jackJoe的得到了一个很好的答案。 但是,这通常不是很好的做法。就布局而言,更好的主意是获得一个良好的布局,它可以跨浏览器工作,并且不会影响浏览器特定的布局问题。相反,担心功能特定的问题。 当然,有些时候你无法解决IE6问题,在这一点上,你可能应该使用一些浏览器特定的代码,这样你就不会感到头疼。

总的来说,这并不是一个好主意。

侧注:为什么以蒂姆伯纳斯李的名义,你还在试图支持IE5?

6

这已经成为普遍使用这种技术对IE的变化,我相信它是由HTML5 Boilerplate流行起来[来源]:

<!--[if lt IE 7]> <html lang="en-us" class="ie6"> <![endif]--> 
<!--[if IE 7]> <html lang="en-us" class="ie7"> <![endif]--> 
<!--[if IE 8]> <html lang="en-us" class="ie8"> <![endif]--> 
<!--[if gt IE 8]><!--> <html lang="en-us"> <!--<![endif]--> 

现在,您可以针对元素没有IE浏览器在你的主要CSS黑客文件像这样:

.ie6 .header li { 
    /* some ie6 only styles here */ 
} 

对我来说,这是很多比使用单独的样式表更容易维护,但遭受的其他浏览器读取(但不适用)的IE圈以非常温和的挫折LES。

如果您在使用Webkit时遇到问题,您很有可能在做的某些事情错误。不是绝对的,但它很可能是

编辑:许多浏览器允许您设置将只适用于该浏览器的规则的专有扩展。例如:

-moz-property {} 
-webkit-property {} 
-o-property {/* Opera */} 

注意,这并不意味着你可以申请任何 CSS属性,你将看到什么是可用的。

最佳参照,我可以很快找到:http://reference.sitepoint.com/css/vendorspecific

SO编辑,随意更换这个环节如果有一个更好的参考

+1

这确实是一个很好的解决方案,感谢分享! – jackJoe 2011-05-23 18:52:14

+0

请注意,这是从HTML5Boilerplate源复制/粘贴,我不确定为什么'<! - [如果gt IE 8]>'用于定位非IE浏览器......值得研究,我并不完全熟悉IE条件注释的来龙去脉。 – 2011-05-23 18:55:35

+0

无论如何,这是一个简单而巧妙的方法;) – jackJoe 2011-05-23 18:58:22

0

不,这不是, 你可以试试这些

对于IE 7 & 8:
width: 600px\9;
对于IE10:
width:300px\0/;

对于所有浏览器:
width: 600px;

但是,如果你希望它在所有三个浏览器分别IE,GC,FF则使用这样
width:300px; width: 600px\9; width:300px\0/;
我认为这是你在找什么对于!