Product Card
Installation
yarn add @chewy/kib-product-styles
Import
@use '~@chewy/kib-product-styles/src/kib-product-card/styles' as kib-product-card;
Mixins
card
@mixin card() { ... }
@mixin card() { @include kib-foundations.card; position: relative; display: flex; flex-direction: column; max-width: settings.$max-width; min-width: settings.$min-width; }
card-elevated
@mixin card-elevated() { ... }
@mixin card-elevated() { @include kib-foundations.elevation('minimal'); }
Description
Elevated variant styles
Parameters
None.
card-flat
@mixin card-flat() { ... }
@mixin card-flat() { border: none; }
Description
Flat variant styles
Parameters
None.
card-landscape
@mixin card-landscape() { ... }
@mixin card-landscape() { display: grid; grid-auto-columns: #{settings.$landscape-grid-base-settings}; grid-template-rows: 1fr min-content; max-width: none; }
Description
Landscape orientation styles
Parameters
None.
Requires
- [variable]
landscape-grid-base-settings
Used by
- [mixin]
generator-landscape
card-landscape-extended
@mixin card-landscape-extended() { ... }
@mixin card-landscape-extended() { grid-auto-columns: #{settings.$landscape-grid-extended-settings}; }
Description
Extended landscape styles for the card
Parameters
None.
Requires
- [variable]
landscape-grid-extended-settings
Used by
- [mixin]
generator-landscape-extended
card-landscape-group
@mixin card-landscape-group() { ... }
@mixin card-landscape-group() { grid-auto-columns: #{settings.$landscape-grid-landscape-group-settings}; }
Description
Extended landscape styles for the card
Parameters
None.
Requires
- [variable]
landscape-grid-landscape-group-settings
card-landscape-extended-large
@mixin card-landscape-extended-large() { ... }
@mixin card-landscape-extended-large() { grid-auto-columns: #{settings.$landscape-grid-extended-settings} #{settings.$actions-landscape-extended-width}; }
Description
Extended landscape large styles for the card
Parameters
None.
Requires
- [variable]
landscape-grid-extended-settings
- [variable]
actions-landscape-extended-width
Used by
- [mixin]
generator-landscape-extended
card-landscape-flat
Kept to avoid breaking change
@mixin card-landscape-flat() { ... }
@mixin card-landscape-flat() { @warn "card-landscape-flat mixin is deprecated"; }
Description
Flat landscape variant styles
Parameters
None.
card-canvas-only
@mixin card-canvas-only() { ... }
@mixin card-canvas-only() { max-width: settings.$max-width; }
card-condensed
@mixin card-condensed() { ... }
@mixin card-condensed() { width: settings.$condensed-width; min-width: settings.$condensed-width; }
Description
Condensed card styles
Parameters
None.
Requires
- [variable]
condensed-width
Used by
- [mixin]
generator-portrait-condensed
canvas
@mixin canvas() { ... }
@mixin canvas() { padding: spacing.get('s2'); display: flex; flex-direction: column; position: relative; justify-content: center; align-items: center; height: max-content; flex: 0 1 auto; max-width: settings.$canvas-max-width; min-width: settings.$canvas-min-width; color: settings.$canvas-text-color; background-color: settings.$canvas-background-color; border-radius: settings.$border-radius-inner settings.$border-radius-inner 0 0; overflow: hidden; > :last-child { padding-bottom: 0; margin-bottom: 0; } }
Description
Canvas styles
Parameters
None.
Requires
- [function]
get
- [variable]
canvas-max-width
- [variable]
canvas-min-width
- [variable]
canvas-text-color
- [variable]
canvas-background-color
- [variable]
border-radius-inner
canvas-flat
@mixin canvas-flat() { ... }
@mixin canvas-flat() { border-radius: settings.$border-radius settings.$border-radius 0 0; }
canvas-landscape
@mixin canvas-landscape() { ... }
@mixin canvas-landscape() { height: auto; grid-column: 1; grid-row: 1 / 3; border-radius: settings.$border-radius-inner 0 0 settings.$border-radius-inner; }
Description
Canvas landscape styles
Parameters
None.
Requires
- [variable]
border-radius-inner
Used by
- [mixin]
generator-landscape
canvas-landscape-flat
@mixin canvas-landscape-flat() { ... }
@mixin canvas-landscape-flat() { border-radius: settings.$border-radius 0 0 settings.$border-radius; }
Description
Canvas landscape styles when parent has no border
Parameters
None.
Requires
- [variable]
border-radius
canvas-landscape-extended
@mixin canvas-landscape-extended() { ... }
@mixin canvas-landscape-extended() { padding: spacing.get('s4'); grid-row: 1; }
Description
Canvas extended landscape styles
Parameters
None.
Requires
- [function]
get
Used by
- [mixin]
generator-landscape-extended
canvas-landscape-extended-medium
@mixin canvas-landscape-extended-medium() { ... }
@mixin canvas-landscape-extended-medium() { grid-row: 1 / 3; }
Description
Canvas extended medium landscape styles
Parameters
None.
Used by
- [mixin]
generator-landscape-extended
canvas-only
@mixin canvas-only() { ... }
@mixin canvas-only() { width: 100%; border-radius: settings.$border-radius-inner; }
canvas-only-flat
@mixin canvas-only-flat() { ... }
@mixin canvas-only-flat() { border-radius: settings.$border-radius; }
Description
Canvas only styles when parent has no border
Parameters
None.
Requires
- [variable]
border-radius
canvas-content
@mixin canvas-content() { ... }
@mixin canvas-content() { padding: spacing.get('s2'); text-align: center; }
overlay
@mixin overlay() { ... }
@mixin overlay() { position: absolute; top: 0; left: 0; width: 100%; height: 100%; background: settings.$canvas-overlay-background; z-index: 2; opacity: settings.$canvas-overlay-opacity; pointer-events: none; }
Description
Overlay over canvas styles
Parameters
None.
Requires
- [variable]
canvas-overlay-background
- [variable]
canvas-overlay-opacity
flag-container
@mixin flag-container() { ... }
@mixin flag-container() { position: absolute; top: 0; left: 0; z-index: 3; }
Description
Flag styles
Parameters
None.
choices
@mixin choices() { ... }
@mixin choices() { display: inline-flex; justify-content: center; width: 100%; text-align: center; color: settings.$canvas-text-color; }
choices-landscape
@mixin choices-landscape() { ... }
@mixin choices-landscape() { padding: spacing.get('s2'); padding-bottom: 0; > :last-child { margin-bottom: 0; } }
Description
More choices available landscape styles
Parameters
None.
Requires
- [function]
get
Used by
- [mixin]
generator-landscape
choices-portrait-spacing
@mixin choices-portrait-spacing() { ... }
@mixin choices-portrait-spacing() { $spacing: if($is-condensed == condensed, settings.$spacing, settings.$spacing-base); margin-top: calc(0.4rem - $spacing); }
Description
More choices available portrait spacing
Parameters
None.
Requires
- [variable]
spacing
- [variable]
spacing-base
content
@mixin content() { ... }
@mixin content() { padding: settings.$spacing-base; display: flex; justify-content: flex-start; align-items: flex-start; flex-grow: 1; flex-direction: column; & > :last-child { margin-bottom: 0; } }
content-landscape
@mixin content-landscape() { ... }
@mixin content-landscape() { padding: settings.$spacing; overflow: hidden; grid-column: 2; grid-row: 1; }
Description
Content landscape styles
Parameters
None.
Requires
- [variable]
spacing
Used by
- [mixin]
generator-landscape
content-landscape-extended
@mixin content-landscape-extended() { ... }
@mixin content-landscape-extended() { padding: settings.$spacing-base; }
Description
Extended landscape styles for content
Parameters
None.
Requires
- [variable]
spacing-base
Used by
- [mixin]
generator-landscape-extended
content-flat
@mixin content-flat() { ... }
@mixin content-flat() { padding-left: 0; padding-right: 0; }
Description
Content flat styles
Parameters
None.
content-bottom
@mixin content-bottom() { ... }
@mixin content-bottom() { margin-top: auto; width: 100%; & > :last-child { margin-bottom: 0; } }
Description
Bottom aligned content styles
Parameters
None.
content-condensed
@mixin content-condensed() { ... }
@mixin content-condensed() { padding: settings.$spacing; }
Description
Condensed content wrapper styles
Parameters
None.
Requires
- [variable]
spacing
Used by
- [mixin]
generator-portrait-condensed
actions
@mixin actions() { ... }
@mixin actions() { padding: 0 settings.$spacing-base settings.$spacing-base; }
actions-condensed
@mixin actions-condensed() { ... }
@mixin actions-condensed() { padding: 0 settings.$spacing settings.$spacing; }
Description
Condensed styles for the actions wrapper
Parameters
None.
Requires
- [variable]
spacing
Used by
- [mixin]
generator-portrait-condensed
actions-landscape
@mixin actions-landscape() { ... }
@mixin actions-landscape() { padding: 0 settings.$spacing settings.$spacing; grid-column: 2; grid-row: 2; }
Description
Landscape styles for the actions wrapper
Parameters
None.
Requires
- [variable]
spacing
Used by
- [mixin]
generator-landscape
actions-landscape-extended
@mixin actions-landscape-extended() { ... }
@mixin actions-landscape-extended() { padding: settings.$spacing-base; grid-column: 1 / 3; }
Description
Extended landscape styles for the actions wrapper
Parameters
None.
Requires
- [variable]
spacing-base
Used by
- [mixin]
generator-landscape-extended
actions-landscape-extended-medium
@mixin actions-landscape-extended-medium() { ... }
@mixin actions-landscape-extended-medium() { grid-column: 2; }
Description
Extended landscape medium styles for the actions wrapper
Parameters
None.
Used by
- [mixin]
generator-landscape-extended
actions-landscape-extended-large
@mixin actions-landscape-extended-large() { ... }
@mixin actions-landscape-extended-large() { padding-left: 0; grid-column: 3; grid-row: 1; }
Description
Extended landscape large styles for the actions wrapper
Parameters
None.
Used by
- [mixin]
generator-landscape-extended
choices-hide
@mixin choices-hide() { ... }
@mixin choices-hide() { display: none; }
Description
Hide choices component styles
Parameters
None.
generator-landscape
@mixin generator-landscape() { ... }
@mixin generator-landscape() { @include card-landscape; #{$parent}__canvas { @include canvas-landscape; } #{$parent}__choices { @include choices-landscape; display: none; &--canvas { display: inline-flex; } } #{$parent}__content { @include content-landscape; } #{$parent}__actions { @include actions-landscape; } }
Description
Change default card into landscape layout
Parameters
None.
Requires
- [mixin]
card-landscape
- [mixin]
canvas-landscape
- [mixin]
choices-landscape
- [mixin]
content-landscape
- [mixin]
actions-landscape
Used by
- [mixin]
generator-landscape-extended
generator-portrait-condensed
@mixin generator-portrait-condensed() { ... }
@mixin generator-portrait-condensed() { @include card-condensed; #{$parent}__content { @include content-condensed; } #{$parent}__actions { @include actions-condensed; } }
Description
Change default card into condensed layout
Parameters
None.
Requires
- [mixin]
card-condensed
- [mixin]
content-condensed
- [mixin]
actions-condensed
generator-landscape-extended
@mixin generator-landscape-extended() { ... }
@mixin generator-landscape-extended() { @include generator-landscape; @include card-landscape-extended; @if $size == large { @include card-landscape-extended-large; } #{$parent}__canvas { @include canvas-landscape-extended; @if $size == medium { @include canvas-landscape-extended-medium; } } #{$parent}__content { @include content-landscape-extended; } #{$parent}__actions { @include actions-landscape-extended; @if $size == medium { @include actions-landscape-extended-medium; } @else if $size == large { @include actions-landscape-extended-large; } } }
Description
Change default card into landscape extended layout
Parameters
None.
Requires
- [mixin]
generator-landscape
- [mixin]
card-landscape-extended
- [mixin]
card-landscape-extended-large
- [mixin]
canvas-landscape-extended
- [mixin]
canvas-landscape-extended-medium
- [mixin]
content-landscape-extended
- [mixin]
actions-landscape-extended
- [mixin]
actions-landscape-extended-medium
- [mixin]
actions-landscape-extended-large
- [variable]
size
Css
/// Change default card into landscape layout @mixin generator-landscape($parent: '.kib-product-card')
/// Change default card into landscape layout @mixin generator-landscape($parent: '.kib-product-card') { ... }
/// Change default card into landscape layout @mixin generator-landscape($parent: '.kib-product-card') { @include card-landscape; #{$parent}__canvas { @include canvas-landscape; } #{$parent}__choices { @include choices-landscape; display: none; &--canvas { display: inline-flex; } } #{$parent}__content { @include content-landscape; } #{$parent}__actions { @include actions-landscape; } }
Description
Product Card Generators Note, the sibling css selector with parent class is needed ex .kib-product-card.custom-css-name Also note that changing $parent will require changes to all sub components within the card
Variables
max-width
$max-width: unit.rem(248px) !default;
Description
Max width of card
Type
Number
min-width
$min-width: unit.rem(200px) !default;
Description
Min width of card
Type
Number
condensed-width
$condensed-width: unit.rem(160px) !default;
Description
Condensed card width
Used by
- [mixin]
card-condensed
canvas-text-color
$canvas-text-color: color.get('text', 'tertiary') !default;
canvas-background-color
$canvas-background-color: color.get('ui-bg', 'primary') !default;
Description
Background color for content in canvas
Type
Color
canvas-max-width
$canvas-max-width: unit.rem(248px) !default;
canvas-min-width
$canvas-min-width: unit.rem(80px) !default;
canvas-overlay-background
$canvas-overlay-background: color.get('static', 'gray1', '900') !default;
canvas-overlay-opacity
$canvas-overlay-opacity: 0.03 !default;
Description
Opacity of the canvas overlay
Type
Number
spacing-base
$spacing-base: spacing.get('s4') !default;
Description
Card base spacing
Type
Number
Used by
- [mixin]
choices-portrait-spacing
- [mixin]
content
- [mixin]
content-landscape-extended
- [mixin]
actions
- [mixin]
actions-landscape-extended
spacing
$spacing: spacing.get('s3') !default;
Description
Margin and padding spacing
Type
Number
landscape-grid-base-settings
$landscape-grid-base-settings: string.unquote('min(24.8rem, max(8rem, 35%)) 1fr') !default;
Description
Landscape base grid settings (sass thinks min
and max
are referring to global sass functions)
Type
String
Used by
- [mixin]
card-landscape
landscape-grid-extended-settings
$landscape-grid-extended-settings: string.unquote('min(18rem, max(8rem, 35%)) 1fr') !default;
Description
Landscape extended grid settings (sass thinks min
and max
are referring to global sass functions)
Type
String
Used by
- [mixin]
card-landscape-extended
- [mixin]
card-landscape-extended-large
landscape-grid-landscape-group-settings
$landscape-grid-landscape-group-settings: string.unquote('min(14rem, max(8rem, 40%)) 1fr') !default;
Description
Landscape group grid settings (sass thinks min
and max
are referring to global sass functions)
Type
String
Used by
- [mixin]
card-landscape-group
actions-landscape-extended-width
$actions-landscape-extended-width: unit.rem(230px) !default;
Description
Landscape extended width for actions
Type
String
Used by
- [mixin]
card-landscape-extended-large
border-radius
$border-radius: card.$border-radius !default;
Description
Default card border-radius
Type
Number
border-radius-inner
$border-radius-inner: $border-radius - card.$border-width !default;
Description
Inner border-radius of card with border
Type
Number
Used by
- [mixin]
canvas
- [mixin]
canvas-landscape
- [mixin]
canvas-only