ユーザー設定フォントサイズと許容サイズの課題と解決
ページ全体のフォントサイズを設定する際、ブラウザのデフォルト値(16px)を使うのが一般的だ。
html {
/* ブラウザのデフォルト値を使う */
font-size: 1rem;
}
しかし、ブラウザのユーザー設定フォントサイズは9〜24pxと幅広く、推奨値以外を設定した場合、デザインが崩れたり、ユーザー体験が損なわれたりする可能性がある。
例:Chromeのフォントサイズ
- 極小: 9px
- ※2024年頃に
font-size: 10px
未満でもレンダリングできるようになった
- ※2024年頃に
- 小: 12px
- 中(推奨): 16px
- 大: 20px
- 極大: 24px
ユーザー設定フォントサイズの解決案
1. 上限/下限のガードレールを設定する
許容できるfont-sizeの大きさをもとに、clamp()を使ってユーザー設定のフォントサイズを制限することでデザインの崩れを防ぐ。
html {
/* フォントサイズ上限 */
--MAX: 20px;
/* フォントサイズ下限 */
--MIN: 12px;
font-size: clamp(var(--MIN), 1em, var(--MAX));
}
2. 加重平均でデフォルトとユーザー設定のバランスをとる
デザイナー・開発者が想定するデフォルトのフォントサイズと、ユーザー設定のフォントサイズを加重平均を使ってバランスをとる。ユーザー設定がそのまま反映されないが、フォントサイズを大きく(または小さく)したいという意図を尊重できる。
html {
/* ページのフォントサイズの重み */
--WEIGHT-SITE: 0.6;
/* ユーザー設定の重み */
--WEIGHT-USER: 0.4;
--DEFAULT-FONT-SIZE: 16px;
font-size: calc(
var(--WEIGHT-SITE) * var(--DEFAULT-FONT-SIZE) +
var(--WEIGHT-USER) * 1em
);
}
デモ
フォントサイズ上限:20px、下限:12px
フォントサイズの重み:サイト60%、ユーザー40%