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.
Secondary cards
You can apply secondary background color styling to a card by setting the variant
property to secondary
.
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.
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.
Title inline with images and actions
Moving <CardTitle>
within the <CardHeader>
will style it inline with any images or actions.
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>
.
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
With multiple body sections
You may use multiple body sections to visually separate blocks of content.
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.
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.
Expandable with icon
An image can be placed in the card header to show users an icon beside the expansion caret.
Props
Card
Name | Type | Default | Description |
---|---|---|---|
children | React.ReactNode | Content rendered inside the Card | |
className | string | Additional classes added to the Card | |
component | unknown | 'div' | Sets the base component to render. defaults to div |
id | string | '' | ID of the Card. Also passed back in the CardHeader onExpand callback. |
isClickable | boolean | false | Flag indicating that the card is clickable and contains some action that triggers on click. |
isClicked | boolean | false | Flag indicating whether a card that is either only clickable or that is both clickable and selectable is currently clicked and has clicked styling. |
isCompact | boolean | false | Modifies the card to include compact styling. Should not be used with isLarge. |
isDisabled | boolean | false | Flag indicating that a clickable or selectable card is disabled. |
isExpanded | boolean | false | Flag indicating if a card is expanded. Modifies the card to be expandable. |
isFullHeight | boolean | false | Cause component to consume the available height of its container |
isLarge | boolean | false | Modifies the card to be large. Should not be used with isCompact. |
isPlain | boolean | false | Modifies the card to include plain styling; this removes border and background |
isSelectable | boolean | false | Flag indicating that the card is selectable. |
isSelected | boolean | false | Flag indicating whether a card that is either selectable only or both clickable and selectable is currently selected and has selected styling. |
ouiaId | number | string | Value to overwrite the randomly generated data-ouia-component-id. | |
ouiaSafe | boolean | true | Set 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
Name | Type | Default | Description |
---|---|---|---|
actions | CardHeaderActionsObject | Actions of the card header | |
children | React.ReactNode | Content rendered inside the card header | |
className | string | Additional classes added to the card header | |
id | string | ID of the card header. | |
isToggleRightAligned | boolean | Whether to right-align expandable toggle button | |
onExpand | (event: React.MouseEvent, id: string) => void | Callback expandable card | |
selectableActions | CardHeaderSelectableActionsObject | Selectable actions of the card header | |
toggleButtonProps | any | Additional props for expandable toggle button |
CardHeaderActionsObject
Name | Type | Default | Description |
---|---|---|---|
actionsrequired | React.ReactNode | Actions of the card header | |
className | string | Additional classes added to the actions wrapper | |
hasNoOffset | boolean | Flag indicating that the actions have no offset |
CardHeaderSelectableActionsObject
Name | Type | Default | Description |
---|---|---|---|
className | string | Additional classes added to the selectable actions wrapper | |
hasNoOffset | boolean | Flag indicating that the actions have no offset | |
isChecked | boolean | ||
isExternalLink | boolean | Flag to indicate whether a clickable-only card's link should open in a new tab/window. | |
name | string | Name for the input element of a selectable card. | |
onChange | (event: React.FormEvent<HTMLInputElement>, checked: boolean) => void | Callback for when a selectable card input changes | |
onClickAction | (event: React.MouseEvent) => void | Action to call when a clickable-only card is clicked. This cannot be combined with the to prop. | |
selectableActionAriaLabel | string | Adds 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. | |
selectableActionAriaLabelledby | string | A 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. | |
selectableActionId | string | Custom 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. | |
selectableActionProps | any | Additional props spread to a selectable card input or clickable-only card's button/anchor. | |
to | string | Link 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
Name | Type | Default | Description |
---|---|---|---|
children | React.ReactNode | Content rendered inside the CardTitle | |
className | string | Additional classes added to the CardTitle | |
component | unknown | 'div' | Sets the base component to render. defaults to div |
CardBody
Name | Type | Default | Description |
---|---|---|---|
children | React.ReactNode | Content rendered inside the Card Body | |
className | string | Additional classes added to the Card Body | |
component | unknown | 'div' | Sets the base component to render. defaults to div |
isFilled | boolean | true | Enables the body Content to fill the height of the card |
CardFooter
Name | Type | Default | Description |
---|---|---|---|
children | React.ReactNode | Content rendered inside the Card Footer | |
className | string | Additional classes added to the Footer | |
component | unknown | 'div' | Sets the base component to render. defaults to div |
CardExpandableContent
Name | Type | Default | Description |
---|---|---|---|
children | React.ReactNode | Content rendered inside the Card Body | |
className | string | Additional classes added to the Card Body |
CSS variables
Expand or collapse column | Selector | Variable | Value |
---|