問題
grid-gap
を指定したのに、グリッドアイテム間に隙間ができません。さらに、アイテムにmarginを指定すると予期しない余白ができます。
HTML
<div class="grid">
<div class="box">1</div>
<div class="box">2</div>
<div class="box">3</div>
<div class="box">4</div>
</div>
CSS
.grid {
display: inline-grid; /* inline-gridに注目 */
grid-template-columns: 100px 100px;
grid-gap: 20px; /* 古い書き方 */
background-color: #f0f0f0;
}
.box {
background-color: #9C27B0;
color: white;
padding: 20px;
text-align: center;
margin: 10px; /* marginも設定 */
}
実行結果
1
2
3
4
※ 隙間が均等でなく、レイアウトが崩れています
🔧 実際に試してみよう(リアルタイム更新)
上部でHTMLまたはCSSタブを選択して編集すると、下部の結果エリアがリアルタイムで更新されます。
CSSの margin
を削除して、gap
の効果を確認してみましょう。
📺 ライブプレビュー
更新中
ヒント
クリックしてヒントを表示
グリッドレイアウトには2つの問題があります:
grid-gap
は古い書き方で、新しいgap
プロパティが推奨- グリッドアイテムの
margin
はgap
と併用すると二重の間隔になる
また、display: inline-grid
とdisplay: grid
の違いも確認しましょう。
解答
クリックして解答を表示
問題の原因
複数の問題が重なっています:
grid-gap
とmargin
の併用による二重の間隔inline-grid
による予期しない挙動- 古いプロパティ名の使用
gap と margin の違い
- gap(旧grid-gap):グリッドアイテム間の間隔のみ
- margin:要素の外側全方向の余白
- 両方使うと、gap + margin×2 の間隔ができる
inline-grid
は行内要素として振る舞うため、幅が内容に合わせて収縮
修正方法
方法1: marginを削除してgapのみ使用
.grid {
display: grid; /* inline-gridからgridに変更 */
grid-template-columns: 100px 100px;
gap: 20px; /* 新しい書き方 */
background-color: #f0f0f0;
padding: 10px; /* コンテナの内側余白 */
}
.box {
background-color: #9C27B0;
color: white;
padding: 20px;
text-align: center;
/* margin: 10px; を削除 */
}
修正後の結果
1
2
3
4
方法2: row-gapとcolumn-gapを個別指定
.grid {
display: grid;
grid-template-columns: 100px 100px;
row-gap: 30px; /* 行間の隙間 */
column-gap: 10px; /* 列間の隙間 */
background-color: #f0f0f0;
padding: 10px;
}
行列で異なる間隔
1
2
3
4
display: grid vs inline-grid
プロパティ | display: grid | display: inline-grid |
---|---|---|
要素の種類 | ブロックレベル | インラインレベル |
幅 | 親要素の幅いっぱい | 内容に合わせて収縮 |
前後の要素 | 改行される | 横に並ぶ |
使用場面 | 通常のレイアウト | 文中のグリッド |
gapプロパティの進化
/* 古い書き方(後方互換性あり) */
grid-gap: 20px;
grid-row-gap: 20px;
grid-column-gap: 20px;
/* 新しい書き方(推奨) */
gap: 20px; /* 行列同じ間隔 */
gap: 20px 10px; /* 行20px、列10px */
row-gap: 20px; /* 行のみ */
column-gap: 10px; /* 列のみ */
/* Flexboxでも使える */
.flex-container {
display: flex;
gap: 10px; /* Flexboxでもgapが使える */
}
覚えておくポイント
- グリッドでは
gap
を使い、margin
は避ける grid-gap
よりgap
を使用(新しい標準)gap
はFlexboxでも使用可能inline-grid
は特殊な用途向け、通常はgrid
を使用- コンテナの余白は
padding
で調整