什么是 CSS Hack?ie6、ie7、ie8 的 hack 分别是什么?

针对不同的浏览器写不同的 CSS code 的过程,就是 CSS hack。

常见写法

  • 属性前缀法(IE 私有前缀):

    /* 仅 IE6 */
    _color: red;
    /* IE6、IE7 */
    *color: red;
    /* IE6、IE7、IE8 */
    color: red\9;
    /* IE8+ */
    color: red\0;
    /* IE9+、Chrome、Safari */
    color: red\9\0;
    
  • 选择器前缀法:

    /* IE6 及以下 */
    * html .box { ... }
    /* IE7 */
    *:first-child+html .box { ... }
    /* IE7+ */
    html > body .box { ... }
    /* 仅 IE8 */
    @media \0screen { .box { ... } }
    /* IE9+ */
    @media all and (min-width:0) { .box { ... } }
    
  • 条件注释法(HTML 层面,IE9 以下支持):

    <!--[if IE 6]><link rel="stylesheet" href="ie6.css"><![endif]-->
    <!--[if IE 7]><link rel="stylesheet" href="ie7.css"><![endif]-->
    <!--[if IE 8]><link rel="stylesheet" href="ie8.css"><![endif]-->
    <!--[if !IE]><!--><script src="modern.js"></script><!--<![endif]-->
    

补充:

  • 现代浏览器已统一标准,CSS Hack 几乎只剩维护老旧项目(如银行/政府内网)时才会用到。
  • 主流方案是使用 Autoprefixer / postcss-preset-env 自动添加浏览器前缀,避免手写 hack。
  • 条件注释只在 IE10 及以下有效,IE11 已不再支持;新项目应使用特性检测(@supports)来判断浏览器能力。