2009-10-28 127 views
2

为IE和其他浏览器分离CSS的最佳方式是什么?我正在考虑针对IE,Firefox和Safari用户。尤其是现在在大多数浏览器中支持CSS3但IE。针对特定浏览器使用不同的CSS样式

的各种方式来做到这一点,我已经遇到的

  1. 加载单独的样式表 有条件使用<!--[if IE]>
  2. 下划线黑客和其他各种内嵌IE黑客

我喜欢(2)作为(1)是额外的工作,特别是在开发时。但(2)似乎并不一直工作。什么是最有效的方法?

+0

您是否针对特定的浏览器,除了解决浏览器错误问题? – outis 2009-10-28 14:22:05

+0

我针对的是支持CSS3的浏览器,而没有支持CSS3的浏览器 – sean 2009-10-28 14:24:49

+0

没有支持所有CSS3的浏览器,并且Internet Explorer和Firefox都支持某些CSS 3.(对于CSS 3的定义因为你可以给它的当前状态) – Quentin 2009-10-28 14:31:52

回答

3

我会有一个样式表,一切都在文档的顶部拾取。

下面这个做你的 [! - [如果IE]] 有条件的样式表。

在这里只是覆盖在IE中导致问题的样式。 - 被挑选的特定班级的最后一种风格是将要遵循的风格。

+0

这正是我所做的,因为我讨厌搞我的标准兼容样式表来破解ie的修复。 – 2009-10-28 14:27:58

+0

谢谢。这对我来说。 :) – sean 2009-10-28 14:33:08

2

我们的团队处理CSS以下三个规则:

  1. 确保通用/ CSS共同文件的工作,因为他们应该用尽可能靠近他们可能可以所有浏览器。
  2. 在单独的文件中处理所有IE“错误”,控制IE样式条件加载样式表。
  3. 除非无法按照前两条规则使其工作,否则不允许黑客入侵。
1

我同意将所有核心CSS保存在一个文件中。如果您使用的是ASP.NET,那么您可以使用WebHandler来管理实际发送的CSS。我相信其他语言也有类似的解决方案。这允许你只发送你需要的东西并且允许它被缓存。另一个好处是你可以合并多个css文件(如果你是这样做的话)并且只出现一个。当您减少对Web服务器的请求数时,这是很好的做法。

然后,您可以编写像[如果lt IE 8] margin:0px;它不会被发送到IE8或FF等

如果你只是使用HTML,那么你必须去上面提到的[! - [如果IE]]风格的条件。

我们在我们非常大的项目中使用WebHandler,并且我不会以任何其他方式进行操作。

请参阅http://www.conditional-css.com/download。它可用于PHP,C#和C

祝你好运。

1
<!--[if !IE]><!--><link rel="stylesheet" href="non-ie.css"><!--<![endif]--> 
<!--[if IE]><link rel="stylesheet" href="ie.css"><![endif]--> 

这个技巧广泛使用Yandex(又名“俄语谷歌”)来减少HTTP请求。例如,使用这个的market.yandex.ru

1

您也可以使用这种方式;某些时候条件可能不适用于需要在代码中间编写样式的地方。

<?php $browser = $_SERVER['HTTP_USER_AGENT']; ?> 
    <?php if (strstr($browser, "MSIE 6.0")) { ?> 
    <link rel="stylesheet" href="ie6style.css" type="text/css" media="screen" /> 
    <?php }else{ ?> 
    <link rel="stylesheet" href="default.css" type="text/css" media="screen" /> 
    <?php } ?> 

检查$browser有:

IE - “MSIE”

火狐 - “火狐”

Safari浏览器 - “野生动物园”

剧 - “歌剧”

Chrome - “Chrome”

+0

这只有在他使用PHP时才有效 – Marcelo 2012-11-25 13:34:19