Card
A card groups related content and actions into a self-contained semantic container, making it easy to browse and compare items. Cards are commonly used for product listings, user profiles, article previews, media galleries, and dashboard widgets. They present a digestible summary of information that can include headings, text, and interactive elements.
The component renders as an <article> element for standalone content grouping. It supports a configurable heading level (h2-h6) for proper document outline, and the heading can optionally be wrapped in a link when an href is provided. An optional aria-label enables the article to be identified as a named landmark.
Implementation Notes
- Uses
<article>for semantic standalone content grouping - Heading level is configurable (2-6) for proper document outline structure
- When
hrefis provided, the heading text wraps in an<a>element for navigation - Optional
aria-labelfor named landmark identification - Content is provided through child elements
- Passes through all additional HTML attributes via
...restProps
Props
heading: string (optional) -- heading text for the cardheadingLevel: 2 | 3 | 4 | 5 | 6 (default: 3) -- HTML heading levelhref: string (optional) -- makes the heading a linklabel: string (optional) --aria-labelfor the articlechildren: slot (required) -- card body content...restProps: Any additional HTML attributes passed to the<article>element
Usage
Card with linked heading for a condition page:
<Card heading="Diabetes" headingLevel={2} href="/conditions/diabetes">
<p>Find out about type 1 and type 2 diabetes, including symptoms,
diagnosis, and how to manage the condition.</p>
</Card>
Card with action link for a profile:
<Card heading="Dr Sarah Mitchell" label="GP profile">
<p>General Practitioner</p>
<p>Special interests: cardiology, respiratory medicine</p>
<ActionLink href="/book/dr-mitchell">Book an appointment</ActionLink>
</Card>
Keyboard Interactions
- Tab: Focus the heading link when
hrefis provided - Enter: Activate the heading link (browser default)
ARIA
- Implicit
articlerole from the<article>element - Optional
aria-label-- identifies the card as a named landmark for screen readers
When to Use
- Use to group related content such as a service listing, team member profile, or article preview into a scannable unit.
- Use when users need to browse and compare multiple items in a grid or list layout.
- Use when the content is self-contained and makes sense as a standalone summary.
- Use the
hrefprop to make the card heading a link when the card leads to a detail page.
When Not to Use
- Do not use to highlight content within long-form pages -- use InsetText or WarningCallout instead.
- Do not use for medical care instructions with urgency levels -- use CareCard instead.
- Do not use for single full-width content sections -- use Panel or a plain section element.
- Do not use when content needs to be hidden/revealed -- use Details or Expander instead.
Headless
This headless Card component provides the semantic <article> element, configurable heading level for document outline, optional heading link via href, and aria-label for landmark identification. The consumer provides all visual styling including card borders, shadows, spacing, background colors, and layout of header, body, and footer areas.
Styles
The consumer provides all CSS styling. The component renders with a .card class for targeting. No default styles are included — this is a fully headless component.
Testing
- Verify the component renders a
<div>element with classcard - Verify Optional
aria-label-- identifies the card as a named landmark for screen readers - Verify keyboard interactions work correctly
- Verify pass-through attributes are applied
Advice
- Designers: Keep card content concise and scannable. Use consistent card heights within a grid to maintain visual rhythm.
- Developers: Choose the heading level carefully to preserve the document outline hierarchy. Use the
labelprop when multiple cards appear on one page to help screen reader users distinguish between them.
Composition
Card supports header, body, and footer content areas through its children slot. Structure the card content with a heading for the header area, paragraph or descriptive content for the body, and action links or buttons for the footer. The heading prop provides a built-in heading element, or consumers can supply their own heading as part of the children content.
Related components
feature-card— a large content card with a prominent image positioned alongside or above the textproduct-card— a specialized card for displaying a product with image, title, price, and actionspanel— a generic content panel with optional headingtile— a grouping container that presents related content in a structured format, often as a single clickable area