13 / 25
All 25 in 25 Tailwind CSS Blockquotes
- 01Tailwind Blockquote with Large Decorative Quotation Marks
- 02Tailwind CSS Blockquote Testimonial Component
- 03Tailwind Callout Box / Admonition Blockquote
- 04Responsive Tailwind Center-Aligned Quote Banner
- 05Modern Minimalist Left Border Tailwind Blockquote
- 06Animated Tailwind Gradient Border Blockquote
- 07Classic Left Border Tailwind Blockquote Snippet
- 08Brutalist Tailwind Blockquote Design
- 09Glassmorphism Tailwind Blockquote Card
- 10Glowing Neon Border Tailwind Quote Box
- 11Article Pull Quote Tailwind Design with Wrap Text
- 12Speech Bubble Tailwind Blockquote
- 13Thick Vertical Accent Rail Tailwind Blockquote
- 14Customer Testimonial Blockquote Card in Tailwind CSS
- 15Inline Highlighted Text Tailwind Blockquote
- 16Marker Highlight Underline Tailwind Blockquote
- 17Floating Tailwind Blockquote with Drop Shadow
- 18Aurora Gradient Background Tailwind Blockquote
- 19Twitter / X Post Card Style Tailwind Blockquote
- 20Multi-Column Newspaper Editorial Blockquote in Tailwind
- 21IDE Code Comment Style Blockquote in Tailwind
- 22Markdown Compatible HTML Blockquote in Tailwind
- 23JavaScript Testimonial Quote Slider with Tailwind CSS
- 24Expandable Read More Tailwind Blockquote
- 25Tailwind Blockquote with One-Click Copy Button
Thick Vertical Accent Rail Tailwind Blockquote
A 14px gradient rail in its own grid column, carrying vertical label text ([writing-mode:vertical-rl] rotate-180), beside a large quote with a gradient-clipped author name. The port makes the rail draw in on load with starting:scale-y-0 and fixes the rail label, which was near-invisible dark text on the orange-to-magenta gradient.
Untitled UI Pro: 5,000+ React + Tailwind CSS v4 components · from $349 one-time
Untitled UI React · Affiliate link
The code
<section class="tbq-13 w-full min-h-svh grid place-items-center bg-linear-200 from-tbq13-top to-tbq13-bg to-60% px-5 py-14 font-tbq13-sans text-tbq13-ink" aria-label="Thick vertical accent rail blockquote demo">
<div class="grid w-full justify-items-center gap-9">
<figure class="grid w-full max-w-[620px] grid-cols-[14px_1fr] gap-6.5">
<div aria-hidden="true" class="grid origin-top place-items-end justify-center bg-linear-to-b from-tbq13-a via-tbq13-b via-55% to-tbq13-c py-3.5 transition-transform duration-700 ease-[cubic-bezier(0.2,0.7,0.2,1)] starting:scale-y-0 motion-reduce:transition-none"><span class="rotate-180 font-tbq13-mono text-[10px] font-bold tracking-[0.22em] whitespace-nowrap text-tbq13-railink [writing-mode:vertical-rl]">FIELD NOTES — VOL 7</span></div>
<div class="transition-opacity delay-300 duration-700 starting:opacity-0 motion-reduce:transition-none">
<blockquote>
<p class="text-[clamp(21px,2.9vw,30px)] leading-[1.38] font-semibold tracking-[-0.02em] text-pretty">We didn't set out to build infrastructure. We set out to answer one support ticket properly, and infrastructure is what answering it properly turned out to require.</p>
</blockquote>
<figcaption class="mt-5 text-sm text-tbq13-mut"><strong class="bg-linear-to-r from-tbq13-a to-tbq13-b bg-clip-text font-semibold text-transparent">Yusuf Adeyemi</strong> · Founding Engineer, Cachet</figcaption>
</div>
</figure>
<p aria-hidden="true" class="rounded-full border border-white/14 px-3.5 py-2 font-tbq13-mono text-[11.5px] text-tbq13-mut">grid-cols-[14px_1fr] · [writing-mode:vertical-rl] · starting:scale-y-0</p>
</div>
</section><section class="tbq-13 w-full min-h-svh grid place-items-center bg-linear-200 from-tbq13-top to-tbq13-bg to-60% px-5 py-14 font-tbq13-sans text-tbq13-ink" aria-label="Thick vertical accent rail blockquote demo">
<div class="grid w-full justify-items-center gap-9">
<figure class="grid w-full max-w-[620px] grid-cols-[14px_1fr] gap-6.5">
<div aria-hidden="true" class="grid origin-top place-items-end justify-center bg-linear-to-b from-tbq13-a via-tbq13-b via-55% to-tbq13-c py-3.5 transition-transform duration-700 ease-[cubic-bezier(0.2,0.7,0.2,1)] starting:scale-y-0 motion-reduce:transition-none"><span class="rotate-180 font-tbq13-mono text-[10px] font-bold tracking-[0.22em] whitespace-nowrap text-tbq13-railink [writing-mode:vertical-rl]">FIELD NOTES — VOL 7</span></div>
<div class="transition-opacity delay-300 duration-700 starting:opacity-0 motion-reduce:transition-none">
<blockquote>
<p class="text-[clamp(21px,2.9vw,30px)] leading-[1.38] font-semibold tracking-[-0.02em] text-pretty">We didn't set out to build infrastructure. We set out to answer one support ticket properly, and infrastructure is what answering it properly turned out to require.</p>
</blockquote>
<figcaption class="mt-5 text-sm text-tbq13-mut"><strong class="bg-linear-to-r from-tbq13-a to-tbq13-b bg-clip-text font-semibold text-transparent">Yusuf Adeyemi</strong> · Founding Engineer, Cachet</figcaption>
</div>
</figure>
<p aria-hidden="true" class="rounded-full border border-white/14 px-3.5 py-2 font-tbq13-mono text-[11.5px] text-tbq13-mut">grid-cols-[14px_1fr] · [writing-mode:vertical-rl] · starting:scale-y-0</p>
</div>
</section>@import "tailwindcss";
@theme {
--color-tbq13-bg: #12161d;
--color-tbq13-bg: oklch(0.2 0.015 260);
--color-tbq13-top: #1b1f29;
--color-tbq13-top: oklch(0.24 0.02 270);
--color-tbq13-ink: #eef2f7;
--color-tbq13-ink: oklch(0.96 0.008 250);
--color-tbq13-mut: #a9b2be;
--color-tbq13-mut: oklch(0.76 0.02 255);
--color-tbq13-a: #e7b643;
--color-tbq13-a: oklch(0.8 0.14 85);
--color-tbq13-b: #f35c49;
--color-tbq13-b: oklch(0.67 0.19 30);
--color-tbq13-c: #be47b8;
--color-tbq13-c: oklch(0.6 0.2 330);
--color-tbq13-railink: #050911;
--color-tbq13-railink: oklch(0.14 0.02 260);
--font-tbq13-sans: 'Geist', system-ui, sans-serif;
--font-tbq13-mono: 'Geist Mono', ui-monospace, monospace;
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tbq-13 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tbq13-bg: #12161d;
--color-tbq13-bg: oklch(0.2 0.015 260);
--color-tbq13-top: #1b1f29;
--color-tbq13-top: oklch(0.24 0.02 270);
--color-tbq13-ink: #eef2f7;
--color-tbq13-ink: oklch(0.96 0.008 250);
--color-tbq13-mut: #a9b2be;
--color-tbq13-mut: oklch(0.76 0.02 255);
--color-tbq13-a: #e7b643;
--color-tbq13-a: oklch(0.8 0.14 85);
--color-tbq13-b: #f35c49;
--color-tbq13-b: oklch(0.67 0.19 30);
--color-tbq13-c: #be47b8;
--color-tbq13-c: oklch(0.6 0.2 330);
--color-tbq13-railink: #050911;
--color-tbq13-railink: oklch(0.14 0.02 260);
--font-tbq13-sans: 'Geist', system-ui, sans-serif;
--font-tbq13-mono: 'Geist Mono', ui-monospace, monospace;
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tbq-13 {
width: 100%;
min-height: 100svh;
}Setup — do this once per project
Skip this if your project already runs Tailwind v4.
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>Compiles in the browser — perfect for a CodePen or a quick test, not for production.
npm install tailwindcss @tailwindcss/vite
npm install tailwindcss @tailwindcss/vite// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})// vite.config.js ("type": "module" in package.json)
import { defineConfig } from 'vite'
import tailwindcss from '@tailwindcss/vite'
export default defineConfig({
plugins: [tailwindcss()],
})Any v4 setup works — Vite, PostCSS or the CLI. Nothing in this demo is bundler-specific.
@import "tailwindcss";
@theme {
--color-tbq13-bg: #12161d;
--color-tbq13-bg: oklch(0.2 0.015 260);
--color-tbq13-top: #1b1f29;
--color-tbq13-top: oklch(0.24 0.02 270);
--color-tbq13-ink: #eef2f7;
--color-tbq13-ink: oklch(0.96 0.008 250);
--color-tbq13-mut: #a9b2be;
--color-tbq13-mut: oklch(0.76 0.02 255);
--color-tbq13-a: #e7b643;
--color-tbq13-a: oklch(0.8 0.14 85);
--color-tbq13-b: #f35c49;
--color-tbq13-b: oklch(0.67 0.19 30);
--color-tbq13-c: #be47b8;
--color-tbq13-c: oklch(0.6 0.2 330);
--color-tbq13-railink: #050911;
--color-tbq13-railink: oklch(0.14 0.02 260);
--font-tbq13-sans: 'Geist', system-ui, sans-serif;
--font-tbq13-mono: 'Geist Mono', ui-monospace, monospace;
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tbq-13 {
width: 100%;
min-height: 100svh;
}@import "tailwindcss";
@theme {
--color-tbq13-bg: #12161d;
--color-tbq13-bg: oklch(0.2 0.015 260);
--color-tbq13-top: #1b1f29;
--color-tbq13-top: oklch(0.24 0.02 270);
--color-tbq13-ink: #eef2f7;
--color-tbq13-ink: oklch(0.96 0.008 250);
--color-tbq13-mut: #a9b2be;
--color-tbq13-mut: oklch(0.76 0.02 255);
--color-tbq13-a: #e7b643;
--color-tbq13-a: oklch(0.8 0.14 85);
--color-tbq13-b: #f35c49;
--color-tbq13-b: oklch(0.67 0.19 30);
--color-tbq13-c: #be47b8;
--color-tbq13-c: oklch(0.6 0.2 330);
--color-tbq13-railink: #050911;
--color-tbq13-railink: oklch(0.14 0.02 260);
--font-tbq13-sans: 'Geist', system-ui, sans-serif;
--font-tbq13-mono: 'Geist Mono', ui-monospace, monospace;
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tbq-13 {
width: 100%;
min-height: 100svh;
}<link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Geist:wght@400..800&family=Geist+Mono:wght@400..600&display=swap">
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Geist:wght@400..800&family=Geist+Mono:wght@400..600&display=swap">What changed in the port
Which parts became utilities, which stayed CSS, and why.
writing-modehas no Tailwind utility and became[writing-mode:vertical-rl]; the original'srotate:180degis therotate-180utility.- The gradient name used four declarations (including
-webkit-text-fill-color) in CSS;bg-clip-text text-transparentcovers them. - UI upgrade from the CSS original: the rail label used 85%-alpha dark ink, which dropped below 3:1 where the rail turns magenta; it's now solid
oklch(0.14), above 4.5:1 along the whole gradient. - UI upgrade: the rail draws down on load (
starting:scale-y-0, 700ms) and the quote fades in after it, so the eye travels rail → quote → name. Muted copy raised0.66→0.76.
Here's a working CSS demo 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: Thick Vertical Accent Rail Tailwind Blockquote
Source: https://codefronts.com/snippets/tailwind-css-blockquotes/thick-vertical-accent-rail-tailwind-blockquote/
A 14px gradient rail in its own grid column, carrying vertical label text ([writing-mode:vertical-rl] rotate-180), beside a large quote with a gradient-clipped author name. The port makes the rail draw in on load with starting:scale-y-0 and fixes the rail label, which was near-invisible dark text on the orange-to-magenta gradient.
## HTML
```html
<section class="tbq-13 w-full min-h-svh grid place-items-center bg-linear-200 from-tbq13-top to-tbq13-bg to-60% px-5 py-14 font-tbq13-sans text-tbq13-ink" aria-label="Thick vertical accent rail blockquote demo">
<div class="grid w-full justify-items-center gap-9">
<figure class="grid w-full max-w-[620px] grid-cols-[14px_1fr] gap-6.5">
<div aria-hidden="true" class="grid origin-top place-items-end justify-center bg-linear-to-b from-tbq13-a via-tbq13-b via-55% to-tbq13-c py-3.5 transition-transform duration-700 ease-[cubic-bezier(0.2,0.7,0.2,1)] starting:scale-y-0 motion-reduce:transition-none"><span class="rotate-180 font-tbq13-mono text-[10px] font-bold tracking-[0.22em] whitespace-nowrap text-tbq13-railink [writing-mode:vertical-rl]">FIELD NOTES — VOL 7</span></div>
<div class="transition-opacity delay-300 duration-700 starting:opacity-0 motion-reduce:transition-none">
<blockquote>
<p class="text-[clamp(21px,2.9vw,30px)] leading-[1.38] font-semibold tracking-[-0.02em] text-pretty">We didn't set out to build infrastructure. We set out to answer one support ticket properly, and infrastructure is what answering it properly turned out to require.</p>
</blockquote>
<figcaption class="mt-5 text-sm text-tbq13-mut"><strong class="bg-linear-to-r from-tbq13-a to-tbq13-b bg-clip-text font-semibold text-transparent">Yusuf Adeyemi</strong> · Founding Engineer, Cachet</figcaption>
</div>
</figure>
<p aria-hidden="true" class="rounded-full border border-white/14 px-3.5 py-2 font-tbq13-mono text-[11.5px] text-tbq13-mut">grid-cols-[14px_1fr] · [writing-mode:vertical-rl] · starting:scale-y-0</p>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tbq13-bg: #12161d;
--color-tbq13-bg: oklch(0.2 0.015 260);
--color-tbq13-top: #1b1f29;
--color-tbq13-top: oklch(0.24 0.02 270);
--color-tbq13-ink: #eef2f7;
--color-tbq13-ink: oklch(0.96 0.008 250);
--color-tbq13-mut: #a9b2be;
--color-tbq13-mut: oklch(0.76 0.02 255);
--color-tbq13-a: #e7b643;
--color-tbq13-a: oklch(0.8 0.14 85);
--color-tbq13-b: #f35c49;
--color-tbq13-b: oklch(0.67 0.19 30);
--color-tbq13-c: #be47b8;
--color-tbq13-c: oklch(0.6 0.2 330);
--color-tbq13-railink: #050911;
--color-tbq13-railink: oklch(0.14 0.02 260);
--font-tbq13-sans: 'Geist', system-ui, sans-serif;
--font-tbq13-mono: 'Geist Mono', ui-monospace, monospace;
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tbq-13 {
width: 100%;
min-height: 100svh;
}
```Here's a working CSS demo 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: Thick Vertical Accent Rail Tailwind Blockquote
Source: https://codefronts.com/snippets/tailwind-css-blockquotes/thick-vertical-accent-rail-tailwind-blockquote/
A 14px gradient rail in its own grid column, carrying vertical label text ([writing-mode:vertical-rl] rotate-180), beside a large quote with a gradient-clipped author name. The port makes the rail draw in on load with starting:scale-y-0 and fixes the rail label, which was near-invisible dark text on the orange-to-magenta gradient.
## HTML
```html
<section class="tbq-13 w-full min-h-svh grid place-items-center bg-linear-200 from-tbq13-top to-tbq13-bg to-60% px-5 py-14 font-tbq13-sans text-tbq13-ink" aria-label="Thick vertical accent rail blockquote demo">
<div class="grid w-full justify-items-center gap-9">
<figure class="grid w-full max-w-[620px] grid-cols-[14px_1fr] gap-6.5">
<div aria-hidden="true" class="grid origin-top place-items-end justify-center bg-linear-to-b from-tbq13-a via-tbq13-b via-55% to-tbq13-c py-3.5 transition-transform duration-700 ease-[cubic-bezier(0.2,0.7,0.2,1)] starting:scale-y-0 motion-reduce:transition-none"><span class="rotate-180 font-tbq13-mono text-[10px] font-bold tracking-[0.22em] whitespace-nowrap text-tbq13-railink [writing-mode:vertical-rl]">FIELD NOTES — VOL 7</span></div>
<div class="transition-opacity delay-300 duration-700 starting:opacity-0 motion-reduce:transition-none">
<blockquote>
<p class="text-[clamp(21px,2.9vw,30px)] leading-[1.38] font-semibold tracking-[-0.02em] text-pretty">We didn't set out to build infrastructure. We set out to answer one support ticket properly, and infrastructure is what answering it properly turned out to require.</p>
</blockquote>
<figcaption class="mt-5 text-sm text-tbq13-mut"><strong class="bg-linear-to-r from-tbq13-a to-tbq13-b bg-clip-text font-semibold text-transparent">Yusuf Adeyemi</strong> · Founding Engineer, Cachet</figcaption>
</div>
</figure>
<p aria-hidden="true" class="rounded-full border border-white/14 px-3.5 py-2 font-tbq13-mono text-[11.5px] text-tbq13-mut">grid-cols-[14px_1fr] · [writing-mode:vertical-rl] · starting:scale-y-0</p>
</div>
</section>
```
## CSS
```css
@import "tailwindcss";
@theme {
--color-tbq13-bg: #12161d;
--color-tbq13-bg: oklch(0.2 0.015 260);
--color-tbq13-top: #1b1f29;
--color-tbq13-top: oklch(0.24 0.02 270);
--color-tbq13-ink: #eef2f7;
--color-tbq13-ink: oklch(0.96 0.008 250);
--color-tbq13-mut: #a9b2be;
--color-tbq13-mut: oklch(0.76 0.02 255);
--color-tbq13-a: #e7b643;
--color-tbq13-a: oklch(0.8 0.14 85);
--color-tbq13-b: #f35c49;
--color-tbq13-b: oklch(0.67 0.19 30);
--color-tbq13-c: #be47b8;
--color-tbq13-c: oklch(0.6 0.2 330);
--color-tbq13-railink: #050911;
--color-tbq13-railink: oklch(0.14 0.02 260);
--font-tbq13-sans: 'Geist', system-ui, sans-serif;
--font-tbq13-mono: 'Geist Mono', ui-monospace, monospace;
}
/* Root rule: the full-bleed contract, stated in CSS as well as in the markup's utilities, so the
stage is sized before the browser build compiles. */
.tbq-13 {
width: 100%;
min-height: 100svh;
}
```How this works
A rail, not a border. border-image can paint a gradient but can't hold text. A 14px grid track can:
<figure class="grid grid-cols-[14px_1fr] gap-6.5">
<div class="bg-linear-to-b from-tbq13-a via-tbq13-b to-tbq13-c
origin-top starting:scale-y-0 transition-transform duration-700">
<span class="rotate-180 [writing-mode:vertical-rl]">FIELD NOTES — VOL 7</span>Why rotate after vertical-rl? vertical-rl reads top-to-bottom; the 180° turn makes it read bottom-to-top like a book spine on a shelf.
Make it yours
- Thinner rail without the label:
grid-cols-[6px_1fr]and delete the span. - Horizontal variant: swap to
grid-rows-[6px_auto]andbg-linear-to-r. - Match the brand: change the three
--color-tbq13-a/b/cstops.
Gotchas — read before shipping
- The rail stretches to the quote's height only because grid items default to
align-self: stretch— don't additems-centerto the figure. - Long labels overflow a short quote; keep the text under ~24 characters or allow it to clip.
bg-clip-text text-transparenton the name needs a solid colour fallback in Windows High Contrast; addforced-colors:text-[CanvasText]if you support it.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 111+ | 16.4+ | 128+ | 111+ |
writing-mode is universal; the starting: draw-in is progressive (Chrome 117 / Safari 17.5 / Firefox 129).