Card
Leave feedbackCard is a box of related content usually describing a single object. It can be composed of several subcomponents, we give full overview of those subcomponents below.
Card supports vertical and horizontal orientation which is controlled by CardContext, see examples below.
This component uses a Card from react-bootstrap as a base component and extends it with additional subcomponents.
See React-Bootstrap for additional documentation.
Basic Usage
Any Paragon component or export may be added to the code example.
Card variants
Use variant prop to use Card specific style variant.
Any Paragon component or export may be added to the code example.
Clickable card
You use isClickable prop to add additional hover and focus styling to the Card.
Any Paragon component or export may be added to the code example.
As link
You can also use Card as a link by passing the value HyperLink (or a, Link) to the as property, note that
Card will override the default link styling to make its content appear as regular text.
Any Paragon component or export may be added to the code example.
Header
You may add a header by adding a Card.Header component.
This header displays a title, subtitle, and may contain actions.
Any Paragon component or export may be added to the code example.
Actions
The Card.Header supports custom actions via the actions prop and renders them on the top right of the header.
Any Paragon component or export may be added to the code example.
Sizes
The Card.Header supports two size variants, "sm" and "md".
Add size="sm" for smaller header content and actions.
Any Paragon component or export may be added to the code example.
Section
Card.Section is the main block to display card content. Can include its own title and actions separate from other card components. Multiple sections have a Card.Divider between them.
Any Paragon component or export may be added to the code example.
Footer
Card.Footer is the bottom part of the card. Usually used to outline actions that can be taken on the card object.
Note that Card.Footer has a separate orientation prop which will override the value from CardContext, this was implemented because there are some use cases where you would want to display Card with horizontal orientation containing footer with vertical orientation.
Footer vertical variant
Any Paragon component or export may be added to the code example.
Footer horizontal variant
Any Paragon component or export may be added to the code example.
With Image Cap
ImageCap is an image that sits on the top or the left edge of a Card. Can contain an optional logo image.
Any Paragon component or export may be added to the code example.
Horizontal variant
When using horizontal variant Paragon provides additional component Card.Body which acts as a wrapper for content you want to display between ImageCap and Footer. Use it if content contains multiple components.
Any Paragon component or export may be added to the code example.
Card status
Note that in the example below, the content of Card is wrapped inside Card.Body. The d-flex class is added for the horizontal orientation to achieve horizontal variant. The flex-column class is added for the main Card component.
An optional actions prop may be passed to include call-to-action button(s).
Any Paragon component or export may be added to the code example.
Card Content Block Empty
With image
Any Paragon component or export may be added to the code example.
Without image
Any Paragon component or export may be added to the code example.
Horizontal variant with image
Any Paragon component or export may be added to the code example.
Horizontal variant without image
Any Paragon component or export may be added to the code example.
Fallback Image
With Fallback custom Image
You can specify fallbackSrc image to show in case your main src fails to load.
A fallback source is available for both the main ImageCap component image and the logo.
Any Paragon component or export may be added to the code example.
With default Fallback Image
The default fallback image will be displayed if fallbackSrc is not specified.
Any Paragon component or export may be added to the code example.
With loading state
Vertical variant
Any Paragon component or export may be added to the code example.
Horizontal variant
Any Paragon component or export may be added to the code example.
CardGrid
This component displays a collection of Cards as a grid (with customizable responsive behavior), where all cards in a given row have equal height. Try shrinking the width of your browser to view the responsive behavior.
Any Paragon component or export may be added to the code example.
CardDeck
Displays child Card components in a horizontal row with equal height and width, with an appropriate gutter between cards. The width of each child Card component is determined by the (optional) columnSizes prop. If any child Card components overflow beyond the parent's width, they will be hidden but accessible via scrolling horizontally or keyboard navigation.
For accessibility, if the child Card components are interactive (e.g., isClickable), pass the hasInteractiveChildren prop so the CardDeck itself isn't focusable.
Any Paragon component or export may be added to the code example.
CardDeck.Deprecated
Gives any child Card components equal height with an appropriate gutter between cards. Each child Card component's width will be adjusted (e.g., become more narrow) to ensure all Card components fit within its parent's width.
Note: This component is a pass-thru from react-bootstrap.
Any Paragon component or export may be added to the code example.
CardCarousel
Extends CardDeck to support navigating between any overflow Card components via left and right IconButton components as a scrollable carousel.
Includes support for an optional title and subtitle. You may rely on the default styles for the titles (e.g., if passing strings) or alternatively you may also pass custom HTML and JSX.
Any Paragon component or export may be added to the code example.
Theme Variables (SCSS)#
$card-spacer-y: .75rem !default;$card-spacer-x: 1.25rem !default;$card-border-width: $border-width !default;$card-border-radius: $border-radius !default;$card-border-color: rgba($black, .125) !default;$card-border-focus-color: rgba($black, .5) !default;$card-border-focus-color-dark: theme-color("primary", "focus") !default;$card-inner-border-radius: subtract($card-border-radius, $card-border-width) !default;$card-cap-bg: rgba($black, .03) !default;$card-cap-color: null !default;$card-height: null !default;$card-color: null !default;$card-bg: $white !default;$card-bg-dark: $primary-500 !default;$card-bg-muted: $light-200 !default;$card-img-overlay-padding: 1.25rem !default;$card-group-margin: calc($grid-gutter-width / 2) !default;$card-deck-margin: $card-group-margin !default;$card-grid-margin: $card-group-margin !default;$card-deck-margin-bottom: map_get($spacers, 3) !default;$card-grid-margin-bottom: map_get($spacers, 3) !default;$card-columns-count: 3 !default;$card-columns-gap: 1.25rem !default;$card-columns-margin: $card-spacer-y !default;$card-divider-bg: $light-400 !default;$card-divider-margin-y: $card-spacer-y !default;$card-footer-actions-gap: .5rem !default;$card-logo-left-offset: 1.5rem !default;$card-logo-bottom-offset: 1rem !default;$card-logo-left-offset-horizontal: .4375rem !default;$card-logo-bottom-offset-horizontal: .4375rem !default;$card-logo-width: 7.25rem !default;$card-logo-height: 4.125rem !default;$card-image-border-radius: .3125rem !default;$card-logo-border-radius: .25rem !default;$card-footer-text-font-size: $x-small-font-size;$card-image-horizontal-max-width: 240px !default;$card-image-horizontal-min-width: $card-image-horizontal-max-width !default;$card-image-vertical-max-height: 140px !default;$loading-skeleton-spacer: .313rem !default;$card-focus-border-offset: 5px !default;$card-focus-border-width: 2px !default;$card-focus-border-radius: 5px !default;
Props API#
- actions
nodeDefaultnullOptional node to render on the top right of the card header, i.e. ActionRow or a DropdownMenu.
- className
stringDefaultnullThe class name for the CardHeader component
- title
nodeDefaultnullThe title for the CardHeader component
- size
enum'sm' | 'md'Default'md'The size of the CardHeader component
- subtitle
nodeDefaultnullThe subtitle of the CardHeader component
- skeletonHeight
numberDefault20Specifies height of skeleton in loading state.
- skeletonWidth
numberDefaultnullSpecifies width of skeleton in loading state.
- className
stringThe class name for the CardGrid component
- children
nodeRequiredThe Card components to organize into a responsive grid
- columnSizes
shape{xs:number,sm:number,md:number,lg:number,xl:}number,Default{ sm: 12, lg: 6, xl: 4, }An object containing the desired column size at each breakpoint, following a similar props API as
react-bootstrap/Col - hasEqualColumnHeights
boolDefaulttrueWhether to disable the default equal height cards across rows in the card grid
- className
stringSpecifies class name to append to the base element.
- children
nodeDefaultnullSpecifies contents of the component.
- title
nodeSpecifies title of the
Section. - actions
nodeSpecifies node to render on the bottom right of the
Section(i.e.ActionRow). - muted
boolDefaultfalseSpecifies whether to display
Sectionwith muted styling. - skeletonHeight
numberDefault100Specifies height of skeleton in loading state.
- skeletonWidth
numberSpecifies width of skeleton in loading state.
- className
stringSpecifies class name to append to the base element.
- children
nodeSpecifies the content of the component.
- className
stringThe class to append to the base element.
- className
stringSpecifies class name to append to the base element.
- src
stringSpecifies image src.
- fallbackSrc
stringDefaultcardSrcFallbackImgSpecifies fallback image src.
- srcAlt
stringSpecifies image alt text.
- logoSrc
stringSpecifies logo src to put on top of the image.
- fallbackLogoSrc
stringSpecifies fallback image logo src.
- logoAlt
stringSpecifies logo image alt text.
- skeletonHeight
numberDefault140Specifies height of Image skeleton in loading state.
- skeletonWidth
numberSpecifies width of Image skeleton in loading state.
- logoSkeleton
boolDefaultfalseSpecifies whether the cap should be displayed during loading.
- logoSkeletonHeight
numberDefault41Specifies height of Logo skeleton in loading state.
- logoSkeletonWidth
numberSpecifies width of Logo skeleton in loading state.
- imageLoadingType
enum'eager' | 'lazy'Default'eager'Specifies loading type for images
- children
nodeRequiredSpecifies the content of the component.
- className
stringThe class to append to the base element.
- icon
funcIcon that will be shown in the top-left corner.
- variant
enum'primary' | 'success' | 'danger' | 'warning'Default'warning'Specifies variant to use.
- title
element|stringSpecifies title for the
Card.Status. - actions
nodeSpecifies any optional actions, e.g. button(s).
- className
stringThe class name for the CardDeck component
- children
nodeRequiredThe Card components to organize
- columnSizes
shape{xs:number,sm:number,md:number,lg:number,xl:}number,Default{ sm: 12, lg: 6, xl: 4, }An object containing the desired column size at each breakpoint, following a similar props API as
react-bootstrap/Col - hasInteractiveChildren
boolDefaultfalseWhether the child
Cardcomponents are interactive/focusable. If not, atabindex="0"is added to be a11y-compliant - canScrollHorizontal
boolDefaulttrueWhether the
CardDecksupports horizontal scrolling when there are overflow children - hasOverflowScrollItems
boolDefaultfalseWhether the children of CardDeck should be processed by
useOverflowScrollItemsto give each child a known/stable CSS classname - hasEqualColumnHeights
boolDefaulttrueWhether to disable the default equal height cards
- children
nodeRequiredThe
Carditems for theCardCarousel. - ariaLabel
stringRequiredText describing the CardCarousel for screen readers
- title
nodeAn optional title.
- subtitle
nodeAn optional subtitle.
- columnSizes
shape{xs:number,sm:number,md:number,lg:number,xl:}number,Default{ sm: 12, lg: 6, xl: 4, }Customize the responsive columnSizes used by the carousel.
- hasInteractiveChildren
boolDefaultfalseWhether the carousel has interactive children (e.g., clickable cards).
- canScrollHorizontal
boolDefaulttrueWhether the carousel can be scrolled manually by users.
- disableOpacityMasks
boolDefaultfalseWhether the default opacity masks should be shown at the start/end, if applicable.
- onScrollPrevious
funcCallback function for when the user scrolls to the previous element.
- onScrollNext
funcCallback function for when the user scrolls to the next element.
- CardCarouselControls
elementTypeOptional override for the default
CardCarouselControls
Usage Insights#
Card
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| frontend-app-admin-portal | 20.39.2 | 21 | |
| frontend-app-authn | 20.45.5 | 1 | |
| frontend-app-course-authoring | 20.35.1 | 7 | |
| frontend-app-discussions | 20.44.0 | 1 | |
| frontend-app-ecommerce | 20.35.0 | 1 | |
| frontend-app-enterprise-public-catalog | 20.29.0 | 2 | |
| frontend-app-learner-dashboard | 20.32.0 | 5 | |
| frontend-app-learner-portal-enterprise | 20.45.1 | 23 | |
| frontend-app-learning | 20.28.4 | 4 | |
| frontend-app-library-authoring | 20.45.5 | 13 | |
| frontend-app-ora-grading | 20.45.1 | 4 | |
| frontend-app-support-tools | 20.45.0 | 3 | |
| frontend-lib-content-components | 20.45.0 | 3 | |
| prospectus | 20.45.2 | 6 |
CardBody
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| frontend-app-admin-portal | 20.39.2 | 1 | |
| frontend-app-course-authoring | 20.35.1 | 5 | |
| frontend-app-learner-dashboard | 20.32.0 | 3 | |
| frontend-app-learner-portal-enterprise | 20.45.1 | 3 | |
| frontend-app-library-authoring | 20.45.5 | 2 | |
| frontend-lib-content-components | 20.45.0 | 1 | |
| prospectus | 20.45.2 | 2 |
CardCarousel
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| frontend-app-learner-portal-enterprise | 20.45.1 | 1 |
CardDeck
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| frontend-app-learner-portal-enterprise | 20.45.1 | 1 |
CardDivider
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| prospectus | 20.45.2 | 1 |
CardFooter
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| frontend-app-admin-portal | 20.39.2 | 8 | |
| frontend-app-authn | 20.45.5 | 1 | |
| frontend-app-course-authoring | 20.35.1 | 2 | |
| frontend-app-learner-dashboard | 20.32.0 | 1 | |
| frontend-app-learner-portal-enterprise | 20.45.1 | 5 | |
| frontend-app-learning | 20.28.4 | 3 | |
| frontend-app-library-authoring | 20.45.5 | 2 | |
| frontend-app-ora-grading | 20.45.1 | 1 | |
| frontend-app-support-tools | 20.45.0 | 1 | |
| frontend-lib-content-components | 20.45.0 | 1 |
CardGrid
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| frontend-app-admin-portal | 20.39.2 | 8 | |
| frontend-app-course-authoring | 20.35.1 | 2 | |
| frontend-app-learner-portal-enterprise | 20.45.1 | 16 | |
| prospectus | 20.45.2 | 3 |
CardHeader
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| frontend-app-admin-portal | 20.39.2 | 5 | |
| frontend-app-authn | 20.45.5 | 1 | |
| frontend-app-course-authoring | 20.35.1 | 5 | |
| frontend-app-enterprise-public-catalog | 20.29.0 | 2 | |
| frontend-app-learner-dashboard | 20.32.0 | 3 | |
| frontend-app-learner-portal-enterprise | 20.45.1 | 14 | |
| frontend-app-learning | 20.28.4 | 4 | |
| frontend-app-library-authoring | 20.45.5 | 6 | |
| frontend-app-support-tools | 20.45.0 | 5 | |
| frontend-lib-content-components | 20.45.0 | 1 |
CardImageCap
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| frontend-app-admin-portal | 20.39.2 | 6 | |
| frontend-app-authn | 20.45.5 | 1 | |
| frontend-app-enterprise-public-catalog | 20.29.0 | 2 | |
| frontend-app-learner-dashboard | 20.32.0 | 4 | |
| frontend-app-learner-portal-enterprise | 20.45.1 | 10 | |
| frontend-app-learning | 20.28.4 | 1 |
CardSection
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| frontend-app-admin-portal | 20.39.2 | 19 | |
| frontend-app-authn | 20.45.5 | 1 | |
| frontend-app-course-authoring | 20.35.1 | 5 | |
| frontend-app-discussions | 20.44.0 | 1 | |
| frontend-app-enterprise-public-catalog | 20.29.0 | 2 | |
| frontend-app-learner-dashboard | 20.32.0 | 3 | |
| frontend-app-learner-portal-enterprise | 20.45.1 | 30 | |
| frontend-app-learning | 20.28.4 | 4 | |
| frontend-app-library-authoring | 20.45.5 | 8 | |
| frontend-app-ora-grading | 20.45.1 | 2 | |
| frontend-app-support-tools | 20.45.0 | 5 | |
| frontend-lib-content-components | 20.45.0 | 3 | |
| prospectus | 20.45.2 | 3 |
CardStatus
| Project Name | Paragon Version | Instance Count | |
|---|---|---|---|
| frontend-app-admin-portal | 20.39.2 | 2 | |
| frontend-app-course-authoring | 20.35.1 | 1 | |
| frontend-app-learner-portal-enterprise | 20.45.1 | 1 |