Card

A card is a content container that displays entry-level information—typically within dashboards, galleries, and catalogs.

Examples

Basic cards

Basic cards typically have a <CardTitle>, <CardBody> and <CardFooter>. You may omit these components as needed, but it is recommended to at least include a <CardBody> to provide details about the card item.

Title
Body

Secondary cards

You can apply secondary background color styling to a card by setting the variant property to secondary.

Title
Body

Modifiers

You can further modify the styling of the card's content by using the properties outlined below. In this example, you can enable each modifier by selecting its respective checkbox.

Most modifiers can be used in combination with each other, except for isCompact and isLarge, since they are contradictory.

Title
Body
Modifier
Description
isCompact
Modifies the card to include compact styling. Should not be used with isLarge.
isLarge
Modifies the card to be large. Should not be used with isCompact.
isFullHeight
Modifies the card so that it fills the total available height of its container.
isPlain
Modifies the card to include plain styling, which removes the border and background.

Header images and actions

You can include header actions with the actions property of <CardHeader> . The following example includes an image using the Brand component, and also includes a kebab dropdown and a checkbox in <CardHeader> actions.

The actions property for <CardHeader> includes the hasNoOffset property, which is false by default. When hasNoOffset is false, a negative margin is applied to help align default-sized card titles with card actions.

You may use hasNoOffset to remove this negative margin, which better aligns card actions in implementations that use large card titles or tall header images, for example.

Select the "actions hasNoOffset" checkbox in the example below to illustrate this behavior.

PatternFly logo
Title
Body

Title inline with images and actions

Moving <CardTitle> within the <CardHeader> will style it inline with any images or actions.

This is a really really really really really really really really really really long header
Body

Card header without title

Card actions can be placed in the card header even without a <CardTitle>.

Images can also be placed in the card header without a <CardTitle>.

This is the card body. There are only actions in the card head.

With HTML heading element

You may use the component property to place the card's title within an HTML heading element.

Title within an <h4> element

Body

With multiple body sections

You may use multiple body sections to visually separate blocks of content.

Title
Body
Body
Body

With a primary body section that fills

<CardBody> sections will fill the available height of the card when isFilled equals {true}, which is the default value. Set isFilled to {false} to disable this behavior for one or more body sections. The remaining available height of the card will be split between any <CardBody> section that does not set isFilled to {false}.

A common use case of this is to set all but one body section to isFilled={false} so that a primary body section fills the available space of the card as seen in the example below. This example has 3 <CardBody> sections, two of which set isFilled to {false}. The third <CardBody> fills the remaining height of the card.

Title
Body pf-m-no-fill
Body pf-m-no-fill
Body

Selectable

A selectable card can be selected by clicking anywhere within the card.

You must avoid rendering any other interactive content within the <Card> when it is meant to be selectable only. Refer to our actionable and selectable example if you need a card that is both selectable and has other interactive, actionable content.

Single selectable

When a group of single selectable cards are related, you must pass the same name property to each card's selectableActions property.

Actionable

An actionable card can perform an action or navigate to a link by clicking anywhere within the card. To open a link in a new tab or window, pass the isExternalLink property to selectableActions.

You can pass the isClicked property to <Card> to convey that a card is the currently clicked one, such as when clicking a card would open a primary-detail view. This must not be used simply for "selection" of a card, and you should instead use our selectable card or single selectable card.

When a card is meant to be actionable only, you must avoid rendering any other interactive content within the <Card>, similar to selectable cards.

Actionable and selectable

A card can be selectable and have additional interactive content by passing both the isClickable and isSelectable properties to <Card>. The following example shows how the actionable functionality can be rendered anywhere within a selectable card.

When passing interactive content to an actionable and selectable card that is disabled, you should also ensure the interactive content is disabled as well, if applicable.

Expandable cards

A card can be made expandable using the isExpanded property. In the collapsed state, only the card header is shown, and the user can click the caret to view the rest of the card content.

Place any content that you want to be hidden within the <CardExpandableContent> component.

Title

Expandable with icon

An image can be placed in the card header to show users an icon beside the expansion caret.

PatternFly logo

Card with dividers

Dividers can be placed between sections of the card.

Title

Body

Body

Props

Card

