0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【小ネタ】CSS でデザインしたサイトの公開前に、ブラウザの文字サイズ設定を変更して表示崩れがないかチェックしよう

Posted at

TL;DR

  • デフォルトの 1rem の長さと px の比はユーザー設定によって異なる
  • それを原因とする表示崩れが発生することがある
  • PC 版の Chrome なら設定でブラウザの文字サイズを変更できるので使おう

CSS でデザインした Web サイトの公開前チェックリスト(一例)

  • スマホや小さいビューポートでの表示を確認しよう(レスポンシブ対応)
  • Retina 用の画像がある場合、リンク切れしていないか確認しよう
  • キーボードナビゲーション時のデザインに問題がないか確認しよう
  • フォントサイズを変更しても表示が崩れないか確認しよう ← イマココ!
  • 最小フォントサイズを変更して表示が崩れないか確認しよう1

Chrome の設定でフォントサイズを変更可能

Chrome の設定で、デフォルトのフォントサイズを変更できます。これによって、ルート要素 (HTML の場合は html2) のデフォルトの文字サイズが変化し、それに合わせて 1rem の長さも変化することになります。

Chrome フォントサイズ設定

Firefox

Firefox にも同様の設定箇所があります。

Firefox フォントサイズ設定

フォントサイズを変更するとどうなる?

1px と 1rem の比率が変わってしまうため、表示が崩れてしまう場合があります。

具体的には、参考文献3に掲載されている例のように、要素同士が重なったり、意図せず改行されてしまう可能性があります。

Yahoo!ニュース

(※上記画像は Yahoo!ニュースのスクリーンショットを撮影して引用)

余談:表示が崩れた、どうすればいい?

ここから先は余談です。主に参考リンクの内容をまとめただけで、特に個人的な思想はありません。

対処法1. フォントサイズを px で指定する【初学者向け】

ルート要素のフォントサイズを px でしっかりと指定して、それ以外の要素も px で設計すれば、ブラウザのフォントサイズ変更を原因とする表示崩れは発生しなくなります。

しかし、ブラウザのフォントサイズ調節機能を殺してしまうことになる45ため、もしあなたが初学者でないなら他の方法を採用できないか検討には含めるべきでしょう5

一方で、フォントサイズを変更している人は(少し前のデータでは)3% 程度4らしいので、あなたが初学者であれば、全ての長さの単位に px を使うのも十分合理的です4

html {
  font-size: 16px;
}

対処法2. 全ての長さを rem で指定する

逆に、全ての長さを rem や em で指定する方法もあります。

この方法については、サイト訪問者にとっての特段のデメリットは思いつきませんでした。一方で開発者にとっては、必要な画像の寸法を計算するのが面倒、注意しないとうっかり px 指定を使いがち、などの難点があります。

html { font-size: 62.5%; } というハック的なテクニック36もこの亜種になります。

img.thumbnail {
  /* 200px のサムネイル画像 */
  height: 20.0rem;
}

対処法3. 可変幅の要素に合わせたレイアウトを構成する

rem と px を併用する方法もあります。

この際、ブラウザのフォントサイズやフォントファミリーの違いによる表示崩れを防ぐため、テキストを含む要素の幅や高さを固定せず、また、 Flexbox を使用して要素が次の行に回り込めるようにするなど、適切にデザインする必要があります。

見出しや本文のフォントサイズ、行間、字送りなどの長さには rem や em などの単位を使用します。一方で、画像や UI などの要素には主に px を使用します。ただし、例外も多くあり5、簡単ではありません。表示崩れが発生するくらいなら固定レイアウトの方がマシという考えもあると思います。

一応、極小が 9px で極大が 24px らしい5ので、その範囲で表示が崩れなければ大丈夫なんじゃないかと思います。

補足と注意点

注1:ブラウザのズーム機能とは異なります

ブラウザのズーム機能では 1rem と 1px の比率は変化せず、等しく拡縮されるため、どちらかと言うとレスポンシブ対応に近い作業になります。

これらの機能の違いについて、参考文献57などで詳しく説明されています。

(余談:古い Chrome ではデフォルトで最小文字サイズが非ゼロに設定されていたため、ズーム機能でページを縮小すると表示が崩れることがありました1。)

注2:タッチデバイスのピンチ操作とは異なります

ピンチ操作を行うと、有効な画面幅も同時に変化するため、表示崩れはほとんど発生しません。

注3:OS の文字サイズ設定によってデフォルトの文字サイズが変化する場合があります

特に Android においては、OS 側の文字サイズ設定によって、ブラウザ上で表示される文字のデフォルトサイズが変化する場合があるようです8

しかし、この現象は発生する条件が複雑で、手元の端末では文字サイズが変わらないケースもあったため、こちらについては補足に留めたいと思います。

  1. Chromeの最小フォントサイズの10px制限がなくなった #Chrome - Qiita 2

  2. For CSS, when is it appropriate to use :root { vs. html { ? : r/web_design

  3. html { font-size: 62.5%; } は嫌いだ - デフォルトを変更するのは悪手です 2

  4. 「font-sizeの指定はpxとremどちらを使うべきか?」問題に対する回答 2 3

  5. Webサイトのfont-size・・・それでも僕は相対値。 - Shibajuku 2 3 4 5

  6. のfont-sizeを62.5%と指定するのはどう考えても間違っている #HTML - Qiita

  7. ブラウザ側で文字サイズを変更してもレイアウトが崩れないようにするための方法をAirbnbのエンジニアが解説 - GIGAZINE

  8. AndroidでOSの文字サイズ設定を変更しても、ブラウザで文字の大きさが変わらない #CSS - Qiita

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?