MENU

コーディングクイズ No.15:CSS(レスポンシブデザイン)

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

🎯 問題
ECサイトの商品カードを作成中、デスクトップでは3列、タブレットでは2列、モバイルでは1列で表示したいと考えています。以下のHTMLとCSSを使用して、最も効率的で保守性の高いレスポンシブデザインを実現するCSSコードはどれでしょうか?
<div class="product-grid">
  <div class="product-card">
    <img src="product1.jpg" alt="商品1">
    <h3>商品1</h3>
    <p>¥1,200</p>
  </div>
  <div class="product-card">
    <img src="product2.jpg" alt="商品2">
    <h3>商品2</h3>
    <p>¥2,400</p>
  </div>
  <!-- 他の商品カード -->
</div>
要件:デスクトップ(768px以上)で3列、タブレット(480px〜767px)で2列、モバイル(479px以下)で1列表示
A. Grid Layoutを使用して、各ブレークポイントでgrid-template-columnsを再定義
B. Flexboxを使用して、各ブレークポイントでflex-basisを調整
C. Float clearfixテクニックを使用して、各ブレークポイントでwidthを調整
D. CSS Grid Layoutのfr単位とminmax()を組み合わせて自動調整
答えを確認する

✅ 正解:A

正解
正解は A. Grid Layoutを使用して、各ブレークポイントでgrid-template-columnsを再定義 です!

解説

CSS Grid Layoutは、2次元レイアウトに最適化されており、レスポンシブデザインにおいて非常に強力で直感的な解決策を提供します。各ブレークポイントでgrid-template-columnsを変更することで、明確で保守性の高いコードを実現できます。

  • 選択肢A: 正解!Grid Layoutは現代的で効率的な解決策。各ブレークポイントでgrid-template-columnsを変更するだけで、シンプルかつ明確なレスポンシブデザインが実現できます。
  • 選択肢B: Flexboxも有効な選択肢ですが、複数行のグリッドレイアウトには若干複雑になります。flex-wrap: wrapと組み合わせて使用する必要があり、Grid Layoutほど直感的ではありません。
  • 選択肢C: Float clearfixは古い手法で、現在は非推奨です。コードが複雑になりがちで、保守性が低く、モダンブラウザでは他の選択肢が優れています。
  • 選択肢D: minmax()とfr単位の組み合わせは高度なテクニックですが、この特定の要件(固定の列数変更)には過度に複雑で、意図しない挙動を引き起こす可能性があります。

実際の開発では、Grid Layoutを使用することで、レスポンシブデザインの実装が大幅に簡素化されます。特に商品カードのような均等に配置したい要素には最適です。また、gap プロパティを使用して要素間の間隔も簡単に調整できます。

/* 正解のCSS実装例 */
.product-grid {
  display: grid;
  gap: 20px;
  padding: 20px;
}

/* モバイル(デフォルト): 1列 */
.product-grid {
  grid-template-columns: 1fr;
}

/* タブレット: 2列 */
@media (min-width: 480px) {
  .product-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* デスクトップ: 3列 */
@media (min-width: 768px) {
  .product-grid {
    grid-template-columns: repeat(3, 1fr);
  }
}

.product-card {
  background: #fff;
  border: 1px solid #ddd;
  border-radius: 8px;
  padding: 15px;
  text-align: center;
}

.product-card img {
  width: 100%;
  height: 200px;
  object-fit: cover;
  border-radius: 4px;
}

このアプローチにより、各ブレークポイントでの挙動が明確になり、デバッグやメンテナンスが容易になります。モバイルファーストの設計原則に従って、最小画面から順に定義することで、スケーラブルなレスポンシブデザインを実現できます。

💡 ポイント
  • CSS Grid Layoutは2次元レイアウトに最適で、複雑な計算が不要
  • repeat()関数を使用することで、同じ幅の列を簡潔に定義できる
  • gap プロパティで要素間の間隔を統一的に管理できる
  • モバイルファーストの設計原則に従って、小さい画面から順に定義する
よかったらシェアしてね!