Skip to content

Card

A card gives one item its own place on the page, such as a hiring project or a candidate. Use cards when people scan several items of one kind and open one of them.

What it is

A card has rounded corners and no edge. It stands out from the page by its fill alone: white on the light gray page, a lighter navy on the dark one.

When to use it

Use cards for items people browse and open one at a time, such as the hiring projects of an employer, where each item has a title and a line or two of detail.

Use a list or a board when people compare items field by field or act on many at once.

A job ad takes the job card, and one headline figure takes the stat tile. A group of settings needs no card: a heading and space group it.

Anatomy

Welders for a shipyard in Split

Croatia, 24 positions

Updated 2 hours ago

A card holds a title, an optional supporting line, optional details and at most two actions, in that order.

Corner radius
16 px
--radius-2xl
Padding
16 px, or 24 px when spacious
--space-4, --space-6
Fill
#ffffff in light, #191c2c in dark
--surface-1
Title
16 px, weight 500, up to two lines
--type-body
Supporting text
14 px, 4 px below the title
--type-small
Details
13 px, tabular digits
--type-caption
Actions
small buttons, 16 px below the text, 8 px apart
--space-4
Gap between cards
16 px
--space-4
Columns
1, 2 from 640 px, 3 from 1024 px

Static and clickable

A static card shows information, and its actions are buttons inside it.

A clickable card opens its item. The title is the link, and the link's target covers the whole card, so a click anywhere opens it. Buttons inside the card sit above that target and keep their own action.

States

Care assistants for a care home in Zagreb

Croatia, 12 positions

Updated yesterday

Rest

Care assistants for a care home in Zagreb

Croatia, 12 positions

Updated yesterday

Hover

Care assistants for a care home in Zagreb

Croatia, 12 positions

Updated yesterday

Pressed

Care assistants for a care home in Zagreb

Croatia, 12 positions

Updated yesterday

Focus

Hover appears only with a pointer that can hover: the card turns the control gray, darker than white in the light theme and lighter than navy in the dark one. On a touch screen, where there is no hover, the gray appears when the card is pressed. Nothing lifts and nothing casts a shadow.

While content loads, show skeleton cards of the final size, so the grid does not jump when the data arrives.

Rest
Flat, the fill alone
--surface-1
Hover
The control gray
--surface-control
Pressed
The same gray, held
Focus
2 px ring, 2 px outside the card
--focus-ring
Loading
A skeleton of the same size and radius
--radius-2xl

Content

Write the title as the name people use for the item. It wraps to two lines, a longer title ends in an ellipsis, and a screen reader still reads it whole.

The supporting line says what people need before they open the card, such as the country and the number of positions. Long country names wrap instead of shrinking.

Accessibility

Put cards in a list, so screen readers announce how many there are. The card's link takes its name from the title and its description from the supporting line.

Tab reaches the title link first, then each button in the card. Enter opens the item. Arrow keys do not move between cards.

In forced colors, where fills disappear, the card draws an edge in the system text color.

Permitted and not permitted

Permitted

  • One item per card, named by its title

  • Cards directly on the page background

Not permitted

  • A card inside a card

    Group its content with space and type.

  • A border or ring around a card

    The fill already separates it.

  • A shadow or a lift on hover

    The fill alone shows hover and press.

  • A link wrapped around the whole card

    Its buttons stop working, and a screen reader reads the whole card as its name.

NextList

Card

Holds one item, such as a hiring project or a candidate, on a flat surface with a title, optional detail and at most two actions.

  • Kind: component
  • Page: https://design.werklist.com/components/card
  • Version: 2.1.2

When to use it

  • A set of items of one kind that people browse and open one at a time.
  • Each item has a title and a line or two of detail.

When not to use it

  • Items people compare field by field or act on in bulk: use a list or the board grid.
  • A job ad: use the job card. One headline figure: use the stat tile.
  • A group of settings on a page: group it with a heading and space.
  • A card inside a card, a card on a well, or a card on --surface-1.

Rules

  • The card sits on --bg, never on another card, a well or --surface-1.

