You want stacked avatars, a peeking card pile, or a “+” that fans into actions — and you don’t want a JS component library or an FSCSS build step just for that.
overlapui.css is the plain-CSS build of overlapui: same behavior as the FSCSS module, shipped as a single stylesheet you can link from npm or jsDelivr and use with utility class names.
Works with any modern web setup: static HTML, React, Vue, Svelte, Next, Nuxt, Astro, WordPress themes — if you can load a CSS file, you can use it.
Install
npm
npm install overlapui
<link rel="stylesheet" href="node_modules/overlapui/overlapui.css">
CDN
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/overlapui@1.0.0/overlapui.min.css">
CSS import
@import url("https://cdn.jsdelivr.net/npm/overlapui@1.0.0/overlapui.min.css");
No FSCSS process required for this path.
Utility classes (drop-in)
| Class | Role |
|---|---|
.avatar-overlap |
Horizontal face stack (data-alph + optional img) |
.card-overlap |
Vertical notification / card stack |
.img-overlap |
Overlapping photo strip |
.circle-overlap |
Radial menu (--n = satellite count) |
Theme with --ou-* variables on :root or a parent — no preprocessor.
Minimal example
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>overlapui CSS-only</title>
<link rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/overlapui@1.0.0/overlapui.min.css">
<style>
:root {
--ou-center-bg: #6366f1;
--ou-ring: #0f172a;
}
body {
margin: 0;
min-height: 100vh;
display: grid;
place-items: center;
gap: 48px;
background: #0b1220;
}
</style>
</head>
<body>
<ul class="avatar-overlap" tabindex="0">
<li data-alph="g">G</li>
<li data-alph="h">H</li>
<li data-alph="i">I</li>
<li data-alph="j">J</li>
</ul>
<div class="circle-overlap" style="--n:5" tabindex="0">
<button type="button" aria-label="Menu">+</button>
<a href="#" aria-label="Home">H</a>
<a href="#" aria-label="Search">S</a>
<a href="#" aria-label="Chat">C</a>
<a href="#" aria-label="Groups">G</a>
<a href="#" aria-label="Profile">P</a>
</div>
</body>
</html>
Hover or focus a stack to open it. Interaction is CSS-only.
Frameworks
Same classes in JSX/Vue/Svelte markup:
<ul className="avatar-overlap" tabIndex={0}>
<li data-alph="a">Ada</li>
<li data-alph="b">Bo</li>
</ul>
Import once in the app shell (layout.css, global.css, or import 'overlapui/overlapui.css').
Lightweight by design
- Compiled from overlapui.fscss — one focused module, not a full design system
- No runtime JS for open/close
- Tokens (
--ou-size,--ou-overlap,--ou-center-bg, …) keep restyles local - Prefer the FSCSS source when you need custom selectors or a smaller selective compile; use
.csswhen you want drop-in speed
Links
-
npm:
overlapui - Repo: github.com/fscss-ttr/overlapui.fscss
Drop in the file. Use the classes. Ship the stack.
Top comments (0)