Android 標準ブラウザなどで code 要素など一部の要素が間延びする問題

Android のロゴ

Android ブラウザでページを表示すると、 code 要素などの一部の要素が間延びして、余白ができる問題があります。 このとき、この余白は margin や padding 要素に依存しません。 この問題が起きる条件は複雑ですが、おおむね次のようになっているようです。

(1)特定のブラウザ、(2)指定したフォントの種類、(3)text-rendering オプション、の3つが悪い形で作用する場合にこの問題が確認できました。 text-rendering: optimizeLegibility はフォントのカーニングを自動調整するためのプロパティとオプションです。 カーニングとは、フォント間の間隔を調整することです。

問題の調査

技術的解説を端折ると、フォントがカーニングに対応していない場合、Android のブラウザで不具合が起きるということになります。 今回この現象を確認したのは、Android 4.2 にプリインストールされているブラウザです。他に同 Android バージョン上で動作させた Chrome などでも検証しましたが、この問題は起こりませんでした。他に、次のようなことが確認できています。

  • p 要素に含まれ、特定のフォントを指定した code 要素などに発生する問題である。
  • フローコンテンツとして他に隣接するテキストのない、独立した要素にはこの問題は起きない。

極めて特異な現象であることは間違いありませんが、text-rendering オプションが普及してきた後は、 組み合わさるフォントの種類の多さと相まって、このような問題が多発するかもしれませんね。