Anatomy

  • Container: The fill alone, with no border, ring or shadow. (--surface-1)
  • Corner radius: 16 px (--radius-2xl)
  • Padding: 16 px, or 24 px when spacious (--space-4, --space-6)
  • Title: 16 px on 26 px, weight 500, in --text. Two lines at most, then an ellipsis. (--type-body)
  • Supporting text: 14 px on 22 px, in --text-muted, 4 px below the title (--type-small)
  • Details: 13 px on 20 px, in --text-label, tabular digits, 4 px below the line above (--type-caption)
  • Actions: At most two small buttons (36 px), quiet or secondary, 16 px below the text and 8 px apart (--space-2)
  • Grid: A list of cards 16 px apart: one column, two from 640 px, three from 1024 px (--space-4)

Variants

  • static: Shows information. Its actions are buttons inside it. It has no hover and no focus of its own.
  • clickable: Opens one item. The title is the link, and its target covers the card. The buttons of the card sit above that target and keep their own action.

Sizes

  • default: padding 16 px, type Title 16 px on 26 px at weight 500, supporting text 14 px on 22 px, details 13 px on 20 px
  • spacious: padding 24 px, type Title 16 px on 26 px at weight 500, supporting text 14 px on 22 px, details 13 px on 20 px

States

  • rest: Flat: the fill alone. (--elevation-0, --surface-1)
  • hover: The fill turns --surface-control over 150 ms, with no shadow and no lift. Only on a pointer that can hover. (--surface-control, --duration-fast, --ease-standard)
  • pressed: The same --surface-control fill. On a touch screen, where there is no hover, it appears when the card is pressed. (--surface-control)
  • focus visible: A 2 px outline 2 px outside the card while its link has keyboard focus. The outline follows the corners. (--focus-ring, --focus-ring-width, --focus-ring-offset)
  • loading: A skeleton card of the final size and radius. (--radius-2xl)
  • reduced motion: The fill changes at once, without the 150 ms transition.
  • forced colors: A 1 px border in CanvasText. Focus in Highlight.

Keyboard

  • Tab: Moves to the title link, then to each button of the card in order.
  • Shift+Tab: Moves back.
  • Enter: Opens the item from the title link.

Accessibility

  • Cards sit in a ul, so screen readers announce the count.
  • The title is the only link. Its name is the title, and aria-describedby points at the supporting line.
  • Buttons inside a clickable card are siblings of the link, not its children.
  • No arrow key navigation between cards: a grid of cards is a list of links, not a composite widget.
  • Actions are 36 px and reach 44 px on a coarse pointer.

Content

  • The title is the item's own name, as people say it.
  • The supporting line carries what people need before opening: for a project, the country and the number of positions.
  • Dates and counts in tabular digits.
  • Long country names wrap. Nothing shrinks to fit.

Tokens

  • --surface-1
  • --bg
  • --radius-2xl
  • --space-1
  • --space-2
  • --space-4
  • --space-6
  • --text
  • --text-muted
  • --text-label
  • --elevation-0
  • --surface-control
  • --duration-fast
  • --ease-standard
  • --focus-ring
  • --focus-ring-width
  • --focus-ring-offset

JSON

