20 Tailwind Retro UI
20 Tailwind retro UI templates that rebuild the look of old hardware and software from scratch — CRT scanlines and phosphor tubes, pixel-art and dithered sprites, bevelled 16-bit chrome and System 7 windows, DOS and teletext cell grids, a full Windows 95 desktop, plus vaporwave, arcade, Y2K aqua and neo-brutalist boards. Scoped under .twr-NN for no-collision pasting, prefers-reduced-motion guarded, framework-agnostic.
Related20 CSS Retro UI20 CSS Minimalist UI20 CSS 3D Effects14 Material Design CSS Components20 Tailwind CSS Minimalist UI
Premium upgradePartner: Untitled UI
Affiliate linkBuilding a whole Tailwind app, not just this component?
You just browsed 20 Tailwind retro ui. Untitled UI Pro unlocks 5,000+ components and sections and 250+ page examples for React, styled with Tailwind CSS v4. One licence is a one-time $349 with lifetime updates; teams start at $999.
Untitled UI React. We may earn a commission, at no extra cost to you.
02. Tailwind Pixel Art Scaling with Image Rendering (opens in a new tab)
03. Tailwind Dithering Patterns with Gradients (opens in a new tab)
repeating-conic-gradient checkerboards over flat palette fills — and because every pattern is an arbitrary background utility, each band's coverage is legible in the markup instead of hidden behind a modifier class.04. Tailwind One Bit Bevel Borders with Box Shadow (opens in a new tab)
box-shadow insets in a fixed order — outer light, outer dark, inner light, inner dark — with the order reversed for the pressed state. This is the demo where a four-layer shadow is too long to keep repeating in a class list, so it becomes a real named utility with @utility, and active:twr04-sunken gets the pressed state for free.05. Tailwind Classic Mac System 7 Window Chrome (opens in a new tab)
06. Tailwind MS DOS Text Mode Interface Grid (opens in a new tab)
07. Tailwind Teletext and Ceefax Block Graphics (opens in a new tab)
08. Tailwind Amber and Green Phosphor Monitor (opens in a new tab)
data- attribute and a data-* variant does the styling, which is the pattern to reach for whenever JS and utilities meet.09. Tailwind Windows 95 Desktop Interface (opens in a new tab)
@utility, and the Start menu drops its :has() rule entirely — a peer-checked: variant does the same job from the markup, which is the port's cleanest simplification.10. Tailwind Retro Futuristic Terminal Interface (opens in a new tab)
[animation-delay:...].11. Tailwind Eight Bit Pixel Art Buttons and HUD (opens in a new tab)
box-shadow blocks: segmented health, score with tabular figures, a lives row, and buttons whose notched corners are shadow offsets rather than a border image. The palette is a fixed eight-colour NES subset, and the port makes the discipline enforceable — every colour in the markup is a palette utility, so a ninth colour would have to be typed as a raw hex and would stand out in review.12. Tailwind Neo Brutalist Component Board (opens in a new tab)
13. Tailwind Skeuomorphic Cassette Player (opens in a new tab)
14. Tailwind Vaporwave Aesthetic Scene (opens in a new tab)
15. Tailwind Retro Arcade Game Interface (opens in a new tab)
group-data-[attract=...] state machine, with the script owning nothing but the attribute.16. Tailwind ASCII Art Terminal Interface (opens in a new tab)
aria-hidden with a real text alternative, because ASCII art read aloud is several hundred punctuation marks and no information.17. Tailwind Nineties Web Guestbook Widget (opens in a new tab)
18. Tailwind Y2K Aqua Gloss Interface Kit (opens in a new tab)
before:/after: pair on the button itself, which is the clearest the technique has ever looked.19. Tailwind Vintage Storefront Layout (opens in a new tab)
20. Tailwind Retro Desktop Portfolio Template (opens in a new tab)
data- attributes, never a style rule or a class.Frequently asked questions
How do you scale pixel art in Tailwind without it turning blurry?
image-rendering: pixelated on the scaled sprite, applied in Tailwind via an arbitrary property like [image-rendering:pixelated]. The browser default is bilinear smoothing, which turns a 12×12 sprite blown up to 8× into a blurry smear; pixelated tells it to use nearest-neighbour so every source pixel becomes a crisp block. Two common bugs: first, the effect only looks right at integer scale factors — a 3.5× scale leaves uneven pixel widths, so pin the container to whole multiples of the source size. Second, a few browsers honour crisp-edges instead, so ship both values. Keep the intrinsic sprite small and let CSS do the upscale; upscaling a large image defeats the point. A background sprite needs the same rule on the element carrying background-image, not on a child.How do you build CRT scanlines and screen curvature with pure CSS?
repeating-linear-gradient laid over the content: alternate a transparent stripe with a faint black stripe every two pixels, e.g. repeating-linear-gradient(to bottom, transparent 0 1px, rgba(0,0,0,.35) 1px 2px), on an overlay element with pointer-events: none so it never blocks clicks. Curvature is faked with a large border-radius plus an inset box-shadow that darkens the corners like a real tube. Phosphor bloom is a soft text-shadow in the phosphor colour, and mains flicker is a low-opacity animation on the overlay. The overlay must sit absolute inset-0 above the screen layer with a higher z-index, and keep the stripe at 1–2px — wider stripes read as window blinds, not scanlines. Combine all four layers rather than one; a single effect on its own looks flat and unconvincing.How do you make the raised and pressed bevel borders from 16-bit desktop UIs?
box-shadow insets: a light shadow on the top-left edges and a dark shadow on the bottom-right, e.g. inset 1px 1px 0 #fff, inset -1px -1px 0 #808080, inset 2px 2px 0 #dfdfdf, inset -2px -2px 0 #000. To make a button look pressed, swap the light and dark sets so the highlight moves to the bottom-right. In Tailwind write it as one arbitrary [box-shadow:...] value and set border: none, because the bevel replaces the border entirely. The usual bug is anti-aliasing softening the 1px edges — keep every offset at whole pixels and avoid sub-pixel transform on the element. Do not combine a real border with the shadows; the two edges fight each other and the crisp two-tone look is lost.Which retro effects need prefers-reduced-motion, and how do these demos handle accessibility?
@media (prefers-reduced-motion: reduce) with animation: none, so a user who opts out gets the static frame. The flicker is the important one: a rapidly pulsing opacity can trigger discomfort, so it stays subtle and is removed entirely under reduced motion. For the desktop demos, the draggable windows are pointer-operated, so keyboard and screen-reader users need the window content to stay reachable in normal document order — the drag is an enhancement, not the only way in. Icon-only controls such as transport keys and window buttons carry aria-label, and the decorative scanline and bezel layers use aria-hidden so assistive tech skips them.How do you create dithering patterns with CSS gradients?
repeating-linear-gradient, or a small tile repeated as a background: a checkerboard is two repeating-linear-gradients at 45 and -45 degrees, and a Bayer-style pattern is several offset gradients stacked. Set background-size to the cell size — 2px or 4px reads as fine dithering, larger reads as a visible pattern. The classic bug is smoothing: gradients interpolate by default, so use hard colour stops like #000 0 2px, #fff 2px 4px with no soft transition, otherwise you get a blur instead of two flat colours. Blend by layering two flat gradient tiles, rather than reaching for a real smooth gradient, which defeats the limited-palette illusion entirely.How do you make the desktop windows draggable in the portfolio and Windows 95 demos?
pointerdown over the title bar you record the pointer position and the window's current offset, call setPointerCapture so the drag survives the cursor leaving the element, then on pointermove apply the delta with transform: translate(...). Using transform is smoother than writing left and top because it stays on the compositor. Release on pointerup. Two bugs to avoid: text selection during the drag — set user-select: none on the title bar while a drag is active — and accidentally starting a drag from the system buttons, so exclude events that originate on the close or resize controls. Raise the focused window with a higher z-index on pointerdown so it stacks above its siblings, the way a real desktop does.When should you not use a retro UI style?
Can these retro effects be done with Tailwind utility classes, or do they need custom CSS?
[box-shadow:...] value, scanlines are an [background:repeating-linear-gradient(...)], pixel scaling is [image-rendering:pixelated], and the phosphor glow is [text-shadow:...]. Keyframes are the exception: @keyframes cannot live inside a class, so the flicker, boot-typing and reel-spin animations are defined once in a small @layer or a plain style block and then referenced with animate-[name]. Fonts matter too — the terminal and DOS demos need a real monospace face loaded, and the pixel demos want a bitmap-style font; Tailwind only sets the family, it does not ship the font itself. Everything else — layout, spacing, colour and plain borders — is ordinary utility classes.Related collections
20 CSS 3D Effects
20 hand-coded CSS 3D patterns covering the transform pipeline reference build, the perspective property versus the perspective function, perspective-origin as the camera position, why transform function order changes the result, backface-visibility on two sided elements, what silently flattens preserve-3d, building a cube from six faces, transform-origin in three dimensions, translateZ versus scale for depth, z-fighting on coplanar surfaces, rotate3d and the transform matrix, plus ring layouts, stacked z-planes, pointer tilt with parallax, a hinged page-turn flipbook, a drag-rotate cube navigator, an extruded synth panel, perspective floor geometry, nested 3D contexts, and helix distribution. 14 demos are pure CSS; 6 use vanilla JavaScript.
22 CSS Brutalism
22 hand-coded brutalist and neubrutalist CSS designs covering the full spectrum of the aesthetic — from the anti-design brutalism of 2014-2018 (raw system fonts, zero border radius, monochrome density, visible structure) through to the neubrutalism of 2021-present (bright pastel fills, thick black borders, hard offset shadows with zero blur, rounded blocks). The neubrutalist half ships SaaS pricing cards with sticker badges, a pastel admin dashboard, signup forms, rotated feature cards, an offset-shadow navbar, a playful button set, a native dialog modal, a testimonial wall, blog cards, chunky toggles, a landing hero, an image gallery, stats panels and a rounded footer. The brutalist half covers product grids, raw form controls, a monochrome data dashboard, a portfolio index, indie SaaS pricing, Windows 95 desktop chrome, editorial long-read and a streetwear catalog. Every design is scoped under a .brt-NN prefix for no-collision pasting, guards prefers-reduced-motion, and ports unchanged to React, Vue, Svelte, Astro, Next.js and Tailwind.
20 CSS Claymorphism
20 hand-coded CSS claymorphism designs covering the three-layer shadow recipe that defines the style, inner highlight and inner shadow layering, the border radius scale that makes shapes read as puffy rather than merely rounded, claymorphism compared side by side with neumorphism, a clay and glassmorphism hybrid, single light-source discipline across a layout, depth tiers for visual hierarchy, a Tailwind implementation with both arbitrary values and theme tokens, squishy button press states, toggles and checkboxes, inset input wells and search bars, badge and pill systems, cards, popover-based modals, pricing tables, mobile tab bars, app icon grids, toast and alert bubbles, dark mode shadow recalibration, and the paint cost of animating shadows. 19 demos are pure CSS; 1 uses vanilla JavaScript.

















