如何创建仅限 IE 的样式表

Avatar of Chris Coyier
Chris Coyier 发布

DigitalOcean 为您旅程的每个阶段提供云产品。立即开始使用 200 美元的免费积分!

ie-only-css.gif

本文已从旧版本(最初发布于 2007年9月24日)更新。我只是想扩展它并使其更清晰。

如果您阅读此博客,则有 99% 的可能性您遇到过 IE 带来的令人抓狂的体验。但如果您是一位称职的 CSS 编码员,您应该能够处理它。我认为,您可以处理 IE 抛出的任何问题,而无需使用 hack。Hack 非常危险,因为它们基于非标准的漏洞利用,您无法预测它们在未来浏览器中的行为。解决 IE 问题的首选工具是**条件样式表**。IE 提供注释标签,一直支持到当前的 IE 8,用于定位特定版本,以及大于/小于符号用于一次定位多个版本。

为什么要使用条件样式表?

  • 您遇到了问题,需要解决它们。
  • 保持您的代码无 hack 并有效。
  • 保持您的主要样式表整洁。
  • 完全可接受的技术,微软认可。

请记住,这些条件标签不必仅用于 CSS。您可以加载 JavaScript,甚至可以在网站内容中使用它们来显示特定于 IE 的特殊消息。

代码

这将与所有其他常规 CSS 链接的 CSS 文件一起放在您的 <head> 中。开始和结束标签应该很熟悉,那只是普通的 HTML 注释。然后在括号之间,“IF”和“IE”应该很明显。需要注意的语法是“!”代表“非”,所以 !IE 表示“非 IE”。gt表示“大于”,gte表示“大于或等于”,lt表示“小于”,lte表示“小于或等于”。

请注意,IE 10 及更高版本完全不支持条件注释。

定位所有版本的 IE

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

定位除 IE 之外的所有浏览器

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

仅定位 IE 7

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

仅定位 IE 6

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

仅定位 IE 5

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

仅定位 IE 5.5

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

定位 IE 6 及更低版本

<!--[if lt IE 7]>
	<link rel="stylesheet" type="text/css" href="ie6-and-down.css" />
<![endif]-->
<!--[if lte IE 6]>
	<link rel="stylesheet" type="text/css" href="ie6-and-down.css" />
<![endif]-->

定位 IE 7 及更低版本

<!--[if lt IE 8]>
	<link rel="stylesheet" type="text/css" href="ie7-and-down.css" />
<![endif]-->
<!--[if lte IE 7]>
	<link rel="stylesheet" type="text/css" href="ie7-and-down.css" />
<![endif]-->

定位 IE 8 及更低版本

<!--[if lt IE 9]>
	<link rel="stylesheet" type="text/css" href="ie8-and-down.css" />
<![endif]-->
<!--[if lte IE 8]>
	<link rel="stylesheet" type="text/css" href="ie8-and-down.css" />
<![endif]-->

目标 IE 6 及更高版本

<!--[if gt IE 5.5]>
	<link rel="stylesheet" type="text/css" href="ie6-and-up.css" />
<![endif]-->
<!--[if gte IE 6]>
	<link rel="stylesheet" type="text/css" href="ie6-and-up.css" />
<![endif]-->

目标 IE 7 及更高版本

<!--[if gt IE 6]>
	<link rel="stylesheet" type="text/css" href="ie7-and-up.css" />
<![endif]-->
<!--[if gte IE 7]>
	<link rel="stylesheet" type="text/css" href="ie7-and-up.css" />
<![endif]-->

目标 IE 8 及更高版本

<!--[if gt IE 7]>
	<link rel="stylesheet" type="text/css" href="ie8-and-up.css" />
<![endif]-->
<!--[if gte IE 8]>
	<link rel="stylesheet" type="text/css" href="ie8-and-up.css" />
<![endif]-->

目标 IE 10

阅读本文。

通用 IE 6 CSS

处理 IE 6 及以下版本始终是一个特殊的挑战。如今,包括大型企业、大型网络应用,甚至政府在内,人们都在放弃对它的支持。除了任由网站陷入困境之外,还有更好的解决方案,那就是为 IE 6 及以下版本提供一个精简的特殊样式表,然后为 IE 7 及以上版本(以及所有其他浏览器)提供常规的 CSS。这被称为通用 IE 6 CSS

<!--[if !IE 6]><!-->
  <link rel="stylesheet" type="text/css" media="screen, projection" href="REGULAR-STYLESHEET.css" />
<!--<![endif]-->

<!--[if gte IE 7]>
  <link rel="stylesheet" type="text/css" media="screen, projection" href="REGULAR-STYLESHEET.css" />
<![endif]-->

<!--[if lte IE 6]>
  <link rel="stylesheet" type="text/css" media="screen, projection" href="http://universal-ie6-css.googlecode.com/files/ie6.0.3.css" />
<![endif]-->

Hack

如果必须……

仅限 IE-6

* html #div { 
    height: 300px;
}

仅限 IE-7

*+html #div { 
    height: 300px;
}

仅限 IE-8

#div {
  height: 300px\0/;
}

IE-7 & IE-8

#div {
  height: 300px\9;
}

非 IE-7 浏览器

#div {
   _height: 300px;
}

隐藏于 IE 6 及更低版本

#div {
   height/**/: 300px;
}
html > body #div {
      height: 300px;
}

反对条件样式表的论点

我们不应该需要它们。它们违背了网络标准的精神。

支持条件样式表的论点

是的,但我们确实需要它们。

其他资源