何谓CSS Hack?
不同的浏览器,比如Internet Explorer 6、Internet Explorer 7、 Mozilla Firefox对CSS的解析认识不一样,因此会导致生成的页面效果不一样,得不到我们所需要的页面效果。此时我们需要针对不同的浏览器写不同的CSS,让它能够兼容不同的浏览器,能够在不同的浏览器中得到我们想要的页面效果。针对不同浏览器编写不同CSS code的过程就叫CSS Hack,或叫写CSS Hack。
不同浏览器对CSS解析的差别如下:
- !important能被IE7、FF识别,但不能被IE6识别
- IE6支持"*" or "_"开头的CSS,IE7支持"*"开头的CSS,但不支持"_"开头的CSS,FF两者都不支持
- "+"开头的CSS样式仅能被IE7识别
- " "结束的CSS样式仅能被IE8识别
- "9"的CSS样式能被IE识别
1. !important
!important 指定样式应用规则的优先权,区别IE6与IE7,区别IE6与其它浏览器。
.browserTest
{
border:20px solid #60A179 !important;
border:20px solid #00F;
{
border:20px solid #60A179 !important;
border:20px solid #00F;
}
IE7和其它标准浏览器能识别!important,显示#60A179颜色,IE6不能识别!important,显示#00F颜色。
2. *
IE都能识别"*",标准浏览器(如FF)不能识别"*"。
区别IE与FF:
.browserTest
{ border:20px solid #60A179;
*border:20px solid #00F;
}
区别IE6、IE7、FF:
.browserTest
{
border:20px solid #60A179;
border:20px solid #00F !important;
*border:20px solid #fff;
{
border:20px solid #60A179;
border:20px solid #00F !important;
*border:20px solid #fff;
}
3. _
IE6支持"_",IE7和FF都不支持"_" 。区别IE6、IE7、FF:
.bowserTest {
border:20px solid #60A179;
*border:20px solid #00F;
_border:20px solid #fff;
}
4. *+html 与 *html
*+html 与 *html 是IE特有的标签, firefox 暂不支持。而*+html 又为 IE7特有标签
.browserTest { width: 120px; } /* FireFox fixed */
*html .browserTest { width: 80px;} /* ie6 fixed */
*+html .browserTest { width: 60px;} /* ie7 fixed */
*html .browserTest { width: 80px;} /* ie6 fixed */
*+html .browserTest { width: 60px;} /* ie7 fixed */
*+html 对IE7的HACK 必须保证HTML顶部有如下声明:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">