ダーク・シネマティック プロジェクトカード(作品グリッド)

様式名: ダーク・シネマティック / カード

カードポートフォリオホバーオーバーレイフォーカス
⧉ 別タブで開く

「壊れた例」を押すと、この様式が成立しなくなる条件を実物で見られます。

特徴 — なぜ効くか

  • 21のヒーローと同じ『オーバーレイ必須』の原則を、カード1枚という小さい面積で再現する。面積が小さいほど『このくらいなら大丈夫』と省略されがちな部分
  • 疑似写真(CSSグラデーション)ごとに色相を振り、単色べったりにならないようにする。21・07との違いは『地が主役の1枚』ではなく『複数のサムネイルが並ぶグリッド』であること
  • タイトルとカテゴリは常時見える情報、詳細行(年・役割)はホバー/フォーカスで追加される補助情報、という2段構成にする
  • 角丸カードに overflow:hidden を掛けて疑似写真をトリミングする実装は定番だが、同じ理由で :focus-visible の outline も一緒に切り取られる(このパーツで実際に踏んだ罠)

実装メモ — 踏んだ罠

  • 疑似写真は radial-gradient / linear-gradient で色相違いの3〜4パターンを用意する。21のような単一の映像的な地と違い、カードが並ぶと『同じグラデの繰り返し』が単調さとして目立つため、色相・光源位置を変える
  • タイトル用のスクリム(linear-gradient(to top, rgba(8,11,15,.92), transparent))は常時表示にする。ホバー時にだけ現れる設計にすると、初期状態でタイトルが読めない(demo_bad.html)
  • 【自分で実測した数値】常時スクリム後の実効背景 #14181e の上で、タイトル #e8ecf0 は 15.00:1、カテゴリラベル #9fb0c0 は 8.01:1(21と同一パレット、同じ理由で成立)
  • 【自分で実測した数値】壊れた例:スクリムをホバー時のみ表示する設計では、素の状態のタイトルは疑似写真の最明部(採取 #7b8794)の上で 3.08:1 まで落ちる。AA(4.5:1)未達で、かつタッチ端末ではhoverが発火しないためこの状態が常時になる
  • 詳細行(年・役割)は :hover だけでなく :focus-within にも同じ表示スタイルを当てる。hoverのみの実装はキーボード操作・タッチ操作で永久に到達できない補助情報になる
  • 【踏んだ罠】カードに border-radius + overflow:hidden を掛けて疑似写真の角を丸めると、:focus-visible の outline も一緒に切り取られてキーボードフォーカスが見えなくなる。outline ではなく box-shadow(0 0 0 3px アクセント色)でリングを描くと、overflow:hidden の影響を受けない

使いどころ / 使ってはいけない場面

壊れる条件

コントラスト実測

対象文字色背景実効背景判定
タイトル(常時スクリム後の実効地)#e8ecf0#0b0f14#14181e15.00:1AA 合格
カテゴリラベル(常時スクリム後の実効地)#9fb0c0#0b0f14#14181e8.01:1AA 合格
壊れた例:タイトル(スクリムがホバー時のみ・地の最明部)#e8ecf0#7b8794#7b87943.08:1不合格

アクセシビリティ

スマホへの落とし方

ブラウザ対応

関連するパーツ

コードを見る
<!doctype html>
<html lang="ja"><head><meta charset="utf-8"><title>ダーク・シネマティック プロジェクトカード デモ</title><style>
*{box-sizing:border-box;margin:0;padding:0}
:root{
  --fg:#e8ecf0;
  --sub:#9fb0c0;
  --amber:#f0b429;
}
body{background:#0b0f14;color:var(--fg);min-height:340px;padding:24px;
  font-family:system-ui,-apple-system,"Hiragino Kaku Gothic ProN","Yu Gothic",sans-serif}
h3{font-family:"Georgia","Times New Roman",serif;font-size:17px;letter-spacing:.01em;margin-bottom:4px}
.lead{font-size:12px;color:var(--sub);line-height:1.8;max-width:36em;margin-bottom:18px}

.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
.card{position:relative;border-radius:12px;overflow:hidden;aspect-ratio:4/5;
  text-decoration:none;color:inherit;display:block;
  /* overflow:hiddenで角を丸めると:focus-visibleのoutlineも切り取られる。
     box-shadowでリングを描けばこの祖先の外側切り取りの影響を受けない */
  transition:transform .18s ease}
.card:focus-visible{box-shadow:0 0 0 3px var(--amber);outline:none}
.card:hover{transform:translateY(-2px)}
/* 光源はあえてタイトルの直上(左下寄り)に置く。写真は均一な暗さではなく、
   文字が乗る場所がたまたま明るいことは実写でも普通に起きるため、その最悪ケースで検証する */
.p1{background:radial-gradient(110% 85% at 30% 82%, #7b8794 0%, #43505c 30%, #1c242e 58%, #0b0f14 100%)}
.p2{background:radial-gradient(110% 85% at 25% 80%, #8a6b78 0%, #4a3944 30%, #221a20 58%, #0b0f14 100%)}
.p3{background:radial-gradient(110% 85% at 35% 85%, #6b7d8a 0%, #3a444d 30%, #1a2027 58%, #0b0f14 100%)}
/* タイトル用のスクリムは常時表示。ホバーでだけ出すと初期状態でタイトルが読めなくなる(demo_bad) */
.scrim{position:absolute;inset:0;background:linear-gradient(to top, rgba(8,11,15,.92) 0%, rgba(8,11,15,.35) 45%, transparent 75%);
  pointer-events:none}
.body{position:absolute;left:0;right:0;bottom:0;padding:14px}
.cat{display:block;font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--sub);margin-bottom:5px}
h4{font-family:"Georgia","Times New Roman",serif;font-size:15px;font-weight:400;line-height:1.3}
/* 詳細行はホバー/フォーカスの両方で出す。:hoverだけだとキーボード・タッチで永久に見えない */
.meta{max-height:0;opacity:0;overflow:hidden;transition:max-height .2s ease,opacity .2s ease;
  font-size:11px;color:var(--sub);margin-top:6px}
.card:hover .meta,.card:focus-within .meta{max-height:40px;opacity:1}
</style></head><body>
<h3>Selected Works</h3>
<p class="lead">タイトル用のスクリムは常時表示にし、ホバー・フォーカスでは詳細行だけを追加する。フォーカスリングは box-shadow で描き、角丸トリミングの外側切り取りを避ける。</p>

<div class="grid">
  <a class="card" href="#">
    <div class="p1" style="position:absolute;inset:0"></div>
    <div class="scrim"></div>
    <div class="body">
      <span class="cat">Documentary</span>
      <h4>Into the Quiet Dark</h4>
      <p class="meta">2025 / Director, Editor</p>
    </div>
  </a>
  <a class="card" href="#">
    <div class="p2" style="position:absolute;inset:0"></div>
    <div class="scrim"></div>
    <div class="body">
      <span class="cat">Short Film</span>
      <h4>Amber Hour</h4>
      <p class="meta">2024 / Cinematographer</p>
    </div>
  </a>
  <a class="card" href="#">
    <div class="p3" style="position:absolute;inset:0"></div>
    <div class="scrim"></div>
    <div class="body">
      <span class="cat">Music Video</span>
      <h4>Low Tide</h4>
      <p class="meta">2024 / Director</p>
    </div>
  </a>
</div>
</body></html>
出典・参考: 自作の再現実装。オーバーレイ必須の原則と実測パレットは21_dark_cinematic_heroを踏襲。overflow:hiddenとoutlineの相互作用はCSSの一般的な既知の挙動(初期値ではoutlineはボックスの外側に描かれ、overflow:hiddenの祖先で切り取られる)。hover専用UIの操作性問題はWCAG 2.1.1(キーボード操作可能)の観点。コントラスト値は当方で実測。