CSS hack的实现方式
我总结了一下,实现CSS hack大概有以下几种方式:
1.利用浏览器对相同代码的解析和支持的不同实现的hack
不同浏览器对相同的CSS代码的支持情况可能不同。尤其是对错误的写法。
例如
CSScode
- #test{
- _width:80px;
- }
在IE7及以上版本的浏览器中会被当作错误特性而舍弃,但是在IE6中可以被正常的解析。这时候,可以把_width当作hack,专门针对IE6来设置元素的宽度。
广州网站建设,网站建设,广州网页设计,广州网站设计
2.以Firefox或Webkit特有的扩展样式实现的hack
以-moz或-webkit开头的扩展样式,是浏览器对CSS标准的扩展。这些特性只在相应的浏览器里才可以被正常的解析。因此可以被当作CSS hack来使用。
◆以-moz开头的Firefox特有扩展样式
Mozilla浏览器支持的一些扩展是以-moz开头的。这些扩展包括了一些功能,例如圆形边界等。这种CSS只适用于Mozilla浏览器。 比如,-moz-opacity是在Firefox2.0版本出现的特性,用来实现元素的透明,但Firefox3.0以后的版本中不再支持,而是直接支持标准中的opacity特性。而其他浏览器不支持-moz-opacity。所以,可以使用-moz-opacity来针对Firefox2.0设置元素的透明度。 关于Firefox扩展样式的详细信息,见MozillaCSSExtensions。
◆以-webkit开头的Webkit浏览器特有扩展样式
与以-moz开头的Firefox特有扩展样式相同,以-webkit开头的样式是Webkit浏览器特有的,只有Webkit浏览器可以解析。 比如,在Webkit浏览器中可以用-webkit-border-radius实现圆角。
3.利用IE对标准的支持缺陷写的CSS hack
这个类别以中的hack以IE对标准的支持缺陷为基础,可以让CSS代码针对IE6或IE7以外的浏览器生效。 例如,!important只有IE7及以上版本的IE及其他浏览器支持,所以,可以用!important来针对IE6以外的浏览器写CSS代码;再如,head:first-child+bodyselector,:first-child不被IE6支持,所以可以用来针对IE6以外的浏览器编写CSS代码。 此处不在一一列举。
当然,有的观点认为应用CSS2.1标准,不属于CSS hack。见Tantek'sThoughts,UsingACSS2FeatureIsNOTaHack。
广州网站建设,网站建设,广州网页设计,广州网站设计
4.以IE特有的条件注释为基础的hack
IE浏览器中特有的条件注释也经常被用作hack,可以针对特定版本的IE写CSS代码。
例如,测试用例:
- HTMLcode<!--[ifIE8]>
- <styletypestyletype="text/css">
- #test{
- color:red;
- }
- </style>
- <![endif]-->
- <h1idh1id="test">TEXT</h1>
以上代码中的"TEXT",只在IE8中才会是红色。