記事カード

サムネイル画像とカテゴリタグ、タイトル、抜粋文、著者と日付をまとめたブログ記事カード。ホバーでサムネイルが拡大し、タイトルの色がアクセントカラーに変わります。

#css#card#blog

ライブデモ

コード

HTML
<!-- 記事カード: サムネ+カテゴリタグ+タイトル+抜粋+著者/日付 -->
<div class="stage">
  <article class="bl-card">
    <div class="bl-card__media">
      <img src="https://picsum.photos/id/1060/600/400" alt="記事のサムネイル画像" width="600" height="400">
      <span class="bl-card__tag">デザイン</span>
    </div>
    <div class="bl-card__body">
      <h2 class="bl-card__title"><a href="#">余白の設計が、体験の質を決める理由</a></h2>
      <p class="bl-card__excerpt">情報を詰め込むほど良いとは限らない。読み手の視線が迷わないための余白の使い方を、実例を交えて解説します。</p>
      <div class="bl-card__meta">
        <img class="bl-card__avatar" src="https://picsum.photos/id/64/64/64" alt="著者のアバター">
        <div class="bl-card__meta-text">
          <b>三坂 灯</b>
          <span>2026年7月2日 ・ 5分で読了</span>
        </div>
      </div>
    </div>
  </article>
</div>
CSS
/* 記事カード */
* { box-sizing: border-box; }

body {
  margin: 0;
  min-height: 100vh;
  padding: 20px;
  display: grid;
  place-items: center;
  font-family: "Hiragino Sans", "Segoe UI", system-ui, -apple-system, sans-serif;
  background:
    radial-gradient(circle at 10% 10%, #fdeee0 0%, transparent 45%),
    radial-gradient(circle at 92% 88%, #e7f1e9 0%, transparent 50%),
    #faf9f6;
  color: #23222a;
}

.stage { display: grid; place-items: center; }

.bl-card {
  width: min(340px, 90vw);
  background: #fff;
  border-radius: 18px;
  overflow: hidden;
  box-shadow: 0 12px 34px rgba(30, 26, 20, .1);
  transition: transform .3s cubic-bezier(.22,1,.36,1), box-shadow .3s ease;
}
.bl-card:hover { transform: translateY(-6px); box-shadow: 0 26px 54px rgba(30, 26, 20, .16); }

.bl-card__media {
  position: relative;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: #eee;
}
.bl-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform .5s cubic-bezier(.22,1,.36,1);
}
.bl-card:hover .bl-card__media img { transform: scale(1.08); }

.bl-card__media::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(0deg, rgba(20, 16, 10, .35), transparent 55%);
  opacity: .55;
  animation: bl-glow 6s ease-in-out infinite;
  pointer-events: none;
}
@keyframes bl-glow {
  0%, 100% { opacity: .5; }
  50% { opacity: .78; }
}

.bl-card__tag {
  position: absolute;
  left: 14px;
  bottom: 12px;
  z-index: 1;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .04em;
  color: #23222a;
  background: rgba(255, 255, 255, .92);
  padding: 5px 12px;
  border-radius: 999px;
}

