Skip to content

Card

A Card groups information related to a single topic.

Card titleDescriptionSupporting text
NameValue
Props
icon
url
Slots
title
description
supporting-text
View
Reading direction
Note: For icon properties, the relevant icon also needs to be imported from the @wikimedia/codex-icons package. See the usage documentation for more information.

Overview

When to use Card

Use the Card component when you need to present individual pieces of information such as articles. Use them to create lists, grids or as standalone elements in the page. Cards can be clickable and offer a way to navigate to the content they represent.

Avoid using Cards when you have to display extensive content, multiple elements, or group unrelated topics together. In such cases, consider using a different component or layout.

About Card

Card includes the following elements.

Visual element (optional)

They may include a Thumbnail or an Icon as a visual representation of its content.

  • Use a Thumbnail when you intend to showcase articles and their associated images.

  • Use an Icon to help users quickly identify and associate Cards with specific actions or topics.

Title

A concise and descriptive title provides a brief description of the Card content.

Description

A description below the title provides more information about the element represented by the Card. If the Card itself is not a link, you can include links in the description.

  • Ensure that the content within the Card remains concise and pertinent.

  • Avoid overcrowding the Card with excessive content or unrelated topics.

Supporting text (optional)

Supporting text can be included to provide additional context about the Card’s content. If the Card itself is not a link, you can include links in the supporting text.

As long as links are not included in the contents of the Card, the Card itself can be made a link.

Examples

Basic usage

Card title Description Supporting text

Developer notes

Adding the url prop will make the root element of the Card an anchor element.

Media

A Card can have either a thumbnail or an icon. Card text will be aligned to the top of the media, unless there is only a title, which will be aligned to the center of the media.

  • Always use the same media for each Card in a group.

With Icon

Card title Description

With Thumbnail

Card title Description

Media and title only

Card title

Card groups

Cards will often be displayed in groups. The height and width of cards can be customized as needed, and when multiple cards are aligned together, their heights should adjust to match the tallest card in the set.

Developer notes

There are two considerations for Card groups:

  • Layout: Layout styles for groups of Cards, e.g. margins or grid layout, must be added by the application. The example above adds some simple layout styles to a group of Cards. Consider using flexbox or CSS grid to lay out Cards consistently.
  • Media consistency: As shown above, adding a thumbnail prop will display the Thumbnail. For groups of Cards, you may want to display a Thumbnail for each Card if available, and otherwise display a placeholder. To enable this behavior, add the forceThumbnail prop, as demonstrated below. The third item has no Thumbnail and display a placeholder Icon instead.

Technical implementation

Vue usage

Props

Prop nameDescriptionTypeDefault
urlIf provided, the Card will be a link to this URL.string''
iconIcon displayed at the start of the Card.Icon''
thumbnailThumbnail image data for the Card.Thumbnail|nullnull
forceThumbnailOption to force a thumbnail layout.

When set to true, the Card will display a Thumbnail. If a thumbnail prop was also provided, the thumbnail image will display. Otherwise, a placeholder icon will display.

This is useful when displaying groups of Cards when some of the cards have thumbnail images but some do not. forceThumbnail will provide a consistent layout for that group.

Note that this prop is not needed to display a thumbnail image: if the thumbnail prop is provided, it will display. This prop is only needed to enable the display of the thumbnail placeholder icon when the thumbnail prop is not provided.
booleanfalse
customPlaceholderIconOptional custom icon for the placeholder shown when forceThumbnail is true but no thumbnail is provided.

Defaults to the default placeholder icon set in the Thumbnail component.
Iconundefined

Slots

NameDescriptionBindings
titleCard title
descriptionCard description
supporting-textShort supporting text

CSS-only version

Markup structure

Card titleDescriptionSupporting text

To make the entire Card a link, use an <a> element and include the class cdx-card--is-link.

With media

Image

To add an image, add the following markup:

  • A <span> with the classes cdx-card--thumbnail and cdx-thumbnail
  • Inside of that <span>, add an empty <span> element with the class cdx-thumbnail__image, plus a custom CSS class that you can use to add a background-image rule (alternately, you can add the background-image rule via a style attribute on this <span>)

See the CSS-only Thumbnail documentation for more examples.

Card titleDescriptionSupporting text
Icon

To add an Icon, add a <span> element with the class cdx-card__icon, plus a custom class that you can use to add a CSS-only Icon.

Card titleDescriptionSupporting text

Card groups

See the documentation above for UX guidelines.

Keyboard navigation

KeyFunction
TabIf the Card is interactive, it places the focus on the Card. If a non-interactive Card contains a link, this key places the focus in that link. When the focus is placed within an interactive Card or within the link of a non-interactive Card, it moves the focus to the next interactive element in tab order.
Shift + TabIt moves the focus to the previous interactive element.
EnterIf the focus is on an interactive Card, it will open its hyperlink. When the focus is on a link within a Card, it will open the link.