浏览器 Hack 表示各个浏览器下的兼容性问题。
由于不同的浏览器和浏览器各版本对 CSS 的支持及解析结果不一样,以及 CSS 优先级对浏览器展现效果的影响,我们可以据此针对不同的浏览器情景来应用不同的 CSS。同样,包括 JavaScript,不同的浏览器也有一些 Hack,这里我们举例一些 CSS 示例。
仅限 Mozilla
@-moz-document url-prefix() {
.box {
color: blue;
}
}
仅限 Webkit
@media all and (-webkit-min-device-pixel-ratio: 1) {}
仅限 IE
IE6 能识别下划线 _
和星号 *
。
.box {
*background: plum; /* IE6 */
}
IE7 能识别星号 *
,但不能识别下划线 _
。
.box {
_background: plum; /* IE6 */
}
条件注释,只在 IE 上有效
<!--[if IE 6]> Internet Explorer 6 <![endif]-->
<!--[if IE 7]> Internet Explorer 7 <![endif]-->
<!--[if IE 8]> Internet Explorer 8 <![endif]-->
<!--[if IE 9]> Internet Explorer 9 <![endif]-->
<!--[if lte IE 6]> Internet Explorer 6 or less <![endif]-->
<!--[if lte IE 7]> Internet Explorer 7 or less <![endif]-->
<!--[if lte IE 8]> Internet Explorer 8 or less <![endif]-->
<!--[if lte IE 9]> Internet Explorer 9 or less <![endif]-->
<!--[if gte IE 6]> Internet Explorer 6 or greater <![endif]-->
<!--[if gte IE 7]> Internet Explorer 7 or greater <![endif]-->
<!--[if gte IE 8]> Internet Explorer 8 or greater <![endif]-->
<!--[if gte IE 9]> Internet Explorer 9 or greater <![endif]-->
清除浮动 hack
/**
* For modern browsers
* 1. The space content is one way to avoid an Opera bug when the
* contenteditable attribute is included anywhere else in the document.
* Otherwise it causes space to appear at the top and bottom of elements
* that are clearfixed.
* 2. The use of `table` rather than `block` is only necessary if using
* `:before` to contain the top-margins of child elements.
*/
.cf:before,
.cf:after {
content: " "; /* 1 */
display: table; /* 2 */
}
.cf:after {
clear: both;
}
/**
* For IE 6/7 only
* Include this rule to trigger hasLayout and contain floats.
*/
.cf {
*zoom: 1;
}
以上代码来自 A new micro clearfix hack,其对清除浮动做出了简单的解释。
更多
BROWSERHACKS 网站列出了来自整个互连网的特定于浏览器的 CSS 和 JavaScript hack。
Can I Use 可以查看属性的兼容情况