要素間の余白を簡単に設定できる gap プロパティの使い方を紹介します。

結論から書くと、FlexboxやGridの中の余白は margin ではなく gap で作ってください。両端に余分な余白が出ず、最後の要素だけ打ち消す、といった調整も不要になります。

▼marginとgapの違い

margin gap
指定する場所 子要素 親(コンテナ)
両端の余白 余分に付く 付かない
最後の要素の調整 :last-child で打ち消す 不要
折り返したときの行間 別途指定が要る 同じ値が入る
相殺(マージン潰れ) 起きる 起きない

基本的なgapプロパティの使い方

gapプロパティとは

gapプロパティは、FlexboxやGridコンテナ内の要素間の余白を指定するためのCSSプロパティです。これにより、要素間のスペースをmarginを使わずに簡単に設定できるようになります。

gapプロパティの基本的な構文

gapプロパティの構文は以下のようになります。

.container {
  display: flex; /* または display: grid; */
  gap: 20px; /* 任意の値を指定 */
}

 

gapプロパティの使い方

例えば、以下のようなHTMLとCSSがあったとします。この場合、box要素間に20pxの余白が自動的に追加されます。

<div class="container">
  <div class="box">Box 1</div>
  <div class="box">Box 2</div>
  <div class="box">Box 3</div>
</div>
.container {
  display: grid;
  gap: 20px;
}

.box {
  background-color: #f0f0f0;
  padding: 10px;
}

 

行と列で余白を変える

結論:gap は「行の間」と「列の間」をまとめて指定します。分けたい場合は row-gapcolumn-gap を使います。

.container {
  display: grid;
  /* 行間 30px、列間 10px */
  row-gap: 30px;
  column-gap: 10px;
}

まとめて書くこともできます。値を2つ書いたときは「行 列」の順です。

.container {
  /* 上が行間、下が列間 */
  gap: 30px 10px;
}

順序を逆に覚えていると、意図と違う余白になります。marginpadding の「上 右 下 左」とは並びが違うので注意してください。

gapが効かないとき

結論:gap が効くのは、親要素が flexgrid(または multi-column)のときだけです。

display の指定を忘れていると、gap は無視されます。効かないときは、まず親に display: flexdisplay: grid が付いているかを確認してください。

.container {
  /* これが無いと gap は効かない */
  display: flex;
  gap: 20px;
}

display: blockdisplay: inline-block の要素の間隔は、gap では作れません。その場合は margin を使うか、親を flex にしてください。

Flexboxとgapプロパティを使ったレスポンシブデザイン

メディアクエリを使用したカラム数の調整

Flexboxとgapプロパティを組み合わせることで、簡単にレスポンシブデザインを実現できます。例えば、以下のようなCSSを考えてみましょう。この場合、画面の幅に応じてbox要素のカラム数が変化します。

.container {
  display: flex;
  flex-wrap: wrap;
  gap: 20px;
}

.box {
  flex: 1 0 200px;
}

 

Gridとgapプロパティを使ったモザイクレイアウト

画像のグリッド配置

gapプロパティを使うと、画像などの要素を簡単にグリッド状に配置できます。

.container {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
  gap: 10px;
}

 

まとめ

この記事では、gapプロパティを使った余白の実装方法を紹介しました。FlexboxやGridと組み合わせることで、レイアウトの調整やレスポンシブデザイン、モザイクレイアウトなど、様々な使い方ができるのでぜひ試してみてください。

gap を使うと、flexboxのspace-betweenで最後の要素が両端に散る問題も起きなくなります。左詰めにしたうえで gap で隙間を作るほうが、space-between を使って後から調整するより確実です。

レイアウト全体をフレームワークに任せたい場合は、CSSでオススメのフレームワークと実装例もどうぞ。

▼HTML/CSS/JavaScriptの学習本を探してる方はこちらの記事をどうぞ

2023年版 Webコーディングにオススメの学習本【HTML/CSS/JavaScript】
Webコーディングにオススメの学習本4冊【HTML/CSS/JavaScript】WebコーディングのおすすめHTML/CSS/JavaScript学習本4冊を、著者・出版社・刊行年まで明記して紹介。HTML Living Standard準拠かどうかを基準に選ぶ理由と、floatだけで段組みを説明する古い本を避ける判断方法もまとめました。...

 

ABOUT ME
りん
このブログでは、Web開発やプログラミングに関する情報を中心に、私が日々感じたことや学んだことをシェアしています。技術と生活の両方を楽しめるブログを目指して、日常で触れた出来事や本、グルメの話題も取り入れています。気軽に覗いて、少しでも役立つ情報や楽しいひとときを見つけてもらえたら嬉しいです。