MENU

コーディングクイズ No.14:CSS(CSS Grid)

毎日コーディングクイズシリーズ!今回はCSSのCSS Gridについて、実践的なクイズ形式で学習しましょう!

🎯 問題
ECサイトの商品一覧ページで、カードレイアウトを実装しています。各商品カードは画像・タイトル・価格・購入ボタンで構成されており、画像は上部、価格と購入ボタンは下部に固定し、タイトルは中央の可変領域に配置したいと考えています。
<div class="product-card">
  <img src="product.jpg" alt="商品画像" class="product-image">
  <h3 class="product-title">商品名がここに入ります。長いタイトルの場合は複数行になることがあります。</h3>
  <p class="product-price">¥2,980</p>
  <button class="purchase-btn">カートに追加</button>
</div>
CSS Gridを使用して、カードの高さが統一されている場合でも、タイトルの長さに関わらず画像を上部、価格と購入ボタンを下部に配置するレイアウトを実現するCSSはどれでしょうか?
A. grid-template-rows: auto auto auto auto;
B. grid-template-rows: auto 1fr auto auto;
C. grid-template-rows: 1fr auto auto auto;
D. grid-template-rows: auto auto 1fr auto;
答えを確認する

✅ 正解:B

正解
正解は B. grid-template-rows: auto 1fr auto auto; です!

解説

CSS Gridで要素を適切に配置するには、各行の高さを正しく設定する必要があります。この問題では、画像は固有のサイズ、価格と購入ボタンは最小限のサイズで表示し、タイトル部分で余った空間を埋めることが重要です。

  • 選択肢A: `auto auto auto auto`では全ての行が内容に応じたサイズになり、カードの高さが統一されていても中央に余白が生まれてしまいます。
  • 選択肢B: `auto 1fr auto auto`が正解です。画像(auto)、タイトル(1fr=余った空間を占有)、価格(auto)、ボタン(auto)の順で配置され、理想的なレイアウトが実現されます。
  • 選択肢C: `1fr auto auto auto`では最初の行(画像)が余った空間を占有してしまい、画像が異常に大きくなる可能性があります。
  • 選択肢D: `auto auto 1fr auto`では価格部分が余った空間を占有してしまい、価格とボタンの間に不要な空間が生まれます。

実際の開発では、カードレイアウトの統一性が重要です。`1fr`を適切な位置に配置することで、タイトルの長さが異なる商品カードでも、すべて同じ高さで美しく整列させることができます。

.product-card {
  display: grid;
  grid-template-rows: auto 1fr auto auto;
  gap: 12px;
  padding: 16px;
  border: 1px solid #e0e0e0;
  border-radius: 8px;
  height: 400px; /* 統一された高さ */
}

.product-image {
  width: 100%;
  height: auto;
  object-fit: cover;
}

.product-title {
  margin: 0;
  font-size: 16px;
  line-height: 1.4;
  /* 1frにより、余った空間を占有 */
}

.product-price {
  margin: 0;
  font-size: 18px;
  font-weight: bold;
  color: #e74c3c;
}

.purchase-btn {
  padding: 8px 16px;
  background: #3498db;
  color: white;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

CSS Gridの`fr`単位を理解し、適切に使用することで、柔軟で保守性の高いレイアウトを作成できます。特にカードレイアウトでは、内容の長さに関わらず一貫した外観を保つことが重要です。

💡 ポイント
  • `1fr`は利用可能な空間を占有する単位で、フレキシブルなレイアウトに最適
  • カードレイアウトでは、可変コンテンツ(タイトルなど)に`1fr`を適用するのが効果的
  • `auto`は内容に応じたサイズになるため、画像やボタンなどの固定要素に使用
  • 商品一覧などでは、カードの高さを統一してユーザビリティを向上させることが重要
よかったらシェアしてね!