【CSS】Flexboxで作るレスポンシブ対応のブログカード風デザイン

CSS

はじめに

今日はHTMLとCSSをブログの「記事一覧」や「おすすめ記事」に使える、カード風レイアウトを作ってみます。WordPressでも使えるデザインを紹介するので、最後まで読んでいただけたら嬉しいです。

完成イメージ

デスクトップではカードが3つ横並び、PCでは縦1列で並ぶレイアウトになります。

 【実践】カード風デザインを実装する

HTMLコード

<body>
  <section class="card-section">
    <h2>記事一覧</h2>
    <div class="card-list">
      <div class="card">
        <span class="tag">デザイン</span>
        <img src="card_image.png" alt="記事画像">
        <h3>タイトル1</h3>
        <p>記事の紹介文がここに入ります。</p>
        <a href="#" class="read-more">続きを読む</a>
      </div>


      <div class="card">
        <span class="tag">CSS</span>
        <img src="card_image.png" alt="記事画像">
        <h3>タイトル2</h3>
        <p>Flexboxを使ったレイアウトの方法を紹介しています。</p>
        <a href="#" class="read-more">続きを読む</a>
      </div>


      <div class="card">
        <span class="tag">HTML</span>
        <img src="card_image.png" alt="記事画像">
        <h3>タイトル3</h3>
        <p>タグや続きを読むボタンも付けてみました。</p>
        <a href="#" class="read-more">続きを読む</a>
      </div>
    </div>
  </section>
</body>

ポイント解説

それぞれ要素に付与したクラスの役割を解説します!

card-list → 複数のカードを並べるためのボックス
card → 個別のカード
tag → カテゴリやタグのスタイル用

CSSコード

body {
  font-family: "Helvetica Neue", sans-serif;
  margin: 0;
  padding: 0;
  background: #f0f0f0;
  color: #333;
}

.card-section {
  max-width: 1000px;
  margin: 2rem auto;
  padding: 1rem;
}

.card-section h1 {
  text-align: center;
  margin-bottom: 2rem;
}

/* カードリスト */
.card-list {
  display: flex;
  flex-wrap: wrap;
  gap: 1.2rem;
  justify-content: space-between;
}

/* カード */
.card {
  position: relative;
  background: #fff;
  border-radius: 10px;
  box-shadow: 0 4px 8px rgba(0,0,0,0.1);
  width: 300px;
  overflow: hidden;
  transition: transform 0.3s;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.card:hover {
  transform: translateY(-5px);
}

/* タグ */
.tag {
  position: absolute;
  top: 10px;
  left: 10px;
  background: #00bb1c;
  color: white;
  padding: 0.3em 0.6em;
  font-size: 0.8rem;
  border-radius: 4px;
}

/* カード中身 */
.card img {
  width: 100%;
  height: auto;
  display: block;
}

.card h2 {
  font-size: 1.2rem;
  margin: 1rem;
}

.card p {
  margin: 0 1rem;
  flex-grow: 1;
}

/* ボタン */
.read-more {
  display: block;
  margin: 1rem;
  padding: 0.5rem;
  text-align: center;
  background: #ffbf60;
  color: white;
  text-decoration: none;
  border-radius: 6px;
  transition: background 0.3s;
}

.read-more:hover {
  background: #e8a806;
}

/* レスポンシブ */
@media (max-width: 660px) {
  .card-list {
    flex-direction: column;
    align-items: center;
  }
}

ポイント解説

レイアウトを横並びにするFlexbox(フレックスボックス)を複数のカードを並べるためのボックス(card-list)に指定することで、中に入るカードを横並びにしています。
.card-list {
  display: flex;
  flex-wrap: wrap;
  gap: 1.2rem;
  justify-content: space-between;
}

Flexboxとは・・・要素を「並べる」「間隔を空ける」「折り返す」など、柔軟なレイアウトができるCSS機能のこと

主なプロパティ・・・

プロパティ 役割
display: flex Flexboxを使う宣言
flex-wrap: wrap 画面幅に応じて折り返す
gap 子要素の間隔(上下左右対応)
justify-content 横方向の配置

flexboxを使うことでレイアウトの幅が広がりますね。
今回はレスポンシブ対応ということでスマホサイズの時にflex-direction: column;でカードが1つずつ縦に並ぶようにしています。

@media (max-width: 660px) {
  .card-list {
    flex-direction: column;
    align-items: center;
  }
}

まとめ

今回は、HTMLとCSSだけで作れる「カード風レイアウト」を紹介しましたカード型のデザインはブログやポートフォリオなど多くのサイトで使われているので、覚えておくと役に立ちます。Flexboxを活用することで、横並びや、画面サイズに合わせて折り返したりといったレイアウトが手軽にできますね。
最後までお読みいただきありがとうございました!

タイトルとURLをコピーしました