ch単位は、どのようにその大きさが計算されるのか、という疑問が起こったので調べた。ch
単位の仕様では「Equal to the used advance measure of the "0" (ZERO, U+0030) glyph found in the font used to render it.」となっており、微妙な表現だが「『0』のグリフを実際にレンダリングした幅」ということだろう。実装もそうなっているようだった。
それはそうだろう、という話に聞こえる。しかし、例えば0のないフォントが先頭にあった場合、フォールバックとしての0.5em
が使われるのかどうか、という話になる。具体的には、Emoji用にサブセットしたフォントや、ロゴ用にサブセットしたフォント、約物用にサブセットしたフォントなど、「0」のグリフがないフォントを使う時、どうなるのだろうかという疑問だった。結論としては、「『0』のグリフを実際にレンダリングした幅」であることを確認しただけに終わった。フォールバックの0.5em
が使われる状況は縦書きの時だけと考えてよさそうだ。
これを踏まえると、日本語のウェブサイトで欧文フォントを指定した場合、幅が思ったような大きさ、例えば60ch
でカタカナ30文字分前後にはならないことが理解できる。欧文フォントには間違いなく「0」のグリフがあるので、その幅でch
単位の大きさは決まり、カタカナはその欧文フォントではないフォントで決まるからだ。例えば、ヒラギノやメイリオではかなり幅が違うため、欧文フォントがその前で指定されている場合、同じ60ch
でも、おさまる文字数が変わってしまう。ch
単位は、フォントによるおさまりの違いを吸収するものであるはずなので、これではあまり意味がない。
つまり、欧文のみではないウェブサイト独特の挙動になるが、欧文フォントの指定とch
単位の組み合わせは避けるべきと思われる。おさまる文字数を考慮しない幅でいいなら、ch
単位を使う意味はまったくない。(r)em
や、px
、vw
単位などを使うべきだろう。