Chrome 42におけるフォント設定とlang属性

Chrome 42でこのウェブサイトの日本語部分が変わってしまった(かもしれない)。内部的な標準フォント設定が変わったことにもよるが、それだけではない。設定で指定したSans SerifフォントがCSSのsans-serif汎用ファミリーに反映されなくもなった。lang属性がある要素のみで再現する。

Demo: lang="ja", font-family, and Chrome 42

例えばWindowsでは仮にChromeの設定(chrome://settings/fonts)からSans SerifフォントをMS Pゴシックや游ゴシックなどに変更していた場合、lang="ja"を指定している最初のセクションのみChrome内部で設定されている日本語標準フォントであるメイリオになってしまう。OS Xでも同じ挙動になる。条件はlang属性というだけで、Googleの検索結果ページなどでも同様の現象は起こる。

挙動としてはInternet Explorerに似ている。Internet Explorerではフォントの変更は可能だが、その変更はCSS等でフォントが指定されていない要素にのみ反映される。そのため多くの場合、sans-serif汎用ファミリーは常に内部で設定されている日本語標準フォントであるメイリオ(Windows 8以降)またはMS Pゴシック(Windows 7以下)で表示される。

多くのウェブページでlang属性が適切に指定されるようになりつつある現状だと、ChromeでもInternet Explorerと同じようにフォント設定が反映されなくなったと言って良いだろう。


GoogleのURLを例にしてイシューは立てておいた。すぐに返答があり、lang属性がある場合、通常のフォント設定からは触ることができない内部的なフォント設定を利用することになったので、WontFixということのようだ。その内部的なフォント設定を変えたい場合はAdvanced Font Settingsを使えば可能ではあるということらしい(変更できることは確認した)。

しかしこの実装のままだと、lang属性が適切に指定されたウェブページでフォント設定がほとんど意味を成さなくなってしまう。ユーザーの設定に委ねようと日本語フォントを指定せずにおいていても、常に内部的なフォント設定が強制的に使われることになるという点も好みではない。単純にsans-serif汎用ファミリーがフォント設定で指定したフォントと内部的なフォント設定を連結したものに展開されれば解決しそうだけど、それではダメなのだろうか。

この仕様によってどういう問題があるのかうまく説明できなくてもどかしい。設定で変えたフォントがほとんど使われないみたいな状態が正しいとはどうしても思えない。最悪の場合lang属性を使うのはやめましょうと言う人が出てきたりするかもしれないとか大げさなことを言いたくなってしまう。そんなことはもちろんないと思うが。