不同浏览器的不同CSS文件

时间:2009-11-10 07:36:00

标签: html css

我想为不同的浏览器类型使用不同的CSS文件。是否有任何简单的HTML代码可以检测不同类型的浏览器并相应地包含CSS文件?

10 个答案:

答案 0 :(得分:5)

不要使用CSS黑客,Javascript切换样式表或类似的东西。

我从来没有必要为不同的浏览器或任何无效的CSS黑客使用多个样式表。

不需要它。对于PNG修复工具,条件注释对于IE6及以下版本非常有用,但是从中可以看出,如果你知道CSS和各种浏览器错误,你可以很容易地为IE 5.5编写XHTML和CSS代码而没有太多问题。

答案 1 :(得分:3)

这是一个javascript类型的东西。 Javascript非常适合浏览器选择。只需使用浏览器检测指向不同的css文件。

把这样的东西放在头上:

<script type="text/javascript">
var browser=navigator.appName;
if browser == "Microsoft Internet Explorer" {
document.write("<link type=\"text/css\" rel=\"stylesheet\" href=\"IE.css\">");
}
else if browser == "Firefox" {
document.write("<link type=\"text/css\" rel=\"stylesheet\" href=\"FF.css\">");
}
else {
document.write("<link type=\"text/css\" rel=\"stylesheet\" href=\"generic.css\">");
}
</script>

我无法确认js,但这就是你需要做的事情。

答案 2 :(得分:2)

您必须使用服务器端在所有浏览器上执行此操作。如果选择服务器端方式,则必须解析User-Agent标头并从该解析中添加有效的CSS。我建议你不要这样做因为用户代理解析是一项繁琐的工作,并且有更优雅的方式来处理浏览器怪癖。

值得注意的是,如果您只想为Internet Explorer添加特殊的CSS规则(文件),则会有一种特殊的语法:

<!--[if lte IE 6]>

用于IE 6及以上

另请注意,有一些CSS框架可以避免每个浏览器规则。我认为最大的可能是YUI 3 Grid。如果使用得当,这将为所有浏览器提供相同的外观和感觉。

答案 3 :(得分:1)

我只知道ie:

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

js detection

答案 4 :(得分:1)

依赖于浏览器的样式表有几种不同的技术:

1)如前所述,您可以使用条件语句来检测IE版本,例如

2)如果您使用的是PHP,Ruby等服务器端语言,则可以根据HTTP_USER_AGENT服务器变量检测浏览器,例如:

if(preg_match('/^Mozilla\/.*?Gecko/i',$agent)){
    print "Firefox user."; $firefox = true;
    // process here for firefox browser
}

这项技术非常强大,因为您几乎可以检测到任何浏览器,并且基于此,您可以将任何所需的.css文件包含(或打印,确切地说)到您的PHP模板中。 E.g。

if ($firefox) print '<link rel="stylesheet" href="http://site.com/firefox.css">';

这种技术的优势在于它最早发生,即使在页面开始发送给用户之前,您也可以非常准确地检测浏览器版本。

3)当然,您可以使用javascript检测浏览器版本,这只需要几个变量,例如

var browser=navigator.appName;
var b_version=navigator.appVersion;
var version=parseFloat(b_version);

但应使用分析此变量值的代码,例如this example

答案 5 :(得分:0)

在同一样式表中使用“hacks”通常更容易。

这不是宽恕他们的使用(因为我不想被福音传道者改编:))

http://www.webmonkey.com/tutorial/Browser-Specific_CSS_Hacks

http://www.dynamicsitesolutions.com/css/filters/support-chart/

http://ajaxian.com/archives/css-browser-hacks

http://www.456bereastreet.com/archive/200411/the_underscore_hack/

对于不同的IE版本(通常是最重要的),有一个条件IE'if'可以处理 lot 参数: http://www.quirksmode.org/css/condcom.html

答案 6 :(得分:0)

如果您尝试包含特定于Internet Explorer的CSS文件,则条件HTML注释有效。有关详细信息,请参阅this quirksmode article

对于其他浏览器,您必须使用JavaScript或服务器端检测访问者正在使用哪个浏览器,并根据结果包含合适的CSS文件。另一篇关于quirksmode的文章here

答案 7 :(得分:0)

您应该考虑更改为不同浏览器使用不同样式表的愿望。

几乎所有浏览器都可以使用相同的样式表。它需要更多的工作来制作干净的标记和使用健壮的样式,但你获得的不仅仅是更少的css文件,而是一个非常可能在你从未听说过的浏览器中工作的页面,以及未来的版本浏览器。此外,经过深思熟虑的标记使盲人冲浪者可以访问该页面,并且它使搜索引擎的工作更容易,因此他们可能会为您的内容编制更多内容。

这就是我在公司网站上使用的内容。当IE 8发布时,我没有必要改变一件事来使它工作。 :)

请注意,proper doctype对于跨浏览器获取一致行为至关重要。没有它,IE会从IE 4中模拟大多数渲染错误,包括incorrect box model

答案 8 :(得分:0)

<head>

<link rel="stylesheet" type="text/css" href="generic.css" />

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

<![if !IE]>
<link rel="stylesheet" type="text/css" href="notie.css" />
<![endif]>

</head>

答案 9 :(得分:0)

您可以使用JavaScript来检测和更改不同浏览器的CSS,但代码有点笨重。

<script type="text/javascript">

var nAgt = navigator.userAgent;
var browserName  = navigator.appName;
var nameOffset,verOffset,ix;

// In Opera, the true version is after "Opera" or after "Version"
if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
 browserName = "Opera";
}
// In MSIE, the true version is after "MSIE" in userAgent
else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
 browserName = "Microsoft Internet Explorer";
}
// In Chrome, the true version is after "Chrome" 
else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
 browserName = "Chrome";
}
// In Safari, the true version is after "Safari" or after "Version" 
else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
 browserName = "Safari";
}
// In Firefox, the true version is after "Firefox" 
else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
 browserName = "Firefox";
}
// In most other browsers, "name/version" is at the end of userAgent 
else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < 
          (verOffset=nAgt.lastIndexOf('/')) ) 
{
 browserName = nAgt.substring(nameOffset,verOffset);
 fullVersion = nAgt.substring(verOffset+1);
 if (browserName.toLowerCase()==browserName.toUpperCase()) {
  browserName = navigator.appName;
 }
}

 if (browserName == "Microsoft Internet Explorer") {
 document.write("<link type=\"text/css\" rel=\"stylesheet\" href=\"../css/ms.css\">");
 }
 else if (browserName == "Firefox") {
 document.write("<link type=\"text/css\" rel=\"stylesheet\" href=\"../css/ff.css\">");
 }
 else {
 document.write("<link type=\"text/css\" rel=\"stylesheet\" href=\"../css/other.css\">");
 }

</script>