デザインの様式を、動くデモ・効く理由・実装で踏んだ罠つきで解剖する図鑑。
様式名: ハンドクラフト・手描き / ナビゲーション
「壊れた例」を押すと、この様式が成立しなくなる条件を実物で見られます。
| 対象 | 文字色 | 背景 | 実効背景 | 比 | 判定 |
|---|---|---|---|---|---|
| ナビ文字(紙地) | #2b2622 | #f4ead8 | #f4ead8 | 12.55:1 | AA 合格 |
| 非現在地リンク(紙地) | #6b5d4f | #f4ead8 | #f4ead8 | 5.33:1 | AA 合格 |
| 現在地下線・CTA(紙地) | #b23a2e | #f4ead8 | #f4ead8 | 4.98:1 | AA 合格(余裕なし) |
| CTA文字(白 on 判子赤) | #ffffff | #b23a2e | #b23a2e | 5.94:1 | AA 合格 |
<!doctype html>
<html lang="ja"><head><meta charset="utf-8"><title>ハンドクラフト・手描き ナビゲーション デモ</title><style>
*{box-sizing:border-box;margin:0;padding:0}
:root{
--paper:#f4ead8; /* 生成りの紙。19_handcraft_note と同じ配色を流用(実測値も同じ) */
--ink:#2b2622; /* インク。紙地で 12.55:1 */
--sub:#6b5d4f; /* サブ。紙地で 5.33:1 */
--stamp:#b23a2e; /* 判子の赤。紙地で 4.98:1、白抜きで 5.94:1 */
}
body{background:var(--paper);color:var(--ink);min-height:340px;position:relative;overflow:hidden;
font-family:"Yu Gothic","Hiragino Maru Gothic ProN",system-ui,sans-serif}
svg.filters{position:absolute;width:0;height:0}
/* 紙のグレイン。19 と同じ手法(feTurbulence の data URI)。装飾なのでクリックを吸わせない */
body::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:.06;
background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.5' numOctaves='3'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E")}
.hcnav{position:relative;z-index:1;border-bottom:2.5px dashed var(--ink)}
.hc-inner{max-width:640px;margin:0 auto;padding:14px 24px;display:flex;align-items:center;gap:20px}
/* 判子風ロゴ。装飾なのでリンクにしない(19 で踏んだ『アイコンだけでアフォーダンス不明』を避ける) */
.brand{display:inline-flex;align-items:center;justify-content:center;flex:none;
width:38px;height:38px;border:2.5px solid var(--stamp);border-radius:50%;color:var(--stamp);
font-size:12px;font-weight:800;transform:rotate(-8deg);opacity:.9;filter:url(#roughbox)}
.links{list-style:none;display:flex;gap:22px;flex:1}
.links a{position:relative;display:inline-block;text-decoration:none;color:var(--sub);
font-size:14px;font-weight:700;padding:6px 2px}
.links a:hover{color:var(--ink)}
.links a:focus-visible{outline:3px solid var(--ink);outline-offset:3px;border-radius:2px}
.links a[aria-current="page"]{color:var(--ink)}
/* 手描きの下線本体。text本体でなく専用の薄い要素に filter を掛けるため、
要素の縦横比が極端(幅広・高さ4px)になり、既定 filter region では波が上下で切れた。
region を広げた roughline を使うことで解消している */
.wobble-line{position:absolute;left:2px;right:2px;bottom:1px;height:4px;
background:var(--stamp);filter:url(#roughline)}
/* 現在地以外は hover / focus-visible のときだけ、判子色の手描き囲みを見せる。
:hover だけに実装すると、キーボードとタッチには何も変化が見えなくなる */
.links a:not([aria-current="page"]):hover::before,
.links a:not([aria-current="page"]):focus-visible::before{
content:"";position:absolute;inset:-4px -8px;border:2px solid var(--stamp);
border-radius:8px;filter:url(#roughbox);pointer-events:none}
.cta{margin-left:auto;flex:none;display:inline-block;background:var(--stamp);color:#fff;
font-weight:800;font-size:13px;padding:9px 18px;border-radius:14px 9px 15px 8px;
text-decoration:none;filter:url(#roughbox)}
.cta:focus-visible{outline:3px solid var(--ink);outline-offset:3px}
.page{position:relative;z-index:1;padding:34px 24px;max-width:640px;margin:0 auto}
.page .eyebrow{font-size:11px;letter-spacing:.12em;color:var(--sub);font-weight:700;margin-bottom:10px}
.page h1{font-size:clamp(24px,5.5vw,34px);line-height:1.2}
.page p{margin-top:10px;font-size:13px;line-height:1.85;color:var(--sub);max-width:30em}
</style></head><body>
<svg class="filters" aria-hidden="true">
<!-- 下線用:幅広・高さ4pxの帯に合わせて region を大きく広げる(既定 -10%/-10%/120%/120% では波が切れる) -->
<filter id="roughline" x="-20%" y="-140%" width="140%" height="380%">
<feTurbulence type="fractalNoise" baseFrequency="0.05 0.9" numOctaves="2" result="n"/>
<feDisplacementMap in="SourceGraphic" in2="n" scale="5"/>
</filter>
<!-- 囲み枠・ロゴ・CTA用:矩形でそこまで極端ではないが、同じ考え方で少し広げておく -->
<filter id="roughbox" x="-15%" y="-30%" width="130%" height="160%">
<feTurbulence type="fractalNoise" baseFrequency="0.02" numOctaves="3" result="n"/>
<feDisplacementMap in="SourceGraphic" in2="n" scale="4"/>
</filter>
</svg>
<nav class="hcnav" aria-label="グローバル">
<div class="hc-inner">
<span class="brand" aria-hidden="true">て</span>
<ul class="links">
<li><a href="#">ホーム</a></li>
<li><a href="#">作品</a></li>
<li><a href="#" aria-current="page">ものがたり<span class="wobble-line" aria-hidden="true"></span></a></li>
<li><a href="#">教室</a></li>
</ul>
<a class="cta" href="#">お問い合わせ</a>
</div>
</nav>
<div class="page">
<p class="eyebrow">STORY</p>
<h1>てしごとの、はじまり。</h1>
<p>ひとつずつ手を動かしてつくる時間について、作り手たちの言葉を集めています。今日も誰かの手が、何かを形にしています。</p>
</div>
</body></html>