どうも、くまだです。
CSSのsubgridの余白についてのメモ。(subgridの詳しい使い方ではないです)
subgridの余白
例えば以下のようなカードがあったとして、
<div class="grid">
<div class="box">
<div class="box__img">
<img src="images/dummy.jpg" alt="">
</div>
<h3 class="box__title">みだし</h3>
<p class="box__text">てきすとてきすと</p>
</div>
<div class="box">
<div class="box__img">
<img src="images/dummy.jpg" alt="">
</div>
<h3 class="box__title">みだし</h3>
<p class="box__text">てきすとてきすと</p>
</div>
<div class="box">
<div class="box__img">
<img src="images/dummy.jpg" alt="">
</div>
<h3 class="box__title">みだし</h3>
<p class="box__text">てきすとてきすと</p>
</div>
</div>
.grid {
display: grid;
gap: 40px;
grid-template-columns: repeat(3, 1fr);
}
.box {
display: grid;
border: 1px solid #000;
}
.box__img {
aspect-ratio: 16 /9;
}
.box__img img {
object-fit: cover;
height: 100%;
}
Gridでたんに並べただけですが、もし見出しやテキストがカードごとに長さが異なる場合は、以下のような表示になり、見た目が崩れてしまいます。
上記を、画像と見出し、テキストでそれぞれ頭の部分をそろえたい。その場合は「subgrid」を使います。
.box {
display: grid;
border: 1px solid #000;
/* 以下追記 */
grid-template-rows: subgrid;
grid-row: span 3;
}
それぞれの頭の部分がそろいました。grid-row: span 3; で親要素の3行分の高さになります。
画像と見出し、見出しとテキスト間の余白は、「親要素のgapの余白」がそのまま継承されているので、subgridした要素にも別途row-gapを指定して上書きしてあげます。
.box {
display: grid;
border: 1px solid #000;
grid-template-rows: subgrid;
grid-row: span 3;
/* 以下追記 */
row-gap: 10px;
}
こんな感じです。
行ごとの余白がめちゃくちゃ広がっている場合は、親要素で指定したgapの余白を引き継いでいる可能性が高いので、忘れずにsubgridでもgapを指定する。
ここまで読んでくださりありがとうございました。