ナビゲーション · ナビゲーション
星座図・天体図風のサイトナビゲーション
夜空の星座と天体観測カタログを再構築したサイトナビゲーション。各ページを「恒星」、カテゴリを「星座」として配置し、現在地を北極星(Polaris)の脈動で示す、神秘的で詩的な尖った設計。
このブラウザー内に保存します。別の端末との同期はなく、サイトデータを消すと保存も消えます。
印刷時は見本を静止画にし、プロンプトと解説を出力します。PDF保存はブラウザーの印刷画面から選べます。
Vibehaus · デザイン資料
https://vibe.itlibra.com/design/constellation-navigation/
完全無料・著作権フリー(CC0)· 料金¥0 · 商用利用・改変自由
プレビュー
指定幅で実際に組み替えて表示します。表示領域より広い場合は、この枠の中で横へスクロールできます。
AIへの指示文
プロダクトサイトの全体ナビゲーションを、星座図・天体観測カタログのフォーマットで作ってください。
要件:
- 配色: 深宇宙 #06070d / #0d1024 + 恒星白 #f8f4dc + 黄金 #f5b938 + ティール #4dd9ff + 薔薇 #ff5f8a。
- 全画面に微弱な多層ラジアル(青・薔薇・金)+ ランダムな星屑(radial-gradient を 12カ所、サイズと色を変えて点描)。body::before に固定。
- 上部バー: ブランド名「Astra」(イタリック大文字)+ サブ「OBSERVATORY」 / 右に天文表記(RA / DEC / MAG)。
- 中央見出し: 大型イタリック明朝(Cormorant Garamond / Hiragino Mincho ProN)「あなたの行き先は、夜空の中にある。」最後の語のみ立体直立。
- 星図ボックス(aspect 16:9):
- 背景は微妙な radial gradient(中心薄明)
- SVG で星座線を描画(細い stroke、dashed accent)
- 主三角形 + 内部の補助線 + 末端への放射
- 黄金の点線で「推奨ルート」を示す
- 現在地(Polaris)に脈動円(SMIL animate r/opacity)
- 上に絶対配置の星ノード(10個)
- 各ノード = 円形 point + 名前(イタリック明朝)+ ローマ字ラベル(モノスペース)
- α/β/γ の階級でサイズを差別化(major/normal)
- twinkle アニメ(opacity + scale)+ orbit ring(dashed border 回転)
- hover で point が金色に発光、name が金色に
- 下部レジェンド: α MAJOR STAR / β BRIDGE / γ SATELLITE / ★ YOU ARE HERE の4区分を1pxボーダーで囲む。
- 装飾: 星屑(CSS radial-gradient point の集まり)、orbit リングのrotate animation。
- フォント: 見出し Cormorant Garamond italic、本文 Garamond / Hiragino Mincho、コード JetBrains Mono、サブ Helvetica Neue。
- JS不要、フルレスポンシブ(モバイルはノード配置を縦長に組み替え)。
バリエーション
星座カタログ書籍風
背景を黒紺ではなく古紙 #f3ead6、線を墨黒に反転。 見出しを古典書体(EB Garamond)に。星はインク刺繍風に。
SF・スタートレック風
ティール #4dd9ff 主体に振り切り、HUD ライク。マグネタイズドノードに置換。 フォントを Eurostile / Orbitron 系へ。
このプレビューのコード
HTML・CSS・JavaScriptの1ファイルです。外部依存・広告・解析コードはありません。10個の星から説明へ移動する架空のサイト案内です。図は横にスクロールでき、キー操作にも対応します。動きの停止・OSの動き低減に対応し、外部への移動・送信は行いません。
コードを表示
<!doctype html>
<!-- Vibehaus — CC0。CSS・SVGとページ内操作の1ファイル版。製品・星図・路線とリンク先は架空の表示見本です。 -->
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="robots" content="noindex,nofollow">
<title>constellation-navigation preview</title>
<style>
:root {
--void: #06070d;
--void2: #0d1024;
--star: #f8f4dc;
--gold: #f5b938;
--teal: #4dd9ff;
--rose: #ff5f8a;
--line: rgba(248,244,220,0.32);
--line-soft: rgba(248,244,220,0.13);
}
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
body {
background: var(--void);
color: var(--star);
font-family: "Garamond", "Cormorant Garamond", "Hiragino Mincho ProN", "Yu Mincho", "Noto Serif JP", serif;
line-height: 1.7;
min-height: 100vh;
-webkit-font-smoothing: antialiased;
background-image:
radial-gradient(circle at 30% 20%, rgba(77,217,255,0.08), transparent 50%),
radial-gradient(circle at 80% 80%, rgba(255,95,138,0.06), transparent 55%),
radial-gradient(circle at 50% 50%, rgba(245,185,56,0.04), transparent 70%);
}
body::before {
content: "";
position: fixed; inset: 0;
pointer-events: none;
background-image:
radial-gradient(1px 1px at 25% 12%, rgba(248,244,220,0.7), transparent 1px),
radial-gradient(1px 1px at 78% 22%, rgba(248,244,220,0.55), transparent 1px),
radial-gradient(1px 1px at 12% 65%, rgba(248,244,220,0.6), transparent 1px),
radial-gradient(1px 1px at 88% 75%, rgba(248,244,220,0.5), transparent 1px),
radial-gradient(1.5px 1.5px at 45% 88%, rgba(245,185,56,0.6), transparent 1px),
radial-gradient(1px 1px at 65% 5%, rgba(248,244,220,0.4), transparent 1px),
radial-gradient(1px 1px at 32% 92%, rgba(77,217,255,0.5), transparent 1px),
radial-gradient(1px 1px at 5% 30%, rgba(248,244,220,0.45), transparent 1px),
radial-gradient(1px 1px at 95% 50%, rgba(248,244,220,0.4), transparent 1px),
radial-gradient(0.8px 0.8px at 55% 35%, rgba(248,244,220,0.6), transparent 1px),
radial-gradient(0.8px 0.8px at 70% 60%, rgba(248,244,220,0.55), transparent 1px),
radial-gradient(0.8px 0.8px at 18% 78%, rgba(248,244,220,0.5), transparent 1px);
z-index: 0;
}
.wrap {
position: relative;
max-width: 1320px;
margin: 0 auto;
padding: clamp(28px, 4vw, 64px);
z-index: 1;
}
/* Top bar */
.topbar {
display: flex;
justify-content: space-between;
align-items: center;
padding-bottom: 16px;
border-bottom: 1px solid var(--line-soft);
font-size: 11px;
letter-spacing: 0.4em;
color: rgba(248,244,220,0.65);
text-transform: uppercase;
font-family: "JetBrains Mono", monospace;
}
.topbar .brand {
font-family: "Garamond", "Hiragino Mincho ProN", serif;
font-size: 18px;
letter-spacing: 0.18em;
color: var(--star);
text-transform: none;
}
.topbar .brand small {
font-size: 10px;
letter-spacing: 0.4em;
margin-left: 14px;
color: rgba(248,244,220,0.5);
font-family: "JetBrains Mono", monospace;
}
.topbar .right {
display: flex; gap: 24px;
}
/* Heading */
.heading {
text-align: center;
margin: 64px 0 32px;
}
.heading .eyebrow {
color: var(--gold);
font-size: 11px;
letter-spacing: 0.6em;
margin: 0 0 18px;
font-family: "JetBrains Mono", monospace;
text-transform: uppercase;
}
.heading h1 {
font-family: "Cormorant Garamond", "Hiragino Mincho ProN", "Yu Mincho", serif;
font-style: normal;
font-weight: 300;
font-size: clamp(48px, 7vw, 96px);
margin: 0 0 16px;
letter-spacing: 0.02em;
line-height: 1.1;
color: var(--star);
}
/* <i> の既定の斜体を消す。和文は傾けない(docs/RULES.md §8) */
.heading h1 i { font-style: normal; }
.heading h1 b {
font-style: normal;
font-weight: 600;
color: var(--gold);
}
.heading p {
max-width: 620px;
margin: 0 auto;
color: rgba(248,244,220,0.7);
font-size: 13.5px;
letter-spacing: 0.1em;
font-family: "Helvetica Neue", "Yu Gothic", sans-serif;
line-height: 1.85;
}
/* Star map */
.map {
position: relative;
margin: 48px auto 64px;
aspect-ratio: 16 / 9;
border: 1px solid var(--line-soft);
background:
radial-gradient(ellipse at 50% 50%, rgba(13,16,36,0.6), transparent 70%),
linear-gradient(135deg, rgba(13,16,36,0.4), rgba(6,7,13,0.6));
}
.map svg {
width: 100%; height: 100%;
display: block;
overflow: visible;
}
/* Constellation node */
.node {
position: absolute;
transform: translate(-50%, -50%);
text-align: center;
z-index: 2;
cursor: pointer;
text-decoration: none;
color: var(--star);
}
.node .point {
width: 14px; height: 14px;
border-radius: 50%;
background: var(--star);
margin: 0 auto;
box-shadow:
0 0 0 3px rgba(248,244,220,0.18),
0 0 14px 4px rgba(248,244,220,0.4);
position: relative;
transition: all 0.25s ease;
}
.node .point::after {
content: "";
position: absolute;
inset: -10px;
border: 1px dashed rgba(248,244,220,0.32);
border-radius: 50%;
animation: orbit 18s linear infinite;
}
@keyframes orbit { to { transform: rotate(360deg); } }
.node .name {
font-family: "Cormorant Garamond", "Hiragino Mincho ProN", serif;
font-size: 18px;
font-style: italic;
letter-spacing: 0.06em;
margin-top: 10px;
color: var(--star);
line-height: 1.2;
text-shadow: 0 1px 6px rgba(0,0,0,0.6);
}
.node .name b {
display: block;
font-style: normal;
font-weight: 400;
font-family: "JetBrains Mono", monospace;
font-size: 9.5px;
letter-spacing: 0.4em;
color: var(--gold);
margin-top: 4px;
text-transform: uppercase;
}
.node:hover .point {
background: var(--gold);
box-shadow:
0 0 0 4px rgba(245,185,56,0.25),
0 0 22px 8px rgba(245,185,56,0.55);
}
.node:hover .name { color: var(--gold); }
/* Major node (hub stars) */
.node.major .point {
width: 20px; height: 20px;
background: var(--gold);
box-shadow:
0 0 0 5px rgba(245,185,56,0.18),
0 0 26px 8px rgba(245,185,56,0.45);
}
.node.major .name { font-size: 22px; }
.node.teal .point { box-shadow: 0 0 0 3px rgba(77,217,255,0.18), 0 0 16px 4px rgba(77,217,255,0.4); }
.node.rose .point { box-shadow: 0 0 0 3px rgba(255,95,138,0.18), 0 0 16px 4px rgba(255,95,138,0.4); }
/* Twinkle */
@keyframes twinkle {
0%, 100% { opacity: 1; transform: scale(1); }
50% { opacity: 0.5; transform: scale(0.85); }
}
.node .point { animation: twinkle 3s ease-in-out infinite; }
.node:nth-child(odd) .point { animation-delay: 1s; }
/* Legend */
.legend {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 28px;
border-top: 1px solid var(--line-soft);
border-bottom: 1px solid var(--line-soft);
padding: 28px 0;
font-size: 12px;
letter-spacing: 0.05em;
}
@media (max-width: 720px) {
.legend { grid-template-columns: repeat(2, 1fr); }
}
.legend > div {
border-right: 1px dashed var(--line-soft);
padding-right: 24px;
}
.legend > div:last-child { border-right: 0; }
.legend h4 {
margin: 0 0 4px;
font-family: "JetBrains Mono", monospace;
color: var(--gold);
font-size: 10.5px;
letter-spacing: 0.4em;
text-transform: uppercase;
font-weight: 500;
}
.legend p {
margin: 0;
color: rgba(248,244,220,0.85);
font-family: "Garamond", "Hiragino Mincho ProN", serif;
line-height: 1.7;
}
.legend p i {
color: var(--star);
font-style: normal;
font-weight: 500;
}
/* Footer */
.colophon {
margin-top: 48px;
text-align: center;
color: rgba(248,244,220,0.5);
font-family: "JetBrains Mono", monospace;
font-size: 10px;
letter-spacing: 0.5em;
text-transform: uppercase;
}
.colophon b { color: var(--gold); }
[hidden] { display: none !important; }
.motion-toggle { min-height: 44px; padding: 0.6rem 1rem; margin: 1rem 0; font: inherit; line-height: 1.7; letter-spacing: 0; color: inherit; border: 1px solid currentColor; background: transparent; border-radius: 8px; cursor: pointer; }
[data-demo-scroll] { overflow: auto; max-width: 100%; }
a:focus-visible, button:focus-visible, [data-demo-scroll]:focus-visible { outline: 3px solid currentColor; outline-offset: 3px; }
.demo-note { max-width: 1160px; margin-left: auto; margin-right: auto; padding: 1rem; font-size: 0.9rem; line-height: 1.8; letter-spacing: 0; margin-top: 2rem; padding-top: 1rem; border-top: 1px solid currentColor; }
.demo-note h2 { font-size: 1.1rem; line-height: 1.4; letter-spacing: 0; }
.demo-note p { scroll-margin-top: 2rem; }
.map-help { font-size: 0.9rem; line-height: 1.8; letter-spacing: 0; }
.topbar, .topbar .brand, .topbar .right { flex-wrap: wrap; gap: 12px; }
.topbar .brand { display: flex; align-items: center; max-width: 100%; }
.topbar .brand small { margin-left: 0; }
.topbar .right span { white-space: nowrap; }
.heading h1 { line-height: 1.35; }
.heading p:not(.eyebrow), .legend p { letter-spacing: 0; }
.map-scroll { margin: 1rem 0 3rem; }
.map { min-width: 1160px; margin: 0; }
.node { width: 104px; margin-left: -52px; margin-top: -11px; transform: none; min-height: 64px; padding: 4px 6px; }
.node.major { margin-top: -14px; }
.node[href="#demo-current"] { width: 180px; margin-left: -90px; }
.node .point, .node .name { display: block; }
.node .name b { letter-spacing: 0.12em; white-space: nowrap; }
.node:focus-visible .name { color: var(--gold); }
.map-pulse { animation: map-pulse 2.6s ease-in-out infinite; }
@keyframes map-pulse { 0%, 100% { r: 22px; opacity: 0.8; } 50% { r: 42px; opacity: 0; } }
body[data-paused="true"] .point, body[data-paused="true"] .point::after, body[data-paused="true"] .map-pulse { animation: none; }
@media (prefers-reduced-motion: reduce) { .point, .point::after, .map-pulse { animation: none !important; } }
.legend > div { min-width: 0; }
@media (max-width: 720px) { .legend { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; } .legend > div { padding-right: 8px; } }
</style>
</head>
<body>
<div class="wrap">
<header class="topbar">
<div class="brand">Astra<small>EST. 2026 · OBSERVATORY</small></div>
<div class="right">
<span>RA 14h 32m</span>
<span>DEC −60° 50′</span>
<span>MAG +1.4</span>
</div>
</header>
<section class="heading">
<p class="eyebrow">— S I T E M A P · 天 球 図 —</p>
<h1><i>あなたの行き先は、</i><br><b>夜空の中にある。</b></h1>
<p>10個の星と4つの主星で、サイトの入口をたどる表示見本です。星を選ぶと、対応する説明へ移動します。</p>
</section>
<button type="button" class="motion-toggle" data-motion-toggle aria-pressed="false" hidden>動きを止める</button><p class="map-help" id="map-help">図は横にスクロールできます。Tabで星を選び、Enterで説明を開けます。</p><div class="map-scroll" data-demo-scroll tabindex="0" role="region" aria-label="星座の案内図" aria-describedby="map-help"><div class="map">
<svg viewBox="0 0 1320 740" preserveAspectRatio="none" aria-hidden="true">
<defs>
<filter id="glow"><feGaussianBlur stdDeviation="2"/></filter>
</defs>
<!-- constellation lines: triangle + ribs -->
<g stroke="rgba(248,244,220,0.32)" stroke-width="0.8" fill="none">
<!-- main triangle -->
<path d="M 280 200 L 720 130 L 1080 280" />
<path d="M 720 130 L 660 380" />
<path d="M 280 200 L 660 380" />
<path d="M 1080 280 L 660 380" />
<!-- spurs -->
<path d="M 660 380 L 460 540" />
<path d="M 660 380 L 880 540" />
<path d="M 460 540 L 320 640" />
<path d="M 460 540 L 600 600" />
<path d="M 880 540 L 760 600" />
<path d="M 880 540 L 1040 640" />
</g>
<!-- accent line (highlighted route) -->
<g stroke="rgba(245,185,56,0.7)" stroke-width="1.4" fill="none" stroke-dasharray="4 6">
<path d="M 280 200 L 660 380 L 880 540 L 1040 640"/>
</g>
<!-- "you are here" pulse -->
<circle class="map-pulse" cx="660" cy="380" r="32" fill="none" stroke="rgba(245,185,56,0.6)" stroke-width="1">
</circle>
</svg>
<!-- Nodes overlaid -->
<a class="node major" href="#demo-home" style="left: 21.2%; top: 27%;">
<span class="point"></span>
<span class="name">Vega<b>HOME · α01</b></span>
</a>
<a class="node major teal" href="#demo-blog" style="left: 54.5%; top: 17.5%;">
<span class="point"></span>
<span class="name">Altair<b>BLOG · α02</b></span>
</a>
<a class="node major rose" href="#demo-work" style="left: 81.8%; top: 38%;">
<span class="point"></span>
<span class="name">Deneb<b>WORK · α03</b></span>
</a>
<a class="node major" href="#demo-current" style="left: 50%; top: 51%;">
<span class="point"></span>
<span class="name">Polaris<b>YOU ARE HERE · α00</b></span>
</a>
<a class="node" href="#demo-about" style="left: 34.8%; top: 73%;">
<span class="point"></span>
<span class="name">Rigel<i></i><b>ABOUT · β01</b></span>
</a>
<a class="node" href="#demo-store" style="left: 66.7%; top: 73%;">
<span class="point"></span>
<span class="name">Sirius<b>STORE · β02</b></span>
</a>
<a class="node" href="#demo-faq" style="left: 24%; top: 86.5%;">
<span class="point"></span>
<span class="name">Capella<b>FAQ · γ01</b></span>
</a>
<a class="node" href="#demo-news" style="left: 45.5%; top: 81%;">
<span class="point"></span>
<span class="name">Procyon<b>NEWS · γ02</b></span>
</a>
<a class="node" href="#demo-press" style="left: 57.5%; top: 81%;">
<span class="point"></span>
<span class="name">Antares<b>PRESS · γ03</b></span>
</a>
<a class="node teal" href="#demo-contact" style="left: 79%; top: 86.5%;">
<span class="point"></span>
<span class="name">Spica<b>CONTACT · γ04</b></span>
</a>
</div>
</div>
<div class="legend">
<div>
<h4>α · MAJOR STAR</h4>
<p><i>4つの主星</i>が、サイトの幹となるカテゴリ。各章の入口。</p>
</div>
<div>
<h4>β · BRIDGE</h4>
<p><i>2つの橋</i>で章と章を結ぶ。会社情報・ストア。</p>
</div>
<div>
<h4>γ · SATELLITE</h4>
<p><i>4つの衛星</i>で末端ページを構成。サポート系。</p>
</div>
<div>
<h4>★ YOU ARE HERE</h4>
<p>金の脈動で<i>現在地(Polaris)</i>を示す。次の星を選んで降下せよ。</p>
</div>
</div>
<p class="colophon">PROJECT ASTRA · v.1 · UPDATED 2026.10.18 · <b>10 STARS · 4 ROUTES</b></p>
</div>
<noscript><style>.point, .point::after, .map-pulse { animation: none !important; }</style></noscript><script>
document.querySelectorAll('[data-demo-scroll]').forEach(region => {
region.addEventListener('focusin', event => {
const link = event.target.closest('a');
if (link) link.scrollIntoView({ block: 'nearest', inline: 'nearest', behavior: 'instant' });
});
const first = region.querySelector('.node');
if (first && region.scrollWidth > region.clientWidth) {
region.scrollLeft = Math.max(0, first.offsetLeft + first.offsetWidth / 2 - region.clientWidth / 2);
}
region.addEventListener('keydown', event => {
if (event.target !== region || !['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return;
event.preventDefault();
const step = Math.max(80, region.clientWidth * 0.75);
const left = event.key === 'Home' ? 0 : event.key === 'End' ? region.scrollWidth : region.scrollLeft + (event.key === 'ArrowRight' ? step : -step);
region.scrollTo({ left, behavior: 'instant' });
});
});
const toggle = document.querySelector('[data-motion-toggle]');
const preference = matchMedia('(prefers-reduced-motion: reduce)');
let paused = false;
const update = () => {
const stopped = paused || preference.matches;
document.body.dataset.paused = String(stopped);
toggle.disabled = preference.matches;
toggle.setAttribute('aria-pressed', String(stopped));
toggle.textContent = preference.matches ? '動きを減らす設定で停止中' : paused ? '動きを再開する' : '動きを止める';
};
toggle.hidden = false;
toggle.addEventListener('click', () => { paused = !paused; update(); });
preference.addEventListener('change', update);
update();
</script>
<aside class="demo-note" aria-labelledby="demo-title"><h2 id="demo-title">リンク先の説明(表示見本)</h2><p>架空のサイトの案内例です。リンクはこのページ内の説明へ移動し、外部への移動・送信・登録は行いません。配布HTMLはCC0・利用料¥0です。</p><p id="demo-home" tabindex="-1"><strong>Vega — ホーム</strong> — サイト全体の入口を示す星です。架空のサイト案内であり、外部のページへは移動しません。</p><p id="demo-blog" tabindex="-1"><strong>Altair — ブログ</strong> — 記事の一覧や読みものの入口です。記事配信は実装していません。</p><p id="demo-work" tabindex="-1"><strong>Deneb — 制作実績</strong> — 制作実績や作品一覧へつなぐ構成例です。掲載実績は架空の設定です。</p><p id="demo-current" tabindex="-1"><strong>Polaris — 現在地</strong> — 現在地を示す星です。この見本ではページ内の説明へ移動します。</p><p id="demo-about" tabindex="-1"><strong>Rigel — このサイトについて</strong> — 運営や活動内容をまとめる入口です。組織名や活動は架空の設定です。</p><p id="demo-store" tabindex="-1"><strong>Sirius — ストア</strong> — 商品の案内へつなぐ星です。注文・決済・発送は行いません。</p><p id="demo-faq" tabindex="-1"><strong>Capella — よくある質問</strong> — 疑問への回答をまとめる入口の例です。</p><p id="demo-news" tabindex="-1"><strong>Procyon — お知らせ</strong> — 更新のお知らせを案内する入口です。メール配信は行いません。</p><p id="demo-press" tabindex="-1"><strong>Antares — プレス</strong> — 取材や広報の資料へつなぐ構成例です。実際の発表資料は含みません。</p><p id="demo-contact" tabindex="-1"><strong>Spica — お問い合わせ</strong> — お問い合わせの入口です。連絡先や送信機能は含みません。</p></aside>
</body>
</html>
2026年10月14日、Chromiumで320・390・768・1280pxの描画とキーボードのフォーカス表示を確認しました。他のブラウザは未確認です。利用先のブラウザと実データでも確認してください。
概要
人類は何千年ものあいだ、夜空のばらばらの光点を線で結び、星座という物語を与えてきました。星座は天文学的な実在ではなく、人間が記憶しやすいように作った「意味の地図」です。サイトナビゲーションを星座図として描くのは、この「無秩序な点を、覚えやすい形に結ぶ」という人類最古の情報デザインを借用する試みです。
効率の地図と、詩情の地図
サイト構造を可視化するナビゲーションには、二つの方向性があります。ひとつは路線図のような、インフラ的で効率を重視するアプローチ。もうひとつが、この星座図——神秘性と情緒を重視するアプローチです。同じ「全体を俯瞰させる地図」でも、訪問者に与える感情はまったく違う。星座図ナビは、ページへの遷移を「機能の選択」ではなく「星を選ぶ」という詩的な行為に変えます。
崩れる形路線図として描く
インフラ的で効率に寄った地図です。目的地までの最短経路は分かりますが、回遊そのものに動機が生まれません。用が済めば人は離れます。
効く形星座図として描く
ページを恒星に、カテゴリを星座に見立てると、回遊が小さな天体観測になります。神秘や物語性が価値になる文脈でだけ、この転換は効きます。
神秘性が「特別な体験」の枠を作る
夜空という舞台装置には、それだけで「特別なものを見ている」という感覚を喚起する力があります。脈動する北極星で現在地を示し、ページを恒星に、カテゴリを星座に見立てると、サイトの回遊そのものが小さな天体観測になる。高級ブランド、文学・詩のプラットフォーム、天文・科学メディアのように「神秘」や「物語性」が価値になる文脈で、この様式は強く効きます。
仕上げの判断軸
星の配置は完全な無秩序でも、機械的な格子でもなく、「星座らしい疎密のリズム」を狙うこと。重要なページを明るい一等星に、補助的なページを淡い星に。光の強弱がそのまま階層になります。線(星座線)は引きすぎず、本当に意味のある繋がりだけを結ぶ。
神秘性を優先する様式です。緊急性や効率が最優先のサイト、たとえばECの購入フローには使わないでください。
ナビゲーションの構成要素
aria-current を併記します。使いどころ
- 高級ブランド・ジュエリー・天文機材ブランド
- サイエンスメディア・天文台・プラネタリウム
- ポエトリー・文学系プラットフォーム
- 深い構造を持つコンテンツサイトの全体マップ
- 大規模なポートフォリオ・実績集の章立て可視化
このデザインの分類
背景と狙いどころ
よくある質問
ノードを絶対配置するとレスポンシブ対応が大変ですが、どう組めばいいですか。
星座線は SVG 一本で描く?
詩的すぎてビジネス用途に向かないのでは?
この画面を実装する
動くサンプルとコピペできるコードを、技術別にまとめています。
関連するデザイン
東京メトロ路線図風のサイトナビゲーション
東京メトロ・大江戸線などの路線図グラフィックを再構築したサイトナビゲーション。各カテゴリを「路線」、各ページを「駅」として見立て、駅ナンバリングや路線記号で迷わせない尖った設計。
すりガラス調の追従ナビゲーション
半透明のすりガラス越しに背景のパステルが透けて見える、カプセル型の追従ナビゲーション。スクロール時もコンテンツの世界観を壊さず、モダンなSaaSやプロダクトサイトの上部に向きます。
美術館展覧会ポスター風のヒーロー
国立美術館の特別展ポスターを再構築したヒーローセクション。明朝大型タイトル・赤の差し色・許可印・バーコードまで作り込み、「文化的権威」と「会期限定の希少性」を同時に演出する尖った設計。