HTML css兼容

说起HTML中CSS的兼容,这是我一直很头疼的一个问题。

第一,我不是做美工/UI的;第二,现在做开发,CSS/JS兼容也不可忽视。

曾经也想把这个弄懂,但是刚入门的时候就了解到,不同的浏览器支持的css,js都是不一样的,要考虑兼容;哪怕是单独一个浏览器版本不一样,出来的效果也是不一样的。。。

我头晕了。。。荒废至今,觉得还是有必要把它理清。所以,以一个开发者的身份,开始学习CSS/JS(以前稍懂点,但是不专业)

首先,大致的把这些浏览器分下类,IE是最为特殊的,其余如Firefox,Chrome,Safari这些基本都是差不多的。而且IE的6,7,8相差都比较大,特别是IE6和其它版本,更是夸张。

以下面代码示例:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
	<head>
		<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
		<title>CSS Hacks</title>
		<style type="text/css">
			li {
				background-color: green;
				font-size: 1.5em;
				font-weight: bold;
				color: white;
				line-height: 2em;
			}
			li.ie9 {
				background-color: blue;
			}
			li.ie8 {
				background-color: purple;
			}
			li.ie7 {
				background-color: orange;
			}
			li.ie6 {
				background-color: red;
			}
			div {
				width: 500px;
				height: 500px;
				background-color: green;
				background-color: purple\9;
				*background-color: orange;
				_background-color: red;
			}
		</style>
	</head>
	<body id="body">
		<ol>
			<li>Major browsers</li>
			<li class="ie9">IE 9</li>
			<li class="ie8">IE 8</li>
			<li class="ie7">IE 7</li>
			<li class="ie6">IE 6</li>
		</ol>
		<div id="demo"></div>
	</body>
</html>

  上面的代码,在主流浏览器中(FireFox,Chrome,Safari),div的背景色是green;但是在IE9/IE8中,div的颜色是purple;在IE7中,div的颜色是orange;在IE6中,div的颜色是red。

  同样的代码,为什么会显示出不一样的东西呢?这就要从浏览器对CSS的支持上入手了。

上面代码中,div的颜色是由

div {
	width: 500px;
	height: 500px;
	background-color: green;
	background-color: purple\9;
	*background-color: orange;
	_background-color: red;
}
这段CSS决定的。首先,宽和高我们不管,第一个出现的颜色是background-color: green;这是所有浏览器都接受的,如果没有下面的部分,所有的浏览器里div的颜色都是green,这时候问题出来了,后面对相同的属性进行重新渲染,background-color: purple\9;与下面相同,这三段CSS都是带有“特殊”标记的。
  \9是只有在IE9/IE8里面才会有效渲染的代码,所以我们在IE9/IE8中看到的是紫色的;
  *是包括IE7以下的浏览器可以渲染执行的。如果没有下面这段CSS,那么在IE7/IE6里面看到就会是橘黄色的;
  _是只有在IE6里面才会渲染执行的。所以,在IE6下,把前面的green,orange重新渲染成了red color。

  上面的代码,可以在不同的浏览器中让div显示出不同的颜色。但是,这样的写法并不符合W3C的标准。\9,*,_这三个特殊标记,是不被允许的。我们需要更加良好的方式来达到同样的效果。

  众所周知,<link rel="stylesheet" type="text/css" href="css.css" >这段代码是引入外部引用的CSS,<!--,-->这两个标签在HTML中是表示注释内容的。但是,依然是IE浏览器的“特殊”,让这两个注释标签跟CSS结合起来,用更好的方法实现上面的效果。

Code:

		<!--[if !IE]><!-->
		<style type="text/css">
			div {
				background-color: gray;
			}
		</style>
		<!--<![endif]-->
		<!--[if IE 9]>
		<style type="text/css">
			div {
				background-color: blue;
			}
		</style>
		<![endif]-->
		<!--[if IE 8]>
		<style type="text/css">
			div {
				background-color: purple;
			}
		</style>
		<![endif]-->
		<!--[if IE 7]>
		<style type="text/css">
			div {
				background-color: orange;
			}
		</style>
		<![endif]-->
		<!--[if IE 6]>
		<style type="text/css">
			div {
				background-color: red;
			}
		</style>
		<![endif]-->

  在主流浏览器中,<!--,与-->标签之间的内容是完全作为注释的,

<!--[if !IE]><!-->
  <style type="text/css">
	div {
	  background-color: gray;
	}
  </style>
<!--<![endif]-->
  <!--[if !IE]><!-->在非IE浏览器中是直接被作为注释的,<!--<![endif]-->也是作为注释的,中间内容可以正常执行。但在IE中,这两部分都是可以解释的,所以回执行判断,if的条件为false,就会直接找到endif结束部分,里面的内容不再被执行。
<!--[if IE 6]>
  <link rel="stylesheet" type="text/css" href="IE6.css" >
<![endif]-->
  在这段代码中,<!--开始,一直到-->在主流浏览器中都是作为注释内容的。但在IE中,就会进行判断是否要执行内部code。在IE6下就能加入针对性的css改动,对其他的浏览器则不会造成任何影响。
  如上面的第二种方法,即达到了我们自己的目的,而且也符合W3C标准,是我们布局CSS的首选。

<!DOCTYPE html>是HTML5中唯一的doctype,也被视作将网页“升级”到HTML5的第一步。

很多国外网站的<!DOCTYPE html>和<HEAD>之间都会有一段注释,如:

<!—[if IE 6 ]><html class=“ie ielt9 ielt8 ielt7 ie6” lang=“en-US”><![endif]—>
<!—[if IE 7 ]><html class=“ie ielt9 ielt8 ie7” lang=“en-US”><![endif]—>
<!—[if IE 8 ]><html class=“ie ielt9 ie8” lang=“en-US”><![endif]—>
<!—[if IE 9 ]><html class=“ie ie9” lang=“en-US”><![endif]—>
<!—[if (gt IE 9)|!(IE)]><!—><html lang=“en-US”><!—<![endif]—>

作用于css。来写一些针对IE各版本的样式差异

先判断用户用的哪个IE版本,然后在 标签上加上该版本的class,这样可以方便hack
css文件是这样写的。
.ie6 xxx {};
.ie7 xxx {};
这是目前最好的hack方式之一。

 

posted @ 2011-12-14 16:23  雨之殇  阅读(778)  评论(0编辑  收藏  举报