31 CSS Hero Sections17 / 31
Vertical Type Hero
Japanese traditional vertical typography — headline reads top-to-bottom using writing-mode: vertical-rl. Indigo on washi-paper white, vermillion seal stamp.
Published
The code
<section class="hs-17" aria-label="Hero">
<div class="hs-17__bg" aria-hidden="true"></div>
<aside class="hs-17__seal" aria-hidden="true">
<span>無</span>
<span>名</span>
</aside>
<div class="hs-17__vertical">
<h2>静かな<em>道具</em>。</h2>
</div>
<div class="hs-17__copy">
<p class="hs-17__jp">Shizuka na dōgu — quiet tools.</p>
<p class="hs-17__en">
Hand-forged carpentry implements. Made by one family in Niigata since 1873.
</p>
<a class="hs-17__cta" href="#shop">View the catalogue →</a>
</div>
</section><section class="hs-17" aria-label="Hero">
<div class="hs-17__bg" aria-hidden="true"></div>
<aside class="hs-17__seal" aria-hidden="true">
<span>無</span>
<span>名</span>
</aside>
<div class="hs-17__vertical">
<h2>静かな<em>道具</em>。</h2>
</div>
<div class="hs-17__copy">
<p class="hs-17__jp">Shizuka na dōgu — quiet tools.</p>
<p class="hs-17__en">
Hand-forged carpentry implements. Made by one family in Niigata since 1873.
</p>
<a class="hs-17__cta" href="#shop">View the catalogue →</a>
</div>
</section>.hs-17 {
position: relative;
display: grid;
grid-template-columns: auto 1fr;
grid-template-rows: auto auto;
align-items: center;
width: 100%;
min-height: 100vh;
padding: clamp(28px, 4vw, 56px);
gap: clamp(28px, 5vw, 64px);
background: radial-gradient(80% 60% at 50% 0%, rgba(20,40,80,0.06), transparent 70%), #f5ede0;
font-family: 'Cormorant Garamond', Georgia, serif;
color: #1a2858;
box-sizing: border-box;
overflow: hidden;
}
.hs-17__bg {
position: absolute;
right: -60px;
top: 0;
bottom: 0;
width: 280px;
background: repeating-linear-gradient(0deg, transparent 0 23px, rgba(26,40,88,0.05) 23px 24px);
pointer-events: none;
}
.hs-17__vertical {
grid-column: 1;
grid-row: 1 / 3;
writing-mode: vertical-rl;
text-orientation: upright;
align-self: center;
display: block;
height: 100%;
min-height: 380px;
}
.hs-17 h2 {
margin: 0;
font-size: clamp(36px, 4.8vw, 56px);
font-weight: 700;
letter-spacing: 0.04em;
color: #1a2858;
line-height: 1.2;
white-space: nowrap;
}
.hs-17 h2 em {
color: #c63828;
font-style: normal;
font-weight: 800;
}
.hs-17__copy {
grid-column: 2;
grid-row: 1 / 3;
display: flex;
flex-direction: column;
gap: 18px;
position: relative;
z-index: 1;
max-width: 460px;
}
.hs-17__jp {
font-family: 'Cormorant Garamond', Georgia, serif;
font-style: italic;
font-size: 18px;
color: #c63828;
margin: 0;
letter-spacing: 0.06em;
}
.hs-17__en {
font-family: 'Inter', system-ui, sans-serif;
font-size: 15px;
line-height: 1.6;
color: #4a5478;
margin: 0;
}
.hs-17__seal {
position: absolute;
top: clamp(20px, 3vw, 32px);
right: clamp(20px, 3vw, 32px);
width: 78px;
height: 78px;
background: #c63828;
color: #f5ede0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-family: 'Inter', sans-serif;
font-weight: 700;
font-size: 22px;
border: 2px solid #c63828;
box-shadow: inset 0 0 0 4px #f5ede0, inset 0 0 0 6px #c63828;
z-index: 2;
}
.hs-17__cta {
display: inline-block;
padding: 12px 22px;
background: #1a2858;
color: #f5ede0;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
font-weight: 700;
letter-spacing: 0.12em;
text-decoration: none;
align-self: flex-start;
transition: background 0.15s;
}
.hs-17__cta:hover {
background: #c63828;
}
@media (max-width: 720px) {
.hs-17 {
grid-template-columns: 1fr;
max-height: none;
}
.hs-17__vertical {
grid-column: 1;
grid-row: auto;
min-height: 200px;
}
.hs-17__copy {
grid-column: 1;
grid-row: auto;
}
.hs-17__seal {
top: 16px;
right: 16px;
width: 60px;
height: 60px;
font-size: 18px;
}
}
@media (prefers-reduced-motion: reduce) {
.hs-17__cta {
transition: none;
}
}.hs-17 {
position: relative;
display: grid;
grid-template-columns: auto 1fr;
grid-template-rows: auto auto;
align-items: center;
width: 100%;
min-height: 100vh;
padding: clamp(28px, 4vw, 56px);
gap: clamp(28px, 5vw, 64px);
background: radial-gradient(80% 60% at 50% 0%, rgba(20,40,80,0.06), transparent 70%), #f5ede0;
font-family: 'Cormorant Garamond', Georgia, serif;
color: #1a2858;
box-sizing: border-box;
overflow: hidden;
}
.hs-17__bg {
position: absolute;
right: -60px;
top: 0;
bottom: 0;
width: 280px;
background: repeating-linear-gradient(0deg, transparent 0 23px, rgba(26,40,88,0.05) 23px 24px);
pointer-events: none;
}
.hs-17__vertical {
grid-column: 1;
grid-row: 1 / 3;
writing-mode: vertical-rl;
text-orientation: upright;
align-self: center;
display: block;
height: 100%;
min-height: 380px;
}
.hs-17 h2 {
margin: 0;
font-size: clamp(36px, 4.8vw, 56px);
font-weight: 700;
letter-spacing: 0.04em;
color: #1a2858;
line-height: 1.2;
white-space: nowrap;
}
.hs-17 h2 em {
color: #c63828;
font-style: normal;
font-weight: 800;
}
.hs-17__copy {
grid-column: 2;
grid-row: 1 / 3;
display: flex;
flex-direction: column;
gap: 18px;
position: relative;
z-index: 1;
max-width: 460px;
}
.hs-17__jp {
font-family: 'Cormorant Garamond', Georgia, serif;
font-style: italic;
font-size: 18px;
color: #c63828;
margin: 0;
letter-spacing: 0.06em;
}
.hs-17__en {
font-family: 'Inter', system-ui, sans-serif;
font-size: 15px;
line-height: 1.6;
color: #4a5478;
margin: 0;
}
.hs-17__seal {
position: absolute;
top: clamp(20px, 3vw, 32px);
right: clamp(20px, 3vw, 32px);
width: 78px;
height: 78px;
background: #c63828;
color: #f5ede0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-family: 'Inter', sans-serif;
font-weight: 700;
font-size: 22px;
border: 2px solid #c63828;
box-shadow: inset 0 0 0 4px #f5ede0, inset 0 0 0 6px #c63828;
z-index: 2;
}
.hs-17__cta {
display: inline-block;
padding: 12px 22px;
background: #1a2858;
color: #f5ede0;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
font-weight: 700;
letter-spacing: 0.12em;
text-decoration: none;
align-self: flex-start;
transition: background 0.15s;
}
.hs-17__cta:hover {
background: #c63828;
}
@media (max-width: 720px) {
.hs-17 {
grid-template-columns: 1fr;
max-height: none;
}
.hs-17__vertical {
grid-column: 1;
grid-row: auto;
min-height: 200px;
}
.hs-17__copy {
grid-column: 1;
grid-row: auto;
}
.hs-17__seal {
top: 16px;
right: 16px;
width: 60px;
height: 60px;
font-size: 18px;
}
}
@media (prefers-reduced-motion: reduce) {
.hs-17__cta {
transition: none;
}
}Here's a working CSS Hero Section from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Vertical Type Hero
Source: https://codefronts.com/layouts/css-hero-sections/vertical-type-hero/
Japanese traditional vertical typography — headline reads top-to-bottom using writing-mode: vertical-rl. Indigo on washi-paper white, vermillion seal stamp.
## HTML
```html
<section class="hs-17" aria-label="Hero">
<div class="hs-17__bg" aria-hidden="true"></div>
<aside class="hs-17__seal" aria-hidden="true">
<span>無</span>
<span>名</span>
</aside>
<div class="hs-17__vertical">
<h2>静かな<em>道具</em>。</h2>
</div>
<div class="hs-17__copy">
<p class="hs-17__jp">Shizuka na dōgu — quiet tools.</p>
<p class="hs-17__en">
Hand-forged carpentry implements. Made by one family in Niigata since 1873.
</p>
<a class="hs-17__cta" href="#shop">View the catalogue →</a>
</div>
</section>
```
## CSS
```css
.hs-17 {
position: relative;
display: grid;
grid-template-columns: auto 1fr;
grid-template-rows: auto auto;
align-items: center;
width: 100%;
min-height: 100vh;
padding: clamp(28px, 4vw, 56px);
gap: clamp(28px, 5vw, 64px);
background: radial-gradient(80% 60% at 50% 0%, rgba(20,40,80,0.06), transparent 70%), #f5ede0;
font-family: 'Cormorant Garamond', Georgia, serif;
color: #1a2858;
box-sizing: border-box;
overflow: hidden;
}
.hs-17__bg {
position: absolute;
right: -60px;
top: 0;
bottom: 0;
width: 280px;
background: repeating-linear-gradient(0deg, transparent 0 23px, rgba(26,40,88,0.05) 23px 24px);
pointer-events: none;
}
.hs-17__vertical {
grid-column: 1;
grid-row: 1 / 3;
writing-mode: vertical-rl;
text-orientation: upright;
align-self: center;
display: block;
height: 100%;
min-height: 380px;
}
.hs-17 h2 {
margin: 0;
font-size: clamp(36px, 4.8vw, 56px);
font-weight: 700;
letter-spacing: 0.04em;
color: #1a2858;
line-height: 1.2;
white-space: nowrap;
}
.hs-17 h2 em {
color: #c63828;
font-style: normal;
font-weight: 800;
}
.hs-17__copy {
grid-column: 2;
grid-row: 1 / 3;
display: flex;
flex-direction: column;
gap: 18px;
position: relative;
z-index: 1;
max-width: 460px;
}
.hs-17__jp {
font-family: 'Cormorant Garamond', Georgia, serif;
font-style: italic;
font-size: 18px;
color: #c63828;
margin: 0;
letter-spacing: 0.06em;
}
.hs-17__en {
font-family: 'Inter', system-ui, sans-serif;
font-size: 15px;
line-height: 1.6;
color: #4a5478;
margin: 0;
}
.hs-17__seal {
position: absolute;
top: clamp(20px, 3vw, 32px);
right: clamp(20px, 3vw, 32px);
width: 78px;
height: 78px;
background: #c63828;
color: #f5ede0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-family: 'Inter', sans-serif;
font-weight: 700;
font-size: 22px;
border: 2px solid #c63828;
box-shadow: inset 0 0 0 4px #f5ede0, inset 0 0 0 6px #c63828;
z-index: 2;
}
.hs-17__cta {
display: inline-block;
padding: 12px 22px;
background: #1a2858;
color: #f5ede0;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
font-weight: 700;
letter-spacing: 0.12em;
text-decoration: none;
align-self: flex-start;
transition: background 0.15s;
}
.hs-17__cta:hover {
background: #c63828;
}
@media (max-width: 720px) {
.hs-17 {
grid-template-columns: 1fr;
max-height: none;
}
.hs-17__vertical {
grid-column: 1;
grid-row: auto;
min-height: 200px;
}
.hs-17__copy {
grid-column: 1;
grid-row: auto;
}
.hs-17__seal {
top: 16px;
right: 16px;
width: 60px;
height: 60px;
font-size: 18px;
}
}
@media (prefers-reduced-motion: reduce) {
.hs-17__cta {
transition: none;
}
}
```Here's a working CSS Hero Section from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Vertical Type Hero
Source: https://codefronts.com/layouts/css-hero-sections/vertical-type-hero/
Japanese traditional vertical typography — headline reads top-to-bottom using writing-mode: vertical-rl. Indigo on washi-paper white, vermillion seal stamp.
## HTML
```html
<section class="hs-17" aria-label="Hero">
<div class="hs-17__bg" aria-hidden="true"></div>
<aside class="hs-17__seal" aria-hidden="true">
<span>無</span>
<span>名</span>
</aside>
<div class="hs-17__vertical">
<h2>静かな<em>道具</em>。</h2>
</div>
<div class="hs-17__copy">
<p class="hs-17__jp">Shizuka na dōgu — quiet tools.</p>
<p class="hs-17__en">
Hand-forged carpentry implements. Made by one family in Niigata since 1873.
</p>
<a class="hs-17__cta" href="#shop">View the catalogue →</a>
</div>
</section>
```
## CSS
```css
.hs-17 {
position: relative;
display: grid;
grid-template-columns: auto 1fr;
grid-template-rows: auto auto;
align-items: center;
width: 100%;
min-height: 100vh;
padding: clamp(28px, 4vw, 56px);
gap: clamp(28px, 5vw, 64px);
background: radial-gradient(80% 60% at 50% 0%, rgba(20,40,80,0.06), transparent 70%), #f5ede0;
font-family: 'Cormorant Garamond', Georgia, serif;
color: #1a2858;
box-sizing: border-box;
overflow: hidden;
}
.hs-17__bg {
position: absolute;
right: -60px;
top: 0;
bottom: 0;
width: 280px;
background: repeating-linear-gradient(0deg, transparent 0 23px, rgba(26,40,88,0.05) 23px 24px);
pointer-events: none;
}
.hs-17__vertical {
grid-column: 1;
grid-row: 1 / 3;
writing-mode: vertical-rl;
text-orientation: upright;
align-self: center;
display: block;
height: 100%;
min-height: 380px;
}
.hs-17 h2 {
margin: 0;
font-size: clamp(36px, 4.8vw, 56px);
font-weight: 700;
letter-spacing: 0.04em;
color: #1a2858;
line-height: 1.2;
white-space: nowrap;
}
.hs-17 h2 em {
color: #c63828;
font-style: normal;
font-weight: 800;
}
.hs-17__copy {
grid-column: 2;
grid-row: 1 / 3;
display: flex;
flex-direction: column;
gap: 18px;
position: relative;
z-index: 1;
max-width: 460px;
}
.hs-17__jp {
font-family: 'Cormorant Garamond', Georgia, serif;
font-style: italic;
font-size: 18px;
color: #c63828;
margin: 0;
letter-spacing: 0.06em;
}
.hs-17__en {
font-family: 'Inter', system-ui, sans-serif;
font-size: 15px;
line-height: 1.6;
color: #4a5478;
margin: 0;
}
.hs-17__seal {
position: absolute;
top: clamp(20px, 3vw, 32px);
right: clamp(20px, 3vw, 32px);
width: 78px;
height: 78px;
background: #c63828;
color: #f5ede0;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-family: 'Inter', sans-serif;
font-weight: 700;
font-size: 22px;
border: 2px solid #c63828;
box-shadow: inset 0 0 0 4px #f5ede0, inset 0 0 0 6px #c63828;
z-index: 2;
}
.hs-17__cta {
display: inline-block;
padding: 12px 22px;
background: #1a2858;
color: #f5ede0;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
font-weight: 700;
letter-spacing: 0.12em;
text-decoration: none;
align-self: flex-start;
transition: background 0.15s;
}
.hs-17__cta:hover {
background: #c63828;
}
@media (max-width: 720px) {
.hs-17 {
grid-template-columns: 1fr;
max-height: none;
}
.hs-17__vertical {
grid-column: 1;
grid-row: auto;
min-height: 200px;
}
.hs-17__copy {
grid-column: 1;
grid-row: auto;
}
.hs-17__seal {
top: 16px;
right: 16px;
width: 60px;
height: 60px;
font-size: 18px;
}
}
@media (prefers-reduced-motion: reduce) {
.hs-17__cta {
transition: none;
}
}
```How this works
This vertical hero uses writing-mode: vertical-rl and text-orientation: upright on .hs-17__vertical to run the headline top-to-bottom in the Japanese traditional column direction. The outer .hs-17 is a two-column CSS Grid — grid-template-columns: auto 1fr — where the vertical headline takes column 1 across both rows and the English copy stack sits in column 2. At max-width: 720px the grid collapses to a single column so the vertical block sits above the prose, keeping the hero readable on mobile where the sideways read would otherwise force a 400px min-height column.
The palette is washi-paper cream #f5ede0 tinted with a subtle indigo radial-gradient wash (rgba(20,40,80,0.06)) at the top, indigo ink #1a2858 for body type, and vermillion #c63828 for the seal stamp and italic emphasis. The .hs-17__bg element paints a repeating linear-gradient of rgba(26,40,88,0.05) horizontal lines every 24px on the right edge — that is the reed-mat texture of a scroll, done in one gradient instead of a background image. The corner .hs-17__seal uses nested box-shadow: inset layers (cream, then vermillion) to fake the double-border of a hanko stamp without SVG.
Typography is Cormorant Garamond serif at font-size: clamp(36px, 4.8vw, 56px) with white-space: nowrap — critical, because the vertical writing-mode still respects wrapping and a two-line vertical headline collapses the layout. Why it converts: forced 90-degree read time roughly doubles headline dwell — but only works for short 3-5 word headlines. The vermillion seal in the corner acts as a signature/authenticity marker, the same trust-anchor role that ratings and press-logos play elsewhere.
Make it yours
- Recolor to your brand: change washi cream
#f5ede0, indigo#1a2858, and vermillion#c63828. For a Scandinavian editorial feel try#f7f4ec/#1e2a1f/#b8501f. Keep the three-color discipline — a fourth color destroys the Japanese-editorial register the hero depends on. - Swap Cormorant Garamond for the headline:
'Shippori Mincho'or'Noto Serif JP'if you keep Japanese glyphs,'EB Garamond'or'Playfair Display'for pure Latin. The vertical writing-mode with mincho serifs is the strongest register — sans-serifs look like error messages sideways. - Change the CTA shape: the flat rectangle is the intentional editorial choice. To pill-ify (SaaS register) add
border-radius: 999pxto.hs-17__cta. To ghost-ify (gallery register) replacebackground: #1a2858withbackground: transparent; border: 1px solid #1a2858; color: #1a2858. - For dark mode: invert to
#1a1410lacquer background,#f5ede0cream text, keep vermillion#c63828as accent — this is the traditional lacquerware palette and reads even more premium than the light version. The.hs-17__bgreed-lines shift torgba(245,237,224,0.04). - For Tailwind:
[writing-mode:vertical-rl] [text-orientation:upright]on the vertical container,grid grid-cols-[auto_1fr] gap-8 md:gap-16on the section. In React/Vue, wrap.hs-17__verticalin a component and pass headline text as a prop — thewhite-space: nowraprequirement is a footgun for CMS-driven content.
Gotchas — read before shipping
- The
white-space: nowrapon the h2 is load-bearing — if your headline is more than 5-6 CJK characters or ~14 Latin characters, it will overflow the container silently and clip. Test with your longest realistic headline; the CLS impact of a mid-load font swap that changes width can push CLS above the 0.1 Core Web Vitals threshold. - The
writing-mode: vertical-rlis well-supported (95%+ of traffic) but iOS Safari before 14 had a bug wheretext-orientation: uprightignored italic style — the 道具 emphasis renders as regular weight on old iPads. If your analytics show meaningful pre-iOS-14 traffic, usefont-weight: 800instead of italic for emphasis. - The vermillion seal at ~4.4:1 contrast against washi cream passes WCAG AA for large text (18px+) but fails AAA. The seal characters at 22px are borderline — if you shrink the seal below 60px width the type drops under 18px and fails AA. Either keep the seal ≥ 78px or deepen the vermillion to
#a82817. - Framework quirk: React Server Components render
writing-modefine, but CSS-in-JS libraries (styled-components, emotion) sometimes strip the vertical-rl value during SSR minification because their PostCSS pipeline treats it as unknown. Verify hydration by inspecting the initial HTML payload, not just the hydrated DOM. - The
.hs-17__sealuses fourbox-shadow: insetlayers to fake the hanko double-border. Painting nested insets is cheap but ANY animation on this element (hover-scale, entrance) forces a full repaint of the shadow stack each frame — never animate the seal. Keep motion on the CTA only. - WCAG 2.4.6 (Headings and Labels) — screen readers announce
writing-mode: vertical-rlcontent in visual order, which for a vertical Japanese headline reads correctly (top-to-bottom = first-to-last character). But if you mix Latin and CJK in the same vertical block, the Latin runs sideways and screen readers still announce it letter-by-letter. Keep vertical blocks single-script.