31
22

More than 5 years have passed since last update.

font-size:62.5%で要素の幅や高さにrem使用は注意

Posted at

レスポンシブ案件では 640px(320px @​2x)のデザインカンプが主流でしたが、近年は750px(375px @​2x )でのカンプ作成も増えてきました。
マークアップの際、ルート要素(html)のフォントサイズに10px相当となる 62.5% を指定し、各パーツにrem単位を使うのはよくあるパターンです。

chrome の最小フォントサイズは10px

ルートフォントサイズを62.5%にすると、1rem 10px以下にならないので幅や高さ単位のrem使用には注意が必要

今回、375pxベースのデザインをもらい、いつも通りデザインをマークアップしほぼ完了したところ、当初要件外だったハズの320pxサイズに対応しなくてはならなくなり、少しハマッたのでメモ。

375pxベースのデザインと言ってもレスポンシブのマークアップでは、基本リキッドレイアウトで作るので、デザインによっては画面内に収まるのですが、今回はパーツ数が多く密度の高いデザインだったため、小さい画面内にデザインを納めるにはフォントやモジュールパーツを縮小する必要がありました。

そのため、下記のようにメディアクエリとvwを利用して画面サイズの縮小比率に応じてパーツサイズを可変にしたのですが、問題が発生。

html {
  font-size: 62.5%;
}
@media (max-width: 375px) {
  html {
    font-size: 2.66vw;/* 10/375*100 */
  }
}
body {
  font-size: 1.4rem; /* basic size 14px */
}
.test {
  width: 10rem;
  font-size: 2rem; 
  line-height: 2rem;
  background-color: #f00;
}

chromeはフォントサイズが 10px 以下にならないため、画面幅が375px以下となりvwサイズが有効になっても width: 10rem; が 100pxより小さくなってくれず、デザインが画面内に収まりませんでした。
※フォントサイズ自体は10pxまでは縮小されます。

ルートフォントサイズを62.5%指定で10pxにしてしまうと、chromeではそれ以下の値になってくれません。
仕方なくブラウザデフォルトの 100%(16px) をルートサイズに使うことにしました。

ただ、10px基準でないと、各cssモジュールパーツの単位として使っているrem の計算が面倒になってしまうため、多少パフォーマンスは犠牲になりますが、保守運用を考慮して calcを使うことにしました(sassが使える案件なら関数で済むのですが)。

calc(10rem/1.6)

※通常の相対単位で再現可能なデザインであれば、%やemの方がラクだと思います。

html {
  font-size: 100%;
}
@media (max-width: 375px) {
  html {
    font-size: 4.26vw; /* 16/375*100  */
  }
}
body {
  font-size: 0.875rem; /* basic size 14px */
}
.test {
  width: calc(10rem/1.6);
  font-size: calc(2rem/1.6);
  line-height: calc(2rem/1.6);
  background-color: #f00;
}

ちなみに、ユーザー依存となりますが、chrome最小フォントサイズはブラウザ設定で変更できます。

以上、ありがとうございました。

31
22
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
31
22