CSS3 ch单元在IE9 +和其他浏览器之间不一致

时间:2013-07-24 05:08:32

标签: css css3 internet-explorer-9 internet-explorer-10

IE9 + claims支持ch CSS unit。根据定义,该单位是'等于当前字体的“0”(ZERO,U + 0030)字形的提前量度,或者更简单地说,the width of the character box for the glyph for “0”。这种解释似乎适用于Firefox 10+和Chrome 27+:<div style="width: 10ch;"></div><div>0000000000</div>具有完全相同的宽度,因为它们具有相同大小的相同字体。但是在IE9 +中,ch单位似乎意味着略有不同。

以下是演示此问题的小提琴:http://jsfiddle.net/CNsPg/6/

使用此单元的IE行为的逻辑是什么?或者它只是一个错误?是否有可能使IE像其他浏览器一样对待ch单元(可能是某些特定于IE的文本呈现“魔术”)?

3 个答案:

答案 0 :(得分:4)

According to caniuse.com,IE将1ch解释为0字形的宽度,不包含周围空间。与其他任何浏览器相比,这使IE中的1ch更短。

答案 1 :(得分:3)

你必须创建一个特定于IE的CSS,它覆盖所有规则,包括ch单位,并将它们乘以 1.162 作为等宽字体。

此值可能会更改为其他字体,因此您可能需要通过测量100x0的实际宽度(以像素为单位)和宽度为100ch的div来计算比率。

普通浏览器(默认):

input[type="text"][size="10"] { width: 10ch }

IE11:

input[type="text"][size="10"] { width: 11.62ch }

答案 2 :(得分:2)

看着小提琴,这是一个对规范有不同解释的有趣案例。

规范本身有点......呃....简短;我可以看到两种解释的空间。

规范说:

  

ch unit
  等于用于渲染它的字体中找到的“0”(ZERO,U + 0030)字形的高级度量。

所以'ch'是“0”的宽度。规范中没有回答的问题是,是否应该包括字符周围的间距:

  • 是否应与'em'单位('m'的宽度一致,包括字体间距)?

  • 或者它应该与'ex'一致,即'x'字符的高度(没有任何间距考虑;即只是实际的字形)?

我想我知道如果我正在编写浏览器,我会选择哪一个,但正如我所说,由于规范中缺乏明确性,我可以看到两种情况的争论。

我想面对这种歧义,并且在浏览器之间有两种明显不同的实现方式,唯一合理的选择是在完全达成共识之前不要使用“ch”单元。

谢天谢地'em'和'ex'可用且一致,并且还提供字体相对大小调整。我想在这种情况下,我能给出的最好建议就是坚持下去。

我能想到解决它的唯一方法是使用默认为零字母间距的自定义字体。我的思维过程是,这应该消除解释之间的模糊性,但会在某种程度上弄乱你的字体渲染的其他方面。我想你可以手动设置字母间距,但你可能还有其他问题。老实说,这不是我真正建议尝试的解决方案。