第2章 人間は、近いものを仲間だと思う
フォームを見て、「余白が足りない」と感じることがあります。しかし、すべての余白を広げれば読みやすくなるわけではありません。
項目名と入力欄の間まで広げると、どの項目名がどの入力欄を説明しているのか、かえって分かりにくくなることがあります。反対に、一つの項目の内側は近く、次の項目までは広く空いていれば、全体が詰まっていても境界は見えます。
余白は、何もない場所ではありません。どの情報とどの情報が関係しているかを伝える場所です。
人の間隔が、集団の見え方を変える
最初に、八人が横一列へ並ぶ図を見ます。人の形は変えず、間隔だけを変えます。
すべての間隔が同じなので、途中に強い切れ目がありません。八人が一つの列として見えます。
次は、二人の間だけを近づけ、その次の人までを広く空けます。
小さな間隔が「二人の内側」、大きな間隔が「次の組まで」を表します。同じ形の八人でも、距離の繰り返しによって四つの組が生まれます。
最後は、中央の間隔だけを広くします。
中央の広い空白が境界となり、左の四人と右の四人へ分かれて見えます。
実際の人なら、服装、体の向き、会話も集団を知る手がかりになります。この図は、それらを同じにして、距離だけが変わるとまとまりも変わることを見せています。
横の組、縦の組、均等な格子
次は、人の形や言葉を使わず、同じ点だけを並べます。横方向と縦方向の距離を一枚ずつ変えると、何が一組に見えるかが分かります。
まず、横の二点を近づけます。
縦の点までの距離より、横の点までの距離が小さいため、左右の二点が一組に見えます。
次は、縦の二点を近づけます。
今度は、上下の二点が近いため、縦向きの組が並んで見えます。点の数、大きさ、色は図 2-2A と同じです。変えたのは距離の向きだけです。
三枚目では、横と縦の距離をほぼ同じにします。
どちらの向きにも強い差がないため、横のペア、縦のペアのどちらか一方へ分ける理由が弱くなります。全体が均等な格子として見えます。
ここで大切なのは、「何ピクセルなら一組になる」という数字を覚えることではありません。点の大きさ、画面の縮尺、ほかの距離との比べ方が変われば、同じ数値でも見え方は変わります。「近い」は、周囲との関係で決まります。
フォームには、二種類の距離がある
フォームでは、少なくとも次の二つを分けて考えます。
- 項目名から、その入力欄まで
- 入力欄から、次の項目名まで
以前の図にあった「入力まで」「次まで」という短い言葉だけでは、何から何までの距離か分かりません。この章では、毎回、二つの端を文章で説明します。
最初のフォームでは、項目名と入力欄を近づけ、次の項目までは広く空けています。
小さな距離が一項目の内側を、大きな距離が項目と項目の境界を表します。囲み線がなくても、どの項目名と入力欄が一組かを追いやすい配置です。
次は、二種類の距離を同じくらいにします。
文字を読めば対応は分かります。しかし、距離には「ここまでが一項目」という切り替わりがありません。毎回、項目名の内容を読み直して対応を確かめることになります。
三枚目では、入力欄から次の項目名までの方を近づけます。
距離だけを見ると、上の項目名より下の項目名の方が入力欄に近くなっています。HTML で正しく label と入力欄を結びつけていても、目で見た関係は逆を示しています。
入力エラーの文章が加われば、項目の高さは変わります。項目名、入力欄、エラー文を一つのまとまりとして近づけ、そのまとまりから次の項目までは広く空けると、状態が変わっても関係を保ちやすくなります。
空白が置かれる場所によって、役割は変わる
同じ 16 ピクセルの空白でも、どこにあるかによって意味が違います。ここでは、ボタンの内側、カードの中、次のセクションまでを一枚ずつ見ます。
ボタンの内側の空白は、文字を囲む形を作るだけでなく、押せる範囲を広げます。ただし、大きくしすぎれば周囲の操作や文章を押し下げます。押せる範囲については第14章で詳しく扱います。
カード内の空白は、情報同士の関係を作ります。題名と短い説明を近づけ、日時の前を少し広くすれば、内容の説明と開催情報を分けて読めます。
一枚のカードの中より、カードと次のセクションの間を広くすると、「ここから別の内容が始まる」という境界になります。
この三つをすべて「余白」と呼ぶことはできます。しかし、ボタン自身の内側、カード内の情報同士、二つの大きなまとまりの間では、管理する要素も役割も異なります。
gap、padding、margin は、誰が空白を持つか
画面で同じように見える空白でも、CSS では別の要素が管理できます。ここでは gap、padding、margin を、一つずつ DOM の関係と結びつけます。
gap は、親要素が子要素の間を管理する
たとえば、三枚のカードを並べる一覧が間隔を決めるなら、親要素へ gap を指定できます。
.card-list {
display: grid;
gap: 24px;
}
カードが増えても減っても、隣り合うカードの間に同じ規則が使われます。各カードが、自分の左右へ個別の空白を持つ必要はありません。
padding は、要素自身の境界と内容の間を管理する
カードの背景や枠線から、内容をどれだけ離すかは、カード自身の padding で表せます。
.card {
padding: 24px;
}
背景色も枠線もカードの外形まで続き、空白はその内側に入ります。カードを別の場所へ移しても、内容と境界の関係はカードと一緒に移動します。
margin は、要素自身の外側に空白を置く
特定の見出しだけ、前の内容から離したい場合などは、その見出し自身の外側へ margin を置けます。
.section-heading {
margin-block-start: 48px;
}
ここでは margin-top ではなく margin-block-start を使っています。これは、文章が進む方向の「始まる側」を表す書き方です。横書きと縦書きなどで方向が変わっても、前の内容から離すという意図を残しやすくなります。
見た目が同じでも、DOM の責任は違う
三枚の図の空白が同じ幅なら、静止画では同じように見えるかもしれません。しかし、要素を追加したとき、背景色を付けたとき、並ぶ方向を変えたときに違いが現れます。
- 一覧全体が、並ぶ子要素の間を決めるなら
gap - カードやボタン自身が、境界と内容の間を決めるなら
padding - 特定の要素が、自分の外側で前後と離れるなら
margin
プロパティ名を暗記してデザインを決めるのではありません。まず、誰と誰の間にある空白か、どの要素がその関係を管理するかを決め、そのあとで CSS を選びます。
余白を一律に増やさない
余白が気になったとき、ページ中の値へ同じ数字を足してはいけません。項目の内側まで広げれば、関係する情報が離れてしまいます。
見る順番は単純です。
- 何と何の間にある空白かを指す
- 一つのまとまりの内側か、次のまとまりまでかを分ける
- 周囲の距離と比べる
- その関係を管理する DOM 要素を決める
gap、padding、marginなどの CSS へ置き換える
近いものが同じ仲間に見えるなら、距離は画面の文法になります。第3章では、距離に加えて、要素の左端、右端、中心、文字の基準線が作る「そろい」を見ていきます。
参考
- York University, “Laws of Organization in Perceptual Forms” — 点の距離とまとまりを扱った古典的な図を確認できます。
- W3C Web Accessibility Initiative, Grouping Controls — 関係するフォーム項目を、見た目と HTML の両方でまとめる例です。
- W3C, CSS Box Model Module Level 3 — 内容、
padding、枠線、marginの関係を定める公式仕様です。 - W3C, CSS Box Alignment Module Level 3 —
gapが要素間の空白を作る仕組みを確認できます。