6
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?

要素のサイズはどうやって決まるのか

6
Last updated at Posted at 2025-12-02

この記事は株式会社カオナビ Advent Calendar 2025 シリーズ2の2日目です。

初めて技術記事を書きました。お手柔らかにお願いします🥲


他の人のコードをレビューしていると、次のようなCSSを見かけることがあります。

.container {
  width: 728px;
}

なんだか怪しそうな固定値です。

こういう場合「この値はどこからきたのですか?」と質問してみるのですが、そうするとしばしば「Figmaがこうなっていた」と返ってきます。

固定値を指定する以外に良い代替案を提示できればよいですが、ものによっては「それはなんか良くない気がする」と思いつつも理由をうまく言語化できなかったり、判断に迷うことがありました。

要素サイズの決まり方についてはすでに色々と議論されているところではあると思いますが、この記事では自分の判断材料として、改めて考えをまとめてみようと思います。

Figmaの固定値(px)で実装することの何が問題か

デスクトップで使用する場合のみを考慮したとしても、下記のような条件でユーザーの環境は変化します。

  • ブラウザのウィンドウサイズ(いつも全画面表示とは限らない)
  • ブラウザのズーム機能
  • ブラウザやOSの文字サイズ変更機能
  • アクセシビリティ支援技術の画面拡大機能
  • テキスト量(特に増える可能性があるとき)
  • 翻訳(英語は日本語に比べて文字数や文の長さが増えがち)

要素が拡大や縮小、コンテンツサイズの変化を考慮できていないと、レイアウトが崩れるばかりでなく、画面外へ飛び出した要素に含まれていた情報が読み取れなくなってしまったり、ボタンから文字がはみ出して押しにくくなったりと、アクセシビリティを損なう可能性も考えられます。

Figmaの数値通りに実装することは一見“デザイン通り”で良いように思われますが、ユーザーのさまざまな操作環境を考慮するなら、Figmaのデザインが表現する状態はあくまで一例であると思っておいた方が良さそうです。

文字を起点に考える

文字のサイズや文章の量がユーザー環境でさまざまなので、要素が要素のサイズがどう決まるかを、まずは文字を起点に考えてみます。

padding や margin、テキストと併記されるアイコンのサイズなど、文字サイズに従って決められる1ことが多いものは、日本語ならremやemといった相対長の単位で指定するか、デザインのルールに従って決めます。

一方で、

  • border-width
  • border-radius
  • box-shadow

などの装飾のための値は、テキストのサイズと直接関係しないので、サイズを固定してもユーザー体験に悪影響を及ぼすことはなく、むしろpx指定することでデザインに一貫性を持たせることができます。(こちらもデザインのルールがあればそれに従います。)

ボックスモデル
ここまでで、ボックスモデルにおけるContentの外側(Margin, Border, Padding)とContentの中身のサイズは決められるようになりました。次はContent自身について考えます。

どうやってContentのサイズが決まるか

『Every Layout』2では要素のサイズについて次のように述べられています。

要素のサイズは可能な限り、その内側のコンテンツと外側のコンテキストから導出されるべき

この考え方をベースにすると、Contentの中でも、ざっくり「外側」「中間(外側と内側)」「内側」のどれかの特徴を持つものに分けて考えることができそうです。

1. 外側

特徴

  • コンポーネント自身がレイアウトを作る責任を持つもの
  • コンポーネント自身に幅・高さを持ち、さらに子要素の並びや間隔を決める

  • セクション関連の要素
    • main, header, nav など
  • Modal, Dialog
    • 最大/最小幅を持ち、コンテンツの幅を決める

2. 中間

特徴

  • 自身のサイズは親が決めたレイアウト規則に従う
    • 親いっぱいに広がる場合もwidth: 100%で自分のサイズを引き伸ばすより、親のflex / gridでサイズを決定する方が望ましい3
  • 自身の子要素の配置(並びや間隔)を決める

  • flex / grid コンテナとしてのdiv
  • ul, ol, table

2. 内側

特徴

  • 自身のサイズは中身のコンテンツ(テキスト・アイコンなど)によって決まる
  • 固有の最大・最小サイズをもつことがあるが、それはそのサイズが意味を持つ場合やアクセシビリティ的な制約によって決まる

  • button, a, input
  • タグやバッジ

まとめ

今回レビューで見かけた固定幅のコンポーネントをきっかけに、改めて要素のサイズはどうやって決まるべきかを整理してみました。

実装はユーザーのさまざまな環境を考慮して行う必要がありますが、固定値が一概に悪、というわけでもなく、それぞれの要素の責務を考えることが重要であるように思います。

この記事が、Figmaの値をコピペする前に一度立ち止まってみるきっかけになったり、同じように迷った方の判断材料の一つになればうれしいです。

  1. Modular scale: https://every-layout.dev/rudiments/modular-scale/

  2. ヘイドン・ピカリング、アンディ・ベル著、安田 祐平、横内 宏樹監訳『Every Layout』、株式会社 ボーンデジタル、2021年

  3. UIコンポーネントの大きさは外から制御しよう:
    https://qiita.com/uhyo/items/e51fd3850b6a0a3d055a

6
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
6
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?