Plus-Minus Accordion
A copy-paste accordions & tabs component in pure HTML & CSS. Zero dependencies, framework-agnostic, MIT-licensed.
Accordions & TabsHTMLCSSany framework
Copy into your project
HTML
<div class="nuda-accx-pm">
<div class="nuda-accx-pm__item nuda-accx-pm__item--open">
<button class="nuda-accx-pm__trigger" aria-expanded="true">
<span class="nuda-accx-pm__label">What is NudaUI?</span>
<span class="nuda-accx-pm__icon nuda-accx-pm__icon--minus">−</span>
</button>
<div class="nuda-accx-pm__body">
<p class="nuda-accx-pm__text">A copy-paste UI library built for dark interfaces with zero dependencies.</p>
</div>
</div>
<div class="nuda-accx-pm__item">
<button class="nuda-accx-pm__trigger" aria-expanded="false">
<span class="nuda-accx-pm__label">Is it free to use?</span>
<span class="nuda-accx-pm__icon">+</span>
</button>
</div>
<div class="nuda-accx-pm__item">
<button class="nuda-accx-pm__trigger" aria-expanded="false">
<span class="nuda-accx-pm__label">How do I install it?</span>
<span class="nuda-accx-pm__icon">+</span>
</button>
</div>
</div>CSS
.nuda-accx-pm {
display: flex;
flex-direction: column;
width: 100%;
gap: 2px;
}
.nuda-accx-pm__item {
background: #141414;
border: 1px solid rgba(255,255,255,.08);
border-radius: 10px;
overflow: hidden;
}
.nuda-accx-pm__item--open {
border-color: rgba(228,255,84,.25);
}
.nuda-accx-pm__trigger {
display: flex;
justify-content: space-between;
align-items: center;
width: 100%;
background: none;
border: none;
padding: .55rem .7rem;
cursor: pointer;
gap: .5rem;
}
.nuda-accx-pm__label {
color: #fafafa;
font-size: .68rem;
font-weight: 600;
text-align: left;
}
.nuda-accx-pm__icon {
color: #777;
font-size: .9rem;
flex-shrink: 0;
line-height: 1;
transition: color .2s;
}
.nuda-accx-pm__icon--minus {
color: #e4ff54;
}
.nuda-accx-pm__body {
padding: 0 .7rem .55rem;
animation: _nuda-accxpm-open .25s ease-out;
}
.nuda-accx-pm__text {
color: #888;
font-size: .6rem;
margin: 0;
line-height: 1.55;
}
@keyframes _nuda-accxpm-open {
from {
opacity: 0;
transform: translateY(-4px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
@media (prefers-reduced-motion:reduce) {
.nuda-accx-pm__body {
animation: none;
}
}
How to use Plus-Minus Accordion
Paste the HTML where you need it and the CSS into a global stylesheet (or a <style> tag). Every class is prefixed nuda- so it never collides with Tailwind or your own styles. Tweak the CSS custom properties to match your design system.
Works in React, Vue, Svelte, Astro, Next.js, Nuxt, Laravel Blade, Django, Rails — or a single .html file. No npm install, no build step.