Glitch Button
A copy-paste buttons component in pure HTML & CSS. Zero dependencies, framework-agnostic, MIT-licensed.
ButtonsHTMLCSSany framework
Copy into your project
HTML
<button class="nuda-glitchbtn" data-text="EXECUTE">
EXECUTE
</button>CSS
.nuda-glitchbtn {
position: relative;
padding: 10px 22px;
background: #0c0c10;
color: #e4ff54;
border: 1px solid #e4ff54;
border-radius: 6px;
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
font-weight: 700;
letter-spacing: 0.08em;
text-transform: uppercase;
cursor: pointer;
}
.nuda-glitchbtn::before,
.nuda-glitchbtn::after {
content: attr(data-text);
position: absolute;
inset: 0;
display: flex;
align-items: center;
justify-content: center;
mix-blend-mode: screen;
opacity: 0;
pointer-events: none;
}
.nuda-glitchbtn::before {
color: #ff5e7a;
clip-path: polygon(0 0, 100% 0, 100% 45%, 0 45%);
}
.nuda-glitchbtn::after {
color: #62b6ff;
clip-path: polygon(0 55%, 100% 55%, 100% 100%, 0 100%);
}
.nuda-glitchbtn:hover::before {
opacity: 1;
animation: nuda-glitch-pos 0.4s steps(2) infinite;
}
.nuda-glitchbtn:hover::after {
opacity: 1;
animation: nuda-glitch-neg 0.4s steps(2) infinite;
}
@keyframes nuda-glitch-pos {
0% { transform: translate(0); }
25% { transform: translate(-2px, 1px); }
75% { transform: translate(2px, -1px); }
100% { transform: translate(0); }
}
@keyframes nuda-glitch-neg {
0% { transform: translate(0); }
25% { transform: translate(2px, -1px); }
75% { transform: translate(-2px, 1px); }
100% { transform: translate(0); }
}How to use Glitch Button
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.