.bl-card__body { padding: 20px 22px 22px; }
.bl-card__title { margin: 0 0 10px; font-size: 17.5px; line-height: 1.5; font-weight: 800; }
.bl-card__title a { color: #201f26; text-decoration: none; transition: color .2s ease; }
.bl-card__title a:hover { color: #c2660f; }

.bl-card__excerpt {
  margin: 0 0 18px;
  font-size: 13px;
  line-height: 1.75;
  color: #6c6a72;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.bl-card__meta { display: flex; align-items: center; gap: 10px; padding-top: 16px; border-top: 1px solid #f0ece4; }
.bl-card__avatar { width: 34px; height: 34px; border-radius: 50%; object-fit: cover; flex: 0 0 auto; display: block; }
.bl-card__meta-text { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.bl-card__meta-text b { font-size: 12.5px; color: #23222a; }
.bl-card__meta-text span { font-size: 11px; color: #9b98a0; }

@media (prefers-reduced-motion: reduce) {
  .bl-card, .bl-card__media img, .bl-card__title a { transition: none; }
  .bl-card__media::after { animation: none; }
}
JavaScript
// この記事カードは装飾・挙動ともCSSのみで完結するためJSは不要

🤖 AIエージェント用プロンプト

このままコピーしてAIに貼り付け「追加する場所」だけ書き換えればOK
あなたは熟練のフロントエンドエンジニアです。私のWebサイトに「記事カード」の効果を追加してください。

# 追加してほしい効果
記事カード(カード & テーブル)
サムネイル画像とカテゴリタグ、タイトル、抜粋文、著者と日付をまとめたブログ記事カード。ホバーでサムネイルが拡大し、タイトルの色がアクセントカラーに変わります。

# 追加する場所
👉【ここに対象箇所を記入:例「トップのヒーローセクション」「お問い合わせボタン」「記事カードの一覧」など】

# 参考実装(この見た目・挙動を再現してください)
【HTML】
<!-- 記事カード: サムネ+カテゴリタグ+タイトル+抜粋+著者/日付 -->
<div class="stage">
  <article class="bl-card">
    <div class="bl-card__media">
      <img src="https://picsum.photos/id/1060/600/400" alt="記事のサムネイル画像" width="600" height="400">
      <span class="bl-card__tag">デザイン</span>
    </div>
    <div class="bl-card__body">
      <h2 class="bl-card__title"><a href="#">余白の設計が、体験の質を決める理由</a></h2>
      <p class="bl-card__excerpt">情報を詰め込むほど良いとは限らない。読み手の視線が迷わないための余白の使い方を、実例を交えて解説します。</p>
      <div class="bl-card__meta">
        <img class="bl-card__avatar" src="https://picsum.photos/id/64/64/64" alt="著者のアバター">
        <div class="bl-card__meta-text">
          <b>三坂 灯</b>
          <span>2026年7月2日 ・ 5分で読了</span>
        </div>
      </div>
    </div>
  </article>
</div>

【CSS】
/* 記事カード */
* { box-sizing: border-box; }

body {
  margin: 0;
  min-height: 100vh;
  padding: 20px;
  display: grid;
  place-items: center;
  font-family: "Hiragino Sans", "Segoe UI", system-ui, -apple-system, sans-serif;
  background:
    radial-gradient(circle at 10% 10%, #fdeee0 0%, transparent 45%),
    radial-gradient(circle at 92% 88%, #e7f1e9 0%, transparent 50%),
    #faf9f6;
  color: #23222a;
}

.stage { display: grid; place-items: center; }

.bl-card {
  width: min(340px, 90vw);
  background: #fff;
  border-radius: 18px;
  overflow: hidden;
  box-shadow: 0 12px 34px rgba(30, 26, 20, .1);
  transition: transform .3s cubic-bezier(.22,1,.36,1), box-shadow .3s ease;
}
.bl-card:hover { transform: translateY(-6px); box-shadow: 0 26px 54px rgba(30, 26, 20, .16); }

.bl-card__media {
  position: relative;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: #eee;
}
.bl-card__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  transition: transform .5s cubic-bezier(.22,1,.36,1);
}
.bl-card:hover .bl-card__media img { transform: scale(1.08); }

.bl-card__media::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(0deg, rgba(20, 16, 10, .35), transparent 55%);
  opacity: .55;
  animation: bl-glow 6s ease-in-out infinite;
  pointer-events: none;
}
@keyframes bl-glow {
  0%, 100% { opacity: .5; }
  50% { opacity: .78; }
}

.bl-card__tag {
  position: absolute;
  left: 14px;
  bottom: 12px;
  z-index: 1;
  font-size: 11px;
  font-weight: 700;
  letter-spacing: .04em;
  color: #23222a;
  background: rgba(255, 255, 255, .92);
  padding: 5px 12px;
  border-radius: 999px;
}

.bl-card__body { padding: 20px 22px 22px; }
.bl-card__title { margin: 0 0 10px; font-size: 17.5px; line-height: 1.5; font-weight: 800; }
.bl-card__title a { color: #201f26; text-decoration: none; transition: color .2s ease; }
.bl-card__title a:hover { color: #c2660f; }

.bl-card__excerpt {
  margin: 0 0 18px;
  font-size: 13px;
  line-height: 1.75;
  color: #6c6a72;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}

.bl-card__meta { display: flex; align-items: center; gap: 10px; padding-top: 16px; border-top: 1px solid #f0ece4; }
.bl-card__avatar { width: 34px; height: 34px; border-radius: 50%; object-fit: cover; flex: 0 0 auto; display: block; }
.bl-card__meta-text { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.bl-card__meta-text b { font-size: 12.5px; color: #23222a; }
.bl-card__meta-text span { font-size: 11px; color: #9b98a0; }

@media (prefers-reduced-motion: reduce) {
  .bl-card, .bl-card__media img, .bl-card__title a { transition: none; }
  .bl-card__media::after { animation: none; }
}

【JavaScript】
// この記事カードは装飾・挙動ともCSSのみで完結するためJSは不要

# 外部ライブラリ
なし(追加ライブラリ不要)

# 守ってほしいこと
- 既存のHTML構造・レイアウト・デザインを壊さないこと。必要に応じてクラス名・色・サイズを私のサイトに合わせて調整してよい。
- クラス名やidが既存と衝突しないよう、必要なら接頭辞で名前空間を分けること。
- レスポンシブ対応と prefers-reduced-motion への配慮を入れること。
- 私のサイトのフレームワーク(React / Vue / 素のHTML など)に合わせて実装すること。不明な場合は素のHTML/CSS/JSで提示し、組み込み手順も説明すること。
- 変更後の確認手順も簡潔に教えてください。