余白の取り方

UI設計における余白とは、情報を整理するために設ける要素間の視覚的な距離のことを指します。
ここでは、マージン(Margin)やパディング(Padding)などの余白のパターンをまとめています。

基本的な考え方

余白は、要素間の距離に差をつけてかたまり(チャンク)を形成することで、要素同士の並列・内包などの関係性を視覚的に表現するために使います。
適切な余白を設定することで、ユーザーの素早く、正しい情報の理解を助けられます。

UI設計において開発者は適切な余白について意識することが重要ですが、SmartHR UIのコンポーネントの中には、あらかじめ適切な余白が設定されており、余白の選定を意識することなく利用できるものがあります。Layoutコンポーネントを使う場合や、コンポーネントを組み合わせて画面に配置する場合に、下記を参考に適切な余白を設定してください。

なお、ここで示す余白の基準は必ず従わなければならないものではありません。
ただし、基準を逸脱した余白を設定する場合はその理由や効果を説明できるようにしておきましょう。

考慮する法則

SmartHRの製品開発では、人間の認知に関する以下の法則を考慮して余白を設計します。

  • ゲシュタルト原則における近接の法則
  • 視線誘導の法則

ゲシュタルト原則における近接の法則

距離が近いもの同士を関連性があるものとして認識する傾向がある、という法則です。
関連性の高い要素には小さな余白、関連性の低い要素には大きな余白を設定することで、ユーザーは情報のまとまりを認識できます。

スクリーンショット:ゲシュタルト原則における近接の法則をもとに配置されたラベルと入力欄の例。社員番号、氏名、部署の3つの入力欄が縦に並んでおり、ラベルと入力欄の間はの余白が小さく、入力欄と次の入力欄のラベルの間の余白は大きくレイアウトされている。

視線誘導の法則

視線誘導の「視線は大きいものから小さいものへ移動する」法則のとおり、余白は外側から内側に向かうにつれて狭くすることで、外側の要素から内側の要素に視線を誘導する効果を期待できます。

スクリーンショット:視線誘導の法則をもとに配置された画面内の要素の例。ページタイトル、本文、セクションタイトル、ブロックタイトル、コンテンツと要素が深くなるにつれて、要素周辺の余白が小さくなっている。

種類

以下の余白を定義します。

  • マージン(Margin)
  • パディング(Padding)

SmartHRにおいては、基準サイズの16pxを1としたプリミティブトークンを使用します。

マージン(Margin)

マージンとは、要素と要素の間に設定する余白のことです。

具体的な配置の基準は次の通りです。

  • セクションやブロックの見出しレベルや階層を下げるにつれて、段階的に適用する。
  • 同じ意味階層となる要素同士は、ぞれぞれ同じ大きさのマージンを適用する。

以下の構成で紹介します。

垂直方向のマージン

垂直方向に要素を配置する場合はStackを使用し、gap propsにマージンを設定してください。

代表的なページ内レイアウトのマージン
  1. セクション同士の間:2(32px)
  2. セクション内の要素同士の間:1.5(24px)
  3. セクション内の見出しとコンテンツの間:1(16px)

スクリーンショット:代表的なページ内レイアウトのマージンの例。セクションや要素同士の余白の大きさが色分けされて示されている。

代表的なダイアログ内レイアウトのマージン
  1. 説明テキストとフォーム要素のセクションの間:2(32px)
  2. フォーム要素同士の間:1.5(24px)
  3. フォーム要素内の説明テキストとフォームの間:1(16px)

スクリーンショット:代表的なダイアログ内レイアウトのマージンの例。セクションや要素同士の余白の大きさが色分けされて示されている。

見出しとコンテンツのマージン
  • 各セクションの見出しとコンテンツの間:1(16px)

スクリーンショット:見出しとコンテンツのマージン

小さい要素間のマージン

コンポーネント内で確保されているものと、個別で指定する必要のあるものがあります。

  1. ブロックの見出しやInputにラベルや説明テキストを複合的に組み合わせる場合:1(16px)または0.5(8px)
  2. CheckBoxRadioButtonのrow-gap:1(16px)
    • Stackを使用して余白を指定してください。

スクリーンショット:小さい要素間のマージンの例。ブロックタイトルや要素同士の余白の大きさが色分けされて示されている。

視覚的に余白が大きく見える場合のマージン

配置するコンポーネントによっては、実際に指定した余白の値よりも視覚的に余白が大きく見える場合があります。以下のように例外的に小さな余白を設定することで、視覚的な余白を調整してください。

  • タイトルエリアにInformationPanel配置しない場合のタイトルエリアと最初のセクションの間:1.5(24px)
    • HeadingTextにはline-heightが設定されており、InformationPanelが配置されている場合と比べて余白が大きく見えるため
    • セクションの見出しとボタンが横に並んでいる場合、見出しの高さをボタンの高さに合わせることでさらに余白が大きく見えるため

スクリーンショット:タイトルエリアにInformationPanelを配置しない場合のタイトルエリアと最初のセクションのマージン。実際に指定している24pxよりも余白が大きく見える。

水平方向のマージン

水平方向に要素を配置する場合はClusterReelを使用し、gap propsにマージンを設定してください。

アイコンやラベルなどの小さい要素間のマージン

コンポーネント内で確保されているものと、個別で指定する必要のあるものがあります。

  1. StatusLabelやアイコンなどの要素をテキストと組み合わせる場合:0.5(8px)または0.25(4px)
  2. フォームを水平方向に配置する場合:1(16px)
  3. CheckBoxRadioButtonのcolumn-gap:1.5(24px)
    • Clusterを使用して余白を指定してください。
  4. Button同士の間:0.5(8px)または1(16px)

スクリーンショット:アイコンやラベルなどの小さい要素間のマージンの例。インラインで配置される要素間の余白の大きさが色分けされて示されている。

パディング(Padding)

パディングとは、要素の内側に設定する余白のことです。

具体的な配置の基準は次の通りです。

  • セクションやブロックの見出しレベルや階層を下げるにつれて、段階的に適用する。
  • 同じ意味階層となる要素同士は、ぞれぞれ同じ大きさのパディングを適用する。

代表的なページ内レイアウトのパディング

  1. メインコンテンツのパディング:2(32px)
  2. コンテンツエリアのパディング:1.5(24px)
    • Basepadding propsに値を指定してください。
  3. コンテンツエリア内のグループのパディング:1(16px)
    • BaseColumnを使用することで、自動的に適用されます。

スクリーンショット:代表的なページ内レイアウトのパディングの例。コンテンツ内のパディングの大きさが色分けされて示されている。

代表的なダイアログ内レイアウトのパディング

  1. コンテンツエリアのパディング:1.5(24px)
    • Dialogを使用することで、自動的に適用されます。
  2. コンテンツエリア内のグループのパディング:1(16px)
    • BaseColumnを使用することで、自動的に適用されます。

スクリーンショット:代表的なダイアログ内レイアウトのパディングの例。コンテンツ内のパディングの大きさが色分けされて示されている。