/Click feedback
Click feedback • CSS
Expanding Newsletter Button
An orange newsletter pill with a growing dark circle and an arrow that slides in from the left.
Installation
Requires lucide-react for its icons. The shadcn CLI installs it for you; copying the code by hand means installing it yourself.
Terminal
npx shadcn@latest add https://microkit.co/r/expanding-newsletter-button.jsonCode
TypeScript component
1import "./styles.css";23import { ArrowRight } from "lucide-react";45export function ExpandingNewsletterButton() {6return (7<button type="button" className="expanding-newsletter-button">8<span className="expanding-newsletter-button__circle" aria-hidden="true">9<ArrowRight size={15} strokeWidth={2.5} />10</span>11<span className="expanding-newsletter-button__label">Newsletter</span>12</button>13);14}
CSS
1.expanding-newsletter-button,2.expanding-newsletter-button * {3box-sizing: border-box;4}5.expanding-newsletter-button {6appearance: none;7position: relative;8display: inline-flex;9width: min(145px, calc(100vw - 40px));10height: 42px;11align-items: center;12justify-content: center;13overflow: hidden;14border: 0;15border-radius: 999px;16background: #f97316;17padding: 0;18color: #fffaf6;19font-family: Arial, Helvetica, sans-serif;20cursor: pointer;21transition: background-color .3s ease, transform .2s ease;22}23.expanding-newsletter-button__circle {24position: absolute;25left: 9px;26top: 50%;27display: grid;28width: 24px;29height: 24px;30place-items: center;31overflow: hidden;32border-radius: 50%;33background: #141419;34color: #fffaf6;35transform: translateY(-50%);36transition: left .42s cubic-bezier(.16, 1, .3, 1), width .42s cubic-bezier(.16, 1, .3, 1), height .42s cubic-bezier(.16, 1, .3, 1);37}38.expanding-newsletter-button__circle svg {39transform: translateX(-26px);40transition: transform .42s cubic-bezier(.16, 1, .3, 1);41}42.expanding-newsletter-button__label {43white-space: nowrap;44font-size: 15px;45font-weight: 400;46letter-spacing: -.45px;47line-height: 1;48transform: translateX(8px);49}50.expanding-newsletter-button:hover,51.expanding-newsletter-button:focus-visible {52background: #fb7b21;53}54.expanding-newsletter-button:hover .expanding-newsletter-button__circle,55.expanding-newsletter-button:focus-visible .expanding-newsletter-button__circle {56left: 4px;57width: 34px;58height: 34px;59}60.expanding-newsletter-button:hover .expanding-newsletter-button__circle svg,61.expanding-newsletter-button:focus-visible .expanding-newsletter-button__circle svg {62transform: translateX(0);63}64.expanding-newsletter-button:active {65transform: scale(.98);66}67.expanding-newsletter-button:focus-visible {68outline: 2px solid #fffaf6;69outline-offset: 4px;70}71@media (prefers-reduced-motion: reduce) {72.expanding-newsletter-button,73.expanding-newsletter-button__circle,74.expanding-newsletter-button__circle svg {75transition: none;76}77}