{
  "title": "Card",
  "path": "/components/card",
  "url": "https://design.werklist.com/components/card",
  "text": "https://design.werklist.com/agent/components/card",
  "summary": "A card holds one item, such as a hiring project or a candidate, with a title and at most two actions.",
  "version": "2.1.2",
  "kind": "component",
  "name": "Card",
  "purpose": "Holds one item, such as a hiring project or a candidate, on a flat surface with a title, optional detail and at most two actions.",
  "use": [
    "A set of items of one kind that people browse and open one at a time.",
    "Each item has a title and a line or two of detail."
  ],
  "avoid": [
    "Items people compare field by field or act on in bulk: use a list or the board grid.",
    "A job ad: use the job card. One headline figure: use the stat tile.",
    "A group of settings on a page: group it with a heading and space.",
    "A card inside a card, a card on a well, or a card on --surface-1."
  ],
  "anatomy": [
    {
      "part": "Container",
      "measure": "The fill alone, with no border, ring or shadow.",
      "token": "--surface-1"
    },
    {
      "part": "Corner radius",
      "measure": "16 px",
      "token": "--radius-2xl"
    },
    {
      "part": "Padding",
      "measure": "16 px, or 24 px when spacious",
      "token": "--space-4, --space-6"
    },
    {
      "part": "Title",
      "measure": "16 px on 26 px, weight 500, in --text. Two lines at most, then an ellipsis.",
      "token": "--type-body"
    },
    {
      "part": "Supporting text",
      "measure": "14 px on 22 px, in --text-muted, 4 px below the title",
      "token": "--type-small"
    },
    {
      "part": "Details",
      "measure": "13 px on 20 px, in --text-label, tabular digits, 4 px below the line above",
      "token": "--type-caption"
    },
    {
      "part": "Actions",
      "measure": "At most two small buttons (36 px), quiet or secondary, 16 px below the text and 8 px apart",
      "token": "--space-2"
    },
    {
      "part": "Grid",
      "measure": "A list of cards 16 px apart: one column, two from 640 px, three from 1024 px",
      "token": "--space-4"
    }
  ],
  "variants": [
    {
      "name": "static",
      "use": "Shows information. Its actions are buttons inside it. It has no hover and no focus of its own."
    },
    {
      "name": "clickable",
      "use": "Opens one item. The title is the link, and its target covers the card. The buttons of the card sit above that target and keep their own action."
    }
  ],
  "sizes": [
    {
      "name": "default",
      "padding": "16 px",
      "type": "Title 16 px on 26 px at weight 500, supporting text 14 px on 22 px, details 13 px on 20 px"
    },
    {
      "name": "spacious",
      "padding": "24 px",
      "type": "Title 16 px on 26 px at weight 500, supporting text 14 px on 22 px, details 13 px on 20 px"
    }
  ],
  "states": [
    {
      "name": "rest",
      "change": "Flat: the fill alone.",
      "tokens": [
        "--elevation-0",
        "--surface-1"
      ]
    },
    {
      "name": "hover",
      "change": "The fill turns --surface-control over 150 ms, with no shadow and no lift. Only on a pointer that can hover.",
      "tokens": [
        "--surface-control",
        "--duration-fast",
        "--ease-standard"
      ]
    },
    {
      "name": "pressed",
      "change": "The same --surface-control fill. On a touch screen, where there is no hover, it appears when the card is pressed.",
      "tokens": [
        "--surface-control"
      ]
    },
    {
      "name": "focus visible",
      "change": "A 2 px outline 2 px outside the card while its link has keyboard focus. The outline follows the corners.",
      "tokens": [
        "--focus-ring",
        "--focus-ring-width",
        "--focus-ring-offset"
      ]
    },
    {
      "name": "loading",
      "change": "A skeleton card of the final size and radius.",
      "tokens": [
        "--radius-2xl"
      ]
    },
    {
      "name": "reduced motion",
      "change": "The fill changes at once, without the 150 ms transition.",
      "tokens": []
    },
    {
      "name": "forced colors",
      "change": "A 1 px border in CanvasText. Focus in Highlight.",
      "tokens": []
    }
  ],
  "keys": [
    {
      "key": "Tab",
      "action": "Moves to the title link, then to each button of the card in order."
    },
    {
      "key": "Shift+Tab",
      "action": "Moves back."
    },
    {
      "key": "Enter",
      "action": "Opens the item from the title link."
    }
  ],
  "accessibility": [
    "Cards sit in a ul, so screen readers announce the count.",
    "The title is the only link. Its name is the title, and aria-describedby points at the supporting line.",
    "Buttons inside a clickable card are siblings of the link, not its children.",
    "No arrow key navigation between cards: a grid of cards is a list of links, not a composite widget.",
    "Actions are 36 px and reach 44 px on a coarse pointer."
  ],
  "content": [
    "The title is the item's own name, as people say it.",
    "The supporting line carries what people need before opening: for a project, the country and the number of positions.",
    "Dates and counts in tabular digits.",
    "Long country names wrap. Nothing shrinks to fit."
  ],
  "tokens": [
    "--surface-1",
    "--bg",
    "--radius-2xl",
    "--space-1",
    "--space-2",
    "--space-4",
    "--space-6",
    "--text",
    "--text-muted",
    "--text-label",
    "--elevation-0",
    "--surface-control",
    "--duration-fast",
    "--ease-standard",
    "--focus-ring",
    "--focus-ring-width",
    "--focus-ring-offset"
  ],
  "rules": [
    "The card sits on --bg, never on another card, a well or --surface-1."
  ]
}

Raw file: https://design.werklist.com/agent/components/card