【CSS】subgridの余白

どうも、くまだです。

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を指定する。

ここまで読んでくださりありがとうございました。

この記事を書いた人