【HTML】カード系の中のコンテンツを下部固定【CSS】

どうも、くまだです。

カード系のアイテムで、アイテムの中のテキストやaタグなどが下部にあるコンテンツを下部で固定する方法。

カード系の中のコンテンツを下部固定

最初に下部固定でないパターンから。

カードレイアウト

上みたいな配置で「詳細を見る」が下部にあるパターン。こちらのコードは下です。

  <ul class="p-cards">
    <li class="p-cards__item p-card">
      <div class="p-card__img">
        <img src="images/dummy.png" alt="">
      </div>
      <h3 class="p-card__title">タイトル</h3>
      <p class="p-card___text">抜粋が入ります。抜粋が入ります。抜粋が入ります。抜粋が入ります。抜粋が入ります。</p>
      <div class="p-card__link-wrap">
        <a href="" class="p-card__link">詳細を見る</a>

      </div>
    </li>
    <li class="p-cards__item p-card">
      <div class="p-card__img">
        <img src="images/dummy.png" alt="">
      </div>
      <h3 class="p-card__title">タイトル</h3>
      <p class="p-card___text">抜粋が入ります。抜粋が入ります。抜粋が入ります。抜粋が入ります。抜粋が入ります。</p>
      <div class="p-card__link-wrap">
        <a href="" class="p-card__link">詳細を見る</a>

      </div>
    </li>
    <li class="p-cards__item p-card">
      <div class="p-card__img">
        <img src="images/dummy.png" alt="">
      </div>
      <h3 class="p-card__title">タイトル</h3>
      <p class="p-card___text">抜粋が入ります。抜粋が入ります。</p>
      <div class="p-card__link-wrap">
        <a href="" class="p-card__link">詳細を見る</a>

      </div>
    </li>

  </ul>
.p-cards {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  column-gap: 10px;
  row-gap: 10px;

}

.p-card {
  display: flex;
  flex-direction: column;
  height: 100%;
  position: relative;
}

.p-card__img {
  width: 100%;
  display: block;
}

.p-card img {
  width: 100%;
  height: 100%;
  display: block;
}


.p-card__link-wrap {
  margin-top: 10px;
}

.p-card__link {
  padding: 8px;
  display: inline-block;
  background: yellow;
}


カードレイアウト

テキストが増えると「詳細を見る」の位置がバラバラ。デザインによっては、ここもきれいに下部に揃えたいときもあります。

なので、例えば以下のように書き換え。

.p-card__link-wrap {
  margin-top: auto;

}
カードレイアウト

これで「詳細を見る」は下部にそろいます。ただ、テキストが長いとき「詳細を見る」との間に余白がないように見えます。ここでmargin-topをautoではなく10pxとか値を持たせてしまうと、今度は「詳細を見る」の位置がそろわなくなる。

なので、次のように修正。

.p-card___text {
  flex-grow: 1;
}

.p-card__link-wrap {
  margin-top: 10px;
}

テキストと「詳細を見る」間の余白を確保しつつ、テキストにはflex-growを指定して、カード内の余った余白をテキストに配分して伸ばす(イメージ)。

カードレイアウト

「詳細を見る」を下部に固定しつつ、テキストとの間も余白確保。

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

この記事を書いた人