*required
NameTypeDefaultDescription
childrenReact.ReactNodeContent rendered inside the Card
classNamestringAdditional classes added to the Card
componentunknown'div'Sets the base component to render. defaults to div
idstring''ID of the Card. Also passed back in the CardHeader onExpand callback.
isClickablebooleanfalseFlag indicating that the card is clickable and contains some action that triggers on click.
isClickedbooleanfalseFlag indicating whether a card that is either only clickable or that is both clickable and selectable is currently clicked and has clicked styling.
isCompactbooleanfalseModifies the card to include compact styling. Should not be used with isLarge.
isDisabledbooleanfalseFlag indicating that a clickable or selectable card is disabled.
isExpandedbooleanfalseFlag indicating if a card is expanded. Modifies the card to be expandable.
isFullHeightbooleanfalseCause component to consume the available height of its container
isLargebooleanfalseModifies the card to be large. Should not be used with isCompact.
isPlainbooleanfalseModifies the card to include plain styling; this removes border and background
isSelectablebooleanfalseFlag indicating that the card is selectable.
isSelectedbooleanfalseFlag indicating whether a card that is either selectable only or both clickable and selectable is currently selected and has selected styling.
ouiaIdnumber | stringValue to overwrite the randomly generated data-ouia-component-id.
ouiaSafebooleantrueSet the value of data-ouia-safe. Only set to true when the component is in a static state, i.e. no animations are occurring. At all other times, this value must be false.
variant'default' | 'secondary''default'Card background color variant

CardHeader

*required
NameTypeDefaultDescription
actionsCardHeaderActionsObjectActions of the card header
childrenReact.ReactNodeContent rendered inside the card header
classNamestringAdditional classes added to the card header
idstringID of the card header.
isToggleRightAlignedbooleanWhether to right-align expandable toggle button
onExpand(event: React.MouseEvent, id: string) => voidCallback expandable card
selectableActionsCardHeaderSelectableActionsObjectSelectable actions of the card header
toggleButtonPropsanyAdditional props for expandable toggle button

CardHeaderActionsObject

*required
NameTypeDefaultDescription
actionsrequiredReact.ReactNodeActions of the card header
classNamestringAdditional classes added to the actions wrapper
hasNoOffsetbooleanFlag indicating that the actions have no offset

CardHeaderSelectableActionsObject

*required
NameTypeDefaultDescription
classNamestringAdditional classes added to the selectable actions wrapper
hasNoOffsetbooleanFlag indicating that the actions have no offset
isCheckedboolean
isExternalLinkbooleanFlag to indicate whether a clickable-only card's link should open in a new tab/window.
namestringName for the input element of a selectable card.
onChange(event: React.FormEvent<HTMLInputElement>, checked: boolean) => voidCallback for when a selectable card input changes
onClickAction(event: React.MouseEvent) => voidAction to call when a clickable-only card is clicked. This cannot be combined with the to prop.
selectableActionAriaLabelstringAdds an accessible name to the input of a selectable card or clickable button/anchor of a clickable-only card. This or selectableActionAriaLabelledby is required for clickable-only cards.
selectableActionAriaLabelledbystringA single or list of space-delimited ID's that provide an accessible name to the input of a selectable card or clickable button/anchor of a clickable-only card. This or selectableActionAriaLabelledby is required for clickable-only cards.
selectableActionIdstringCustom ID passed to the selectable card's input or a clickable-only card's button/anchor. If omitted, a random unique ID will be assigned to a selectable card's input.
selectableActionPropsanyAdditional props spread to a selectable card input or clickable-only card's button/anchor.
tostringLink to navigate to when a clickable-only card is clicked. This cannot be combined with the onClickAction prop.
variant'single' | 'multiple'Determines the type of input to be used for a selectable card.

CardTitle

*required
NameTypeDefaultDescription
childrenReact.ReactNodeContent rendered inside the CardTitle
classNamestringAdditional classes added to the CardTitle
componentunknown'div'Sets the base component to render. defaults to div

CardBody

*required
NameTypeDefaultDescription
childrenReact.ReactNodeContent rendered inside the Card Body
classNamestringAdditional classes added to the Card Body
componentunknown'div'Sets the base component to render. defaults to div
isFilledbooleantrueEnables the body Content to fill the height of the card

CardFooter

*required
NameTypeDefaultDescription
childrenReact.ReactNodeContent rendered inside the Card Footer
classNamestringAdditional classes added to the Footer
componentunknown'div'Sets the base component to render. defaults to div

CardExpandableContent

*required
NameTypeDefaultDescription
childrenReact.ReactNodeContent rendered inside the Card Body
classNamestringAdditional classes added to the Card Body

CSS variables

Expand or collapse columnSelectorVariableValue