「なぜかズレるUI」文字数制限だけでは足りないこともある話
はじめに
日々の開発業務において、文字数を制限して表示するUIを開発する場面は数多くあると思います。
これらの文字を「何文字まで見せるか」「どうやって省略するか?」「表示が崩れないようにするには?」といった点は、デザイナーとエンジニアがすり合わせるべき要素です。
ですが「文字数を制限しているのに、なぜか表示がズレる…」という経験はないでしょうか?
それは単なる文字数制限の問題ではなく、フォントと文字幅の関係によって引き起こされている可能性があります。この記事では「文字数の制限」と「プロポーショナルフォントの影響」に関する設計上の注意点などを紹介します。
UI設計で見かける文字数制限のケース
以下のような場面で、限られたスペースに文字を表示するケースはあると思います。
- ユーザー名や会社名などの表示枠
- ボタンやタブ、表のカラムなど、横幅に制限のあるUI
デザイナーからの要望
- 最大表示文字数を制限したい
- デザイン崩れを防ぐために「n文字以内に収めてほしい」などの要望
- 長すぎる場合は省略(…)して欲しい
「文字数制限」だけの要望の場合に起こりうる課題
デザイナーから「n文字以内に収めてください」という要望を受けることはよくありますが、文字数だけを基準とした制限では、以下のような問題が起こりえます。
WWWW と iiii は同じ10文字でも幅が大きく異なります。
これは「游ゴシック体」(プロポーショナルフォント)の例です。
この場合「文字数制限」だけでは不十分なケースもありえそうなイメージがついたと思います。
プロポーショナルフォントとは?
プロポーショナルフォントとは、文字ごとに異なる幅が割り当てられているフォントのことを指します。
1 と 0、W と i を比べてみると、同じ1文字でも見た目の幅に大きな差があることが分かりました。
プロポーショナルフォントはデザイン的には美しい一方で、UI実装の場面では思わぬ落とし穴にもなりかねないので、考慮しておくと良いと思います。
ちなみに、Windowsで見かける「MS P ゴシック」など「P」の付くフォントは「プロポーショナルフォント」と呼ばれるそうです。
よく見かける Noto Sans JP
や Helvetica
などは、プロポーショナルフォントです。これらは見た目の美しさがある一方で、文字数ベースの制御では表示幅をコントロールできないという問題を引き起こす可能性があります。
どんな問題がありそうか?
- 同じ文字数でも表示幅が変わる
- 例えば iiii と WWWW はどちらも4文字ですが、プロポーショナルフォントでは WWWW の方が幅を取ります。
- そのため「4文字までに収めてください」という文字数制限が見た目の安定にはつながらない可能性があります
- デザインと実装の「想定のズレ」
- Figmaなどのデザインカンプで想定されていた表示幅が、実装で使われているフォントによっては崩れてしまう可能性があります
プロポーショナルフォントの影響を受けにくくするための工夫
コミュニケーション上の解決策
「最大文字数」ではなく「最大表示幅(px/rem)」で基準を共有するといいと思います。
例:デザイナーと「このボタン幅は最大120pxに収めたい」と具体的にすり合わせるなど
また、省略時のルールも合意しておくと良いと思います。
技術的な解決策
以下などがあると思います。
-
letter-spacing
で整えることも検討してもいいと思います - レイアウト上、表示幅を正確にコントロールしたい場合はモノスペース(
font-family: monospace;
)を使うことを検討してもいいかもしれません
font-family: monospace;
で指定した例です。
モノスペースフォントとは、すべての文字が同じ幅で表示されるフォントのことです。
まとめ
- 文字数制限だけでは不十分 → 表示幅の観点が必要になるケースもある
- エンジニアとデザイナーの認識差を埋める「単位変換」(文字数→ピクセル幅)が大事
- 使用フォントの種類(プロポーショナル or モノスペース)を知っておく
個人的な経験になりますが、実際の開発現場では、すべての文字パターンにおいてピクセル単位で正確に収める必要があるような制約があるケースはありませんでした。
なので、まずは使用しているフォントがプロポーショナルかどうかを把握しておくこと、そして見た目に違和感が出た場合に原因としてフォントを疑える引き出しを持っておくことが大切かと思います。

ちょっと株式会社(chot-inc.com)のエンジニアブログです。 フロントエンドエンジニア募集中! カジュアル面接申し込みはこちらから chot-inc.com/recruit/iuj62owig
Discussion
‱(パーミリアド)
﷽ (クルアーンの開端)
とかで文字長と実際の長さが一致しないやつかな…?(ただし、これを会社名にすることは無い筈ではありますが。