CSS Hack的一些写法

参与测试的浏览器:IE6,IE7,IE8,IE9 Preview,Firefox 3.67,Safari 5.0和Opera 10.0

以下是IE系列的Hack写法(注意顺序):

.color {
	color:#000;/* 所有浏览器支持 */
	color:grey !important;/* 除IE6外,所有浏览器都支持 */
	color:red\9;/* IE系列浏览器(ie6+)支持,但是IE8不能识别“*”和“_”的css hack;所以我们可以这样写hack */
	color:orange\0;/* IE8支持 */
	*color:yellow;/* IE6,IE7支持 */
	+color:#C0C;/* IE6,IE7支持 */
	_color:blue;/* IE6支持 */
}

运行结果为:IE6文字颜色blue,IE7为#C0C,IE8为orange,其他浏览器(包括IE9 Preview)均为grey

此外,IE7支持如下写法:

*+html .bgcolor {
	background-color:#FF99CC;/* 仅IE7支持“*+html” */
}

 下面是IE6、IE5的一些写法(注意注释的摆放位置):

html/* 注释 */>body .ie6 {
	border:1px dashed #CCC;/* IE6,IE5支持 */
}
.nie6 {
	display:/* 注释 */none;/* IE6不支持 */
}
.nie56/* 注释 */ {
	display:/* 注释 */none;/* IE6,IE5不支持 */
}

除此之外,我们在使用浮动布局的时候,一个div块包含两个浮动的div块,往给这个父div块添加如下代码以清除浮动:

#box:after {/* 清除浮动,但IE6和IE7不支持 */
	content:".";
	display:block; 
	height:0; 
	clear:both; 
	visibility:hidden;
}

但遗憾的是,这种方法IE6、IE7不识别,往往我们使用在两个子div后添加空的div以清除浮动。

对于IE系列,我们还可以使用IE特有的注释,为元素添加特殊的样式以达到浏览器兼容,下面是常见的IE注释:

<!--[if IE]>
	HTML code
<![endif]-->

<!--[if IE 5,6,7,8...]>
	HTML code
<![endif]-->

<!--[if gte IE 5]>
	HTML code
<![endif]-->

<!--[if lt IE 6]>
	HTML code
<![endif]-->

<!--[if lte IE 5.5]>
	HTML code
<![endif]-->

<!--[if !IE]><!-->
	HTML code
<!--<![endif]-->

lt :就是Less than的简写,也就是小于的意思。
lte :就是Less than or equal to的简写,也就是小于或等于的意思。
gt :就是Greater than的简写,也就是大于的意思。
gte:就是Greater than or equal to的简写,也就是大于或等于的意思。
!:就是不等于的意思,跟javascript里的不等于判断符相同。

参考:http://hszy00232.blog.163.com/blog/static/43022753201001553136921/

由于经常碰到需要写Hack的情况都是IE系列,所以其他浏览器基本没用到Hack的情况(个人觉得遵循标准的话,过多考虑非IE系列的兼容性,除非你的页面很花俏),下面是在网上遇到并经过测试的Hack写法:

div.text { /* 在越出长度后会自行的截掉多出部分的文字,并以省略号结尾,Firefox 3.67不支持省略号,而IE6不会截取文字IE其他版本完全支持 */
	-o-text-overflow:ellipsis; 
	text-overflow:ellipsis; 
	white-space:nowrap; 
	overflow:hidden; 
}

这种写法大多数浏览器支持。

下面是一种兼容Safari和Chrome的写法:

p {[color:#000;color:green;}      /* Safari,Chrome支持 */

这种写法要注意,尽量把它们放在样式最后面,因为它们会使其后的所有样式失效!

接下来是两种伪类实现的兼容,感觉就是不同版本浏览器对css2.1或css3.0不同的支持程度:

.hack:empty { height:50px !important;border:1px solid #CCC; }/* IE6、IE7、IE8不支持,IE9、Firefox 3.67、Safari 5.0、Opera 10.0均支持伪类empty */
	*:lang(en) p { background:#CCC !important; }/* IE6、IE7不支持,IE8、IE9、Firefox 3.67、Safari 5.0、Opera 10.0均支持伪类lang */

HTML代码如下:

<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

......

<div class="hack">Hack</div>
<div class="hack"></div>
<div class="hack">Hack</div>
<p>*:lang(en)</p>

运行结果为中间没有内容的div高50px,并有1px边框;p内文字背景颜色为#CCC

还有一种据说是针对Opera的:

@media all and (min-width: 0px){div.opera {border:1px soild #CCC;}}/* 针对Opera浏览器做单独的设定 */

关于兼容性,相信只有接触过的的朋友才深有体会,而Hack的内容也很多,很难列举完全,只有多实践才能克服对浏览器兼容性的恐惧。第一次写原创成分较高的文章,内容也会继续更新,欢迎高手们斧正!

posted @ 2010-07-24 14:01  chemdemo  阅读(950)  评论(1编辑  收藏  举报