Components

The building blocks, grouped into eight sections. Pick a section, then a page. Everything is standard HTML with a small set of classes; no custom tags and no IDs. Most components need no JavaScript; the table below marks the few that do.

Every component

All 109 components by section, 25 of them built so far. Built on is the standard HTML each one uses. Classes lists what a component adds on top of that HTML; None means the elements alone are enough. JavaScript is None when HTML and CSS do the whole job, Optional when a script only adds to a component that already works without one, and Required when the component cannot work without a script. For components still to do, the Classes and JavaScript columns are the plan.

ComponentStatusBuilt onClassesJavaScript
Structure
PageBuiltbody header nav main footerNoneNone
SectionBuiltsection h1–h6NoneNone
LayoutBuiltdiv.row .stretch .grid .cols-3 .panel .flow + inline styleNone
Sidebar layoutBuiltaside beside the content.sidebarNone
Sticky headerBuiltheader, or anything with position: sticky.stickyNone
Resizable panesBuiltdiv with CSS resize.resizableOptional, for keyboard resizing
DividerBuilthr.dividerNone
Scroll areaBuiltrole="region" + aria-label + tabindex="0"NoneNone
3DBuiltdiv.scene .view .stage .node .panel .face .rotate .translate .scale .flip .reflection .side .front .back + inline styleNone
Navigation
Nav barBuiltnav ul details aria-current.pagingNone
BreadcrumbBuiltnav ol aria-currentNoneNone
PaginationBuiltnav of links with aria-current="page" and rel.pagingNone
TabsetBuiltinput type="radio" label.tabset .verticalOptional, to read the selection
MenuBuiltmenu button.toolbar .secondaryNone
Skip linkBuiltFirst a in the body, to main id="main", shown on :focusNoneNone
Table of contentsBuiltnav opening with a heading, ol of a to section idsNoneNone
Back to topBuilta href="#top" after main, faded in by a scroll timelineNoneNone
Heading anchorsBuilta to the section's id, holding the heading's textNoneNone
ScrollspyTo donav a to section anchorsNoneRequired
Content
ProseBuiltp ul ol dl img blockquote pre figureNoneNone
Inline textTo domark abbr sub sup del ins s q cite dfn var samp time dataNoneNone
Keyboard keysTo dokbd, and kbd kbd for combinationsNoneNone
Heading groupTo dohgroup with a p before or after the headingNoneNone
AddressTo doaddressNoneNone
Code blockBuiltfigure pre code samp figcaption.html .css .js + token spansNone
Copy to clipboardTo dobutton beside pre.copyRequired
MediaBuiltfigure with img picture video audio track svg iframeNoneNone
Video embedBuiltfigure with an iframe, or an a around a poster img.playOptional, to swap in the player
GalleryTo dofigure img + popover.galleryNone
FootnotesTo dosup a to an ol of notes.footnotesNone
Margin notesTo doaside role="note"NoneNone
Ruby annotationTo doruby rt rpNoneNone
Bidirectional textTo dobdi dirNoneNone
Text columnsTo doCSS columns.columnsNone
Link iconsTo doa[href^="mailto:"] and other link typesNoneNone
Editable textTo docontenteditableNoneOptional, to save the edit
Find-in-page revealTo dohidden="until-found"NoneNone
Container
CardBuiltarticle.card .stretch-link .grid .cols-3None
Titled cardTo dofieldset legend, or section h2.titledNone
AccordionBuiltdetails summary name.accordionNone
DisclosureTo doA single details summaryNoneNone
CalloutTo doaside.callout + .info .success .warning .errorNone
HeroTo doheader or section.heroNone
WellTo dodiv.wellNone
RibbonTo dospan in a card.ribbonNone
List groupTo doul or menu.listNone
Media objectTo doimg beside a div.mediaNone
CarouselTo doul with CSS scroll snap.carouselOptional, for previous and next buttons
WindowTo dosection or dialog with a title bar.windowOptional, to drag it
Overlay
DialogTo dodialog + button command="show-modal" commandforNoneNone
Confirm dialogTo dodialog role="alertdialog" + form method="dialog"NoneOptional, to read the answer
DrawerTo dodialog.drawerNone
PopoverTo dopopover popovertargetNoneNone
Dropdown menuTo dopopover menu buttonNoneOptional, for arrow keys
Context menuTo dopopover menu buttonNoneRequired
MenubarTo domenu popover button.menubarRequired
Hover cardTo dopopover="hint" interestforNoneOptional, where interestfor is missing
TooltipBuiltAny element + data-tip.tooltipNone
Command paletteTo dodialog input + a list of commands.paletteRequired
Data
TableBuilttable thead tbodyNoneNone
Sortable tableTo dotable + button in th, aria-sortNoneRequired
ChipBuiltspan a button.chip .accent .tealNone
BadgeTo dospan.badgeNone
AvatarTo doimg over initials.avatarNone
StatisticTo dodl data.statNone
Key-value listTo dodl dt dd.pairsNone
TimelineTo dool time.timelineNone
Tree viewTo doul details.treeOptional, for arrow keys
RatingTo dofieldset of radios, or meter to display.ratingNone
CalendarTo dotable time.calendarOptional, to build a month
ChartTo dotable or svg.chartOptional
SparklineTo dosvg.sparklineNone
Chat messagesTo dool of article.chatNone
Indicator lightTo dooutput or span.indicatorNone
Form
Form layoutBuiltform label input select textarea fieldsetNoneNone
ButtonBuiltbutton a input type="submit".button .buttons .secondary .ghost .small .largeNone
Button groupTo dorole="group" around buttonsNoneNone
Input groupTo dorole="group" around input and buttonNoneNone
Text inputTo doinput type="text" email url telNoneNone
Search fieldTo dosearch + input type="search"NoneNone
SelectTo doselect optgroup optionNoneNone
Checkbox and radioTo doinput type="checkbox" type="radio" in a labelNoneOptional, for the indeterminate state
SwitchTo doinput type="checkbox" role="switch"NoneNone
Toggle buttonTo dobutton aria-pressedNoneRequired, to flip the state
Segmented controlTo dofieldset of radios.segmentedNone
Range sliderTo doinput type="range" + datalist ticksNoneNone
Color pickerTo doinput type="color"NoneNone
Date and timeTo doinput type="date" time datetime-local month weekNoneNone
Number fieldTo doinput type="number"NoneNone
File uploadTo doinput type="file"NoneOptional, for drag and drop
One-time codeTo doinput autocomplete="one-time-code"NoneNone
TextareaTo dotextarea with field-sizing: contentNoneNone
PasswordTo doinput type="password"NoneRequired, to show the password
Help textTo dosmall linked by aria-describedbyNoneNone
ValidationTo dorequired pattern :user-invalid aria-invalidNoneOptional, for custom messages
Floating labelTo dolabel input placeholder.floatingNone
OutputTo dooutput forNoneRequired
ComboboxTo doinput + a role="listbox" list.comboboxRequired
KnobTo dorole="spinbutton".knobRequired
Feedback
StatusBuiltdiv role="status" or role="alert".status .success .error .info .warningNone
ProgressBuiltprogressNoneNone
MeterBuiltmeterNoneNone
SpinnerBuiltdiv role="status".spinner .largeNone
Busy stateTo doaria-busy="true" on any elementNoneOptional, to set it
SkeletonBuiltdiv.skeleton + inline styleNone
StepsBuiltol.stepsNone
Empty stateBuiltdiv p.empty .iconNone
ToastBuiltdiv.toasts .toastRequired
Scroll progressTo doCSS scroll-driven animation.scroll-progressOptional, where scroll timelines are missing