ch単位の大きさと、欧文フォントを指定した日本語ウェブページ

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や、pxvw単位などを使うべきだろう。