这篇帖子《关于IE下英文字体跟中文字体不能对齐的根源以及解决办法》说的已经很详细了,不过不止中英文混合才会出现这个bug,比如《Internet Explorer: Broken Underlines》。

解决方法一般有以下几种:

  1. 对下划线元素使用宋体,缺点是宋体的英文数字比较难看,我个人也比较鄙视这种做法
  2. 触发下划线元素的hasLayout,缺点是inline元素会变成inline-block元素,折行时会整块掉下来
  3. 使下划线元素浮动,缺点是inline元素变成block元素,而且还要清除浮动
  4. 去除下划线元素相邻元素(相邻元素的子元素或父元素等等)的vertical-align(或重写为baseline),垂直居中用position:relative结合top来实现

在使用inline-block元素做sprite容器时经常会遇到这个问题,2、4是比较好的方案,记得要分清楚使用场合哦~

当然IE6下还会出现行高失效bug,old9给出了一种方法《A fix to the IE6 line-height/replaced element bug》,不过在某些追求精确到像素的情况下还是用PIE的方法《Microsoft Internet Explorer 6: Line-height / Replaced Element Bug》比较好。

另外,使用vertical-align:middle来垂直居中在各浏览器中差异也比较大,使用时需谨慎,而用数值则好多了,推荐阅读old9的《CSSTDG读书笔记七