【CSS】grid-templateで並べ替え

どうも、くまだです。

grid-templateプロパティを使って、コンテンツの配置を並べ替え。

grid-template

grid-templateプロパティは、以下の3つをまとめて指定する記述です。

  • ggrid-template-rows:横方向(行)のグリッドの高さ指定
  • grid-template-columns:縦方向(列)のグリッドの幅指定
  • grid-templalte-areas:グリッドアイテムの位置を名前をつけて配置

例えばPC画面とSP画面でアイテムの位置が異なるような配置でも、grid-templateを使って配置することができます。

例としては以下のような場合。

  <section class="section">
    <h2 class="title1">タイトル</h2>
    <div class="container">
      <div class="box">
        <div class="img"></div>
        <h3>タイトル</h3>
        <p>テキスト</p>
        <button class="button2">ボタン</button>
      </div>
      <div class="box">
        <div class="img"></div>
        <h3>タイトル</h3>
        <p>テキスト</p>
        <button class="button2">ボタン</button>
      </div>
    </div>
    <button class="button1">ボタン</button>
  </section>
.section {
  max-width: 750px;
  margin-right: auto;
  margin-left: auto;

  padding: 80px;
  display: grid;
  row-gap: 24px;
  grid-template: 
  "title"
  "main"
  "button"
  ;
}

@media (min-width: 992px) {
  .section {
    grid-template: 
    "title button"
    "main main"
    ;
  }
}

.container {
  display: grid;
  gap: 16px;
}



@media (min-width: 992px) {
  .container {
    grid-template-columns: repeat(2,1fr);

  }
}

.box {
  padding: 20px;
  border: 1px solid black;
  display: grid;
  row-gap: 10px;
}


.img {
  width: 100%;
  height: 100px;
  background-color: orange;
}

.button1 {
  display: block;
  min-width: 100px;
  height: 30px;
  background-color: burlywood;

}
.button2 {
  display: block;
  height: 30px;
  background-color: chocolate;
}

.title1 {
  grid-area: title;
}

.container {
  grid-area: main;
}

.button1 {
  grid-area: button;
  justify-self: center;
}

@media (min-width: 992px) {
  .button1 {
    justify-self: flex-end;
  }
}

左がPC画面幅、右がSP画面幅のレイアウトです。

grid-areaプロパティで、グリッドアイテムにそれぞれ名前を付けています。

.title1 {
  grid-area: title;
}

.container {
  grid-area: main;
}

.button1 {
  grid-area: button;
}

grid-templateプロパティで、それぞれのアイテムの位置を指定します。

.section {
  display: grid;
  grid-template: 
  "title"
  "main"
  "button"
  ;
}

@media (min-width: 992px) {
  .section {
    grid-template: 
    "title button"
    "main main"
    ;
  }
}

Gridを使わない場合だと、display:contents;やorderプロパティと組み合わせて配置を変えることもできます。

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

この記事を書いた人