Catalogue
Every element, with the caveat that comes with it
44 interface elements, each rendered live on its own page with the source and the one thing that breaks it.
- An analog clock wound by one line of JavaScript animation-delay: -43200s motion
- The logo that never hits the corner animation + cqw motion
- resize keeps writing after max-width stops it resize + max-width layout
- A gradient border that keeps its corners background + padding surface
- A spotlight that follows the cursor radial-gradient at var() hover
- A progress bar tied to scroll, with no JavaScript animation-timeline: scroll() motion
- A table header that stays put position: sticky table
- Cut a paragraph to three lines -webkit-line-clamp text
- A textarea that grows as you type field-sizing: content form
- An accordion with no JavaScript <details name> disclosure
- A focus ring for keyboards only :focus-visible a11y
- A wide table that keeps its first column position: sticky (inline) table
- Shadows that show there is more to scroll background-attachment: local scroll
- A segmented control with a sliding indicator :has() + translate control
- A skeleton that does not lie about the layout @keyframes + gradient loading
- A menu button that turns into a close button aria-expanded menu
- A switch that is still a checkbox appearance: none form
- A marquee that never jumps translateX(-50%) motion
- Frosted glass over anything backdrop-filter surface
- Type painted with a gradient background-clip: text type
- A range slider you can actually style ::-webkit-slider-thumb form
- A card that tips towards the cursor perspective + rotate hover
- A gradient angle that actually animates @property motion
- A card that reads its own container, not the window @container layout
- Type that scales with its container cqi layout
- Boxes that keep their proportions aspect-ratio layout
- A heading that breaks where a typesetter would text-wrap: balance type
- Paragraphs with no orphan last line text-wrap: pretty type
- Hyphenation in a narrow column hyphens: auto type
- An error state that waits its turn :user-invalid form
- Native controls in your palette accent-color form
- A label that floats out of the way :placeholder-shown form
- A carousel the browser drives scroll-snap-type scroll
- Scrolling that stops at the edge overscroll-behavior scroll
- Anchor links that clear a sticky header scroll-padding-top scroll
- A wrapper that knows its input is wrong :has() state
- Hovering one row quiets the others :has() + :not() hover
- A layout that changes when the list gets long :has(:nth-child()) layout
- A modal that traps focus for you showModal() dialog
- A popover with no JavaScript at all popovertarget dialog
- A section the page cannot reach inert a11y
- Animating something in from display: none @starting-style motion
- The exit animation, which is the hard half allow-discrete motion
- Reordering a list without it jumping startViewTransition() motion