縦書きレイアウト
writing-mode: vertical-rl で日本語を縦組みにし、和風の段組みを表現します。詩・俳句・和テイストのサイトに最適です。
ライブデモ
使用例(お題: カフェ MOON BREW)
この技法を「カフェ MOON BREW」というテーマのダミーサイトで実際に使った例です。
HTML
<div class="page">
<header class="nav">
<div class="brand"><span class="cup"></span>MOON BREW</div>
<span class="tag">珈琲と、しずかな時間</span>
</header>
<section class="hero">
<div class="vtext">
<h1 class="lead-v">
<span class="line big">月夜に深煎り</span>
<span class="line">湯気のむこうに<br>香りが立ちのぼる</span>
<span class="line sub">― 本日の一杯 ―</span>
</h1>
</div>
<div class="photo">
<img src="https://picsum.photos/240/300?random=21" alt="一杯のコーヒー">
<div class="caption">
<p class="name">満月のブレンド</p>
<p class="price">¥640</p>
<p class="desc">深いコクと、ほろ苦い余韻。</p>
</div>
</div>
</section>
</div>
CSS
/* MOON BREW:縦書き和風レイアウトが主役 */
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: "Hiragino Mincho ProN", "Yu Mincho", serif;
background:
radial-gradient(500px 300px at 15% 0%, #3a2817 0%, transparent 60%),
linear-gradient(165deg, #2b1d12 0%, #1d130a 100%);
color: #f5ede1;
min-height: 400px;
overflow: hidden;
}
.page { padding: 16px 26px; }
.nav { display: flex; align-items: center; justify-content: space-between; }
.brand { display: flex; align-items: center; gap: 9px; font-weight: 700; font-size: 16px; letter-spacing: 0.08em; }
.cup { width: 16px; height: 16px; border-radius: 50%; background: radial-gradient(circle at 35% 30%, #f3d9a8, #c98a3b); }
.tag { font-size: 12px; color: #c98a3b; letter-spacing: 0.1em; }
/* 縦書きエリアと写真を横並び */
.hero {
margin-top: 14px;
display: flex; align-items: flex-start; gap: 24px;
justify-content: center;
}
.vtext {
/* 縦書きの本体 */
writing-mode: vertical-rl;
text-orientation: upright;
height: 280px;
}
.lead-v { display: flex; gap: 22px; }
.line {
line-height: 1.9; letter-spacing: 0.14em;
border-right: 1px solid rgba(201,138,59,0.25);
padding-right: 4px;
}
.line.big { font-size: 30px; font-weight: 700; color: #f5ede1; }
.line { font-size: 16px; color: #e3d4bd; }
.line.sub { font-size: 13px; color: #c98a3b; letter-spacing: 0.2em; }
.photo {
position: relative;
border-radius: 12px; overflow: hidden;
box-shadow: 0 16px 36px rgba(0,0,0,0.5);
}
.photo img { display: block; width: 200px; height: 250px; object-fit: cover; }
.caption {
position: absolute; left: 0; right: 0; bottom: 0;
padding: 12px 14px;
background: linear-gradient(180deg, transparent, rgba(29,19,10,0.92));
}
.caption .name { font-size: 15px; font-weight: 700; }
.caption .price { font-size: 14px; color: #e0a04a; margin: 2px 0; }
.caption .desc { font-size: 11px; color: #cdb593; font-family: "Segoe UI", sans-serif; }
JavaScript
// 画像の読み込み失敗時に和色の無地へフォールバック
(function () {
const img = document.querySelector('.photo img');
if (!img) return; // null安全
img.addEventListener('error', () => {
img.style.background = 'linear-gradient(160deg, #5a3d22, #2b1d12)';
img.removeAttribute('src'); // 壊れアイコンを隠す
});
})();
コード
HTML
<main class="stage">
<article class="scroll">
<h1 class="v-title">月光の<br>夜想曲</h1>
<p class="v-body">
静かな水面に 月が ひとひら 落ちて、<br>
風はどこへ ともなく 言葉を運ぶ。
</p>
<p class="v-sign">― 縦書きの記憶</p>
</article>
<p class="hint">writing-mode: vertical-rl による縦組み</p>
</main>
CSS
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
min-height: 360px;
display: grid;
place-items: center;
/* 和紙のような淡い背景 */
background:
radial-gradient(1000px 600px at 50% 50%, #fbf6ec 0%, #f0e7d6 100%);
font-family: "Yu Mincho", "Hiragino Mincho ProN", "MS PMincho", serif;
color: #2b2620;
overflow: hidden;
padding: 20px;
}
.stage { text-align: center; }
/* 縦書きの巻物。右から左へ各段が並ぶ */
.scroll {
writing-mode: vertical-rl;
text-orientation: mixed;
height: 270px;
/* vertical-rlではブロック方向が右→左。flexの主軸をブロック方向(column)に
合わせることで、各段(タイトル/本文/署名)が右から左へ横に並ぶ。
row指定だと主軸がインライン方向=縦になり段が縦積みになって崩れる */
display: inline-flex;
flex-flow: column nowrap;
align-items: flex-start;
gap: 26px;
padding: 8px 4px;
margin-inline: auto;
}
.v-title {
font-size: clamp(26px, 6vw, 40px);
font-weight: 700;
letter-spacing: 0.25em;
line-height: 1.7;
/* 朱色のアクセント */
border-right: 3px solid #b23a48;
padding-right: 14px;
}
.v-body {
font-size: clamp(15px, 3.6vw, 19px);
line-height: 2;
letter-spacing: 0.12em;
color: #4a423a;
}
.v-sign {
font-size: 13px;
letter-spacing: 0.2em;
color: #9a8f7e;
align-self: flex-end;
}
.hint {
margin-top: 22px;
font-family: "Segoe UI", system-ui, sans-serif;
font-size: 12px;
letter-spacing: 0.18em;
color: #a89a83;
}
🤖 AIエージェント用プロンプト
このままコピーしてAIに貼り付け「追加する場所」だけ書き換えればOK
あなたは熟練のフロントエンドエンジニアです。私のWebサイトに「縦書きレイアウト」の効果を追加してください。
# 追加してほしい効果
縦書きレイアウト(タイポグラフィ)
writing-mode: vertical-rl で日本語を縦組みにし、和風の段組みを表現します。詩・俳句・和テイストのサイトに最適です。
# 追加する場所
👉【ここに対象箇所を記入:例「トップのヒーローセクション」「お問い合わせボタン」「記事カードの一覧」など】
# 参考実装(この見た目・挙動を再現してください)
【HTML】
<main class="stage">
<article class="scroll">
<h1 class="v-title">月光の<br>夜想曲</h1>
<p class="v-body">
静かな水面に 月が ひとひら 落ちて、<br>
風はどこへ ともなく 言葉を運ぶ。
</p>
<p class="v-sign">― 縦書きの記憶</p>
</article>
<p class="hint">writing-mode: vertical-rl による縦組み</p>
</main>
【CSS】
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
min-height: 360px;
display: grid;
place-items: center;
/* 和紙のような淡い背景 */
background:
radial-gradient(1000px 600px at 50% 50%, #fbf6ec 0%, #f0e7d6 100%);
font-family: "Yu Mincho", "Hiragino Mincho ProN", "MS PMincho", serif;
color: #2b2620;
overflow: hidden;
padding: 20px;
}
.stage { text-align: center; }
/* 縦書きの巻物。右から左へ各段が並ぶ */
.scroll {
writing-mode: vertical-rl;
text-orientation: mixed;
height: 270px;
/* vertical-rlではブロック方向が右→左。flexの主軸をブロック方向(column)に
合わせることで、各段(タイトル/本文/署名)が右から左へ横に並ぶ。
row指定だと主軸がインライン方向=縦になり段が縦積みになって崩れる */
display: inline-flex;
flex-flow: column nowrap;
align-items: flex-start;
gap: 26px;
padding: 8px 4px;
margin-inline: auto;
}
.v-title {
font-size: clamp(26px, 6vw, 40px);
font-weight: 700;
letter-spacing: 0.25em;
line-height: 1.7;
/* 朱色のアクセント */
border-right: 3px solid #b23a48;
padding-right: 14px;
}
.v-body {
font-size: clamp(15px, 3.6vw, 19px);
line-height: 2;
letter-spacing: 0.12em;
color: #4a423a;
}
.v-sign {
font-size: 13px;
letter-spacing: 0.2em;
color: #9a8f7e;
align-self: flex-end;
}
.hint {
margin-top: 22px;
font-family: "Segoe UI", system-ui, sans-serif;
font-size: 12px;
letter-spacing: 0.18em;
color: #a89a83;
}
# 外部ライブラリ
なし(追加ライブラリ不要)
# 守ってほしいこと
- 既存のHTML構造・レイアウト・デザインを壊さないこと。必要に応じてクラス名・色・サイズを私のサイトに合わせて調整してよい。
- クラス名やidが既存と衝突しないよう、必要なら接頭辞で名前空間を分けること。
- レスポンシブ対応と prefers-reduced-motion への配慮を入れること。
- 私のサイトのフレームワーク(React / Vue / 素のHTML など)に合わせて実装すること。不明な場合は素のHTML/CSS/JSで提示し、組み込み手順も説明すること。
- 変更後の確認手順も簡潔に教えてください。