文字の大きさを
min() max()を
使って効率よく
設定する
アリスのように自在に
大きくなったり、小さくなったり
WEBもデバイスに合わせて
自在にサイズを調整する

masterminfncandmaxfncのイメージ画像
Toplabo
Master min() and max().

目標はどのデバイスでも文字が最適な大きさになること~メディアクエリーを使わないレスポンシブ。

 | 2024/01/31

基本

これまで、レスポンシブで必須だったメディアクエリーを卒業するために。

  • メディアクエリは、どのブラウザサイズでも文字が最適な大きさになるようにするための必須の技術でした。

    CSSの仕様が最近はどんどん進化していて、min()、max()などのメソッドを使うことで、メディアクエリーがもう必要なくなりつつあります。
    そこで今回はメディアクエリを使わずに、min()、max()を使ってレスポンシブデザインを実践してみようと思います。
    まずは実寸でデザインしフォントの大きさを決め込みます。下参照。

    fig1-16

    1. 左がスマホ。右がPCのサンプルデザインです。

  • 基本はピクセルでの固定値ではなく、デバイスの横幅に応じてサイズが可変していくようにします。
    フォントサイズやマージン、パディングなどの縦のサイズも、横のサイズも一定の比率で変化するように指定していきます。
    そのためには比率の基となる何らかの基準値が必要です。
    単位のvwはブラウザの横幅を基準にして横だけでなく、vhを使えば縦も指定することができます。
    また、CSSのメソッドはmax()とmin()が有りますが経験上、min()の方が使いやすいと思います。
    理由はブラウザの最大値は際限がありませんが、最小値は存在するからです。
    ということで、単位はv、メソッドはmin()を使って進めていきます。

    最初は、スマホから始めます。まずは本文のfont-sizeから。
    スマホでは横幅320px以下にはならないので横幅320px時のサイズを決定します。
    通常、本文は14pxが多いのではと思います。
    まあ、この辺りは16pxでも好きにするといいと思います。
    重要なのは実際に原寸でスマホとPC両方をデザインして最適なサイズを確認することです。

    で、この比率をvwで指定します。
    14/320なので4.4vw。
    min(4.4vw,)と入れます。

    次はPCの最適なサイズを設定します。
    これも好みですがここでは36pxにします。
    先の式にこの値を入れます。
    min(4.4vw, 36px)ですね。
    つまり、font-size: min(4.4vw, 36px)となります。
    (本文で36pxはちょっと大きいような気もしますが、実際このサイトでは本文もスマホと同じ14pxなので、ケースバイケースということで・・・

    これでPCでの表示は4.4vwが36pxを超えた時点で小さい方の36pxが優先されることになります。
    簡単ですね。
    line-height,padding,marginなども同様に指定すれば完璧です。
    ほとんどはマージやパディングなども文字サイズと同じ比率で問題ないとは思います。
    が、やはり実際に実寸で確認した方がよいのは言うまでもありません。

    ※他にclamp()というメソッドもあります。
    これはclamp(14px, 4.4vw, 36px)などと最小値と最大値を両方指定できるメソッドですが、これまでの解説をご覧になれば、min()で十分というか、最小値をあえて設定することが無意味だということが理解できるかと思います。

    MDN: clamp()メソッドの解説:https://developer.mozilla.org/ja/docs/Web/CSS/clamp

最近の傾向

最近のデバイス事情によるデザインの傾向

  • clampは孫の手。

    最近はスマホのサイズも320PXではなく375PXあたりが普通になってきました。
    実際に当事業所でサポートしているクライアントのデータを見ると、
    375~400pxのブラウザサイズが8割に達し、320pxのデヴァイスは1%でした。
    そういうこともあり、最近ではスマホのデザインは375pxを基準に作成しています。
    ただこの時、困ったことが。
    例えば375px時の本文を14pxに設定した時、320pxのユーザーはどうするか。
    こういう時にclampを使います。(本文の大きさは好みの問題ありますが・・・)
    clamp(14px, 3.7vw, 36px)
    これで本文だけは最低14pxを確保することができます。
    大見出しなどは成り行きでOKでしょう。

    fig2-14

最適な
サイズ

本文のレスポンシブでの最適な文字サイズを考える

  • 一般的に最適な文字サイズとは?

    例えば、ポスターや屋外広告は遠くから見られることを想定しているため、文字の大きさ、とくに本文は媒体のサイズに応じて変更する必要がある。
    では雑誌とか新聞、あるいは手帳サイズの読み物の本文サイズはどのくらいがよいか。
    これらはほぼ読み手の距離が同一なので、本文のサイズは一定と考えるのが正しいデザインと言える。
    なぜなら、新聞の本文サイズを紙面に合わせて大きくしてしまったら、読みにくいのは当たり前だが、そもそも情報量が手帳と変わらなくなる。

  • それではWEBの文字サイズは

    この理屈はそのままWEBデザインにも当てはまる。
    つまりて文字のサイズは(本文に限らず)、画面の大きさではなく、読み手との距離で決定するものである。
    ※実際に測ってみたらスマホは40cm、PCで6~50cm位だった。とするとスマホ:14pxの時、PC:21~17.5pxとなる。
    私はPCの文字サイズは大きくてもせいぜい18px位と思っているので、これはしっくりくる結果。
    スマホとPCを同じ14pxにしているこのサイトは文字サイズをちょっと見直した方が(PC16px位に)いいのかもしれないね

    ※今回の解説ではmin(), max(), clamp()の特徴を解りやすくつたえたいのと、あまり自分の主張を強調するのもどうかと思い
    あえてPCの本文サイズを大きく設定して解説しやすくしているが、基本の設計は自分のデザイン感覚に従うべきだろう。

『文字の大きさをmin() max()を使って効率よく設定する』関連のお薦め

このサイトで紹介しているコード、プログラムなどは個人の学習目的で作成されたものであり、いかなる保証も行いません。
利用はすべて自己責任でお願いします。
ただし、このページで紹介しているプログラムやビジュアルなどはご依頼いただければ実装を賜ります。
お問い合わせはこちら