Hero Carousel
Installation
yarn add @chewy/kib-carousels-styles
Import
@use '~@chewy/kib-carousels-styles/src/kib-hero-carousel/styles' as kib-hero-carousel;
Mixins
root-container
@mixin root-container() { ... }
@mixin root-container() { position: relative; max-width: settings.$max-width; margin: 0 auto; --pagination-timer-animation-play-state: running; }
variation
@mixin variation() { ... }
@mixin variation() { // nav mixin --nav-background: #{settings.$nav-background}; --nav-border-top-left-radius: #{settings.$nav-border-radius}; --nav-border-top-right-radius: #{settings.$nav-border-radius}; --nav-align-items: inherit; --nav-gap: inherit; --nav-width: inherit; --nav-justify-content: inherit; // nav-button mixin --nav-button-width: #{settings.$pagination-button-size}; --nav-button-height: #{settings.$pagination-button-size}; // pagination mixin --pagination-justify-content: inherit; --pagination-gap: inherit; // pagination-button mixin --pagination-button-padding-left: #{spacing.get('s1')}; --pagination-button-padding-right: #{spacing.get('s1')}; --pagination-button-width: #{settings.$pagination-button-size}; --pagination-button-height: #{settings.$pagination-button-size}; --pagination-button-border-focus: #{settings.$emphasis-size solid settings.$emphasis-outer-color}; --pagination-button-box-shadow-focus: #{inset 0 0 0 settings.$emphasis-size settings.$emphasis-inner-color}; --pagination-button-tab-highlight-color: inherit; // pagination-button mixin: dot-element --pagination-button-dot-element-bg: transparent; --pagination-button-dot-element-height: #{settings.$pagination-dot-size}; --pagination-button-dot-element-border-radius: 50%; --pagination-button-dot-element-width: #{settings.$pagination-dot-size}; --pagination-button-dot-element-border: #{settings.$pagination-dot-border-width} solid #{settings.$pagination-dot-border-color}; --pagination-button-dot-element-transition: inherit; // pagination-button-active mixin --pagination-button-active-bg: #{settings.$pagination-dot-active-background-color}; --pagination-button-active-bg-size: inherit; --pagination-button-active-bg-position: inherit; @if $variation == 'modern' { @include variation-modern; } }
Description
Hero carousel variation styles
Parameters
None.
Requires
- [mixin]
variation-modern
- [function]
get
- [variable]
nav-background
- [variable]
nav-border-radius
- [variable]
pagination-button-size
- [variable]
emphasis-size
- [variable]
emphasis-outer-color
- [variable]
emphasis-inner-color
- [variable]
pagination-dot-size
- [variable]
pagination-dot-border-width
- [variable]
pagination-dot-border-color
- [variable]
pagination-dot-active-background-color
variation-modern
@mixin variation-modern() { ... }
@mixin variation-modern() { // nav mixin #{settings.$nav-background}; --nav-background: transparent; --nav-border-top-left-radius: #{settings.$nav-border-radius}; --nav-border-top-right-radius: #{settings.$nav-border-radius}; --nav-align-items: center; --nav-gap: #{settings.$variation-modern-nav-button-gap}; --nav-width: 100%; --nav-justify-content: center; // nav-button mixin --nav-button-width: #{settings.$variation-modern-nav-button-size}; --nav-button-height: #{settings.$variation-modern-nav-button-size}; // pagination mixin --pagination-justify-content: flex-end; --pagination-gap: #{settings.$variation-modern-pagination-button-gap}; // pagination-button mixin --pagination-button-padding-left: inherit; --pagination-button-padding-right: inherit; --pagination-button-width: min(100%, #{settings.$variation-modern-pagination-button-width}); --pagination-button-height: #{settings.$variation-modern-pagination-button-tap-height}; --pagination-button-border-focus: 0; --pagination-button-box-shadow-focus: none; --pagination-button-tab-highlight-color: transparent; // pagination-button mixin: dot-element --pagination-button-dot-element-bg: #{settings.$variation-modern-pagination-dot-background-color}; --pagination-button-dot-element-height: #{settings.$variation-modern-pagination-dot-height}; --pagination-button-dot-element-border-radius: #{settings.$variation-modern-pagination-dot-border-radius}; --pagination-button-dot-element-width: inherit; --pagination-button-dot-element-border: inherit; --pagination-button-dot-element-transition: border-color 200ms; // pagination-button-active mixin --pagination-button-active-bg: linear-gradient( to right, white 50%, #{settings.$variation-modern-pagination-dot-background-color} 0 ); // linear-gradient(to right, white 50%, settings.$pagination-dot-background-color 0); --pagination-button-active-bg-size: 200% 100%; --pagination-button-active-bg-position: right; }
Description
Hero carousel variation modern styles
Parameters
None.
Requires
- [variable]
nav-background
- [variable]
nav-border-radius
- [variable]
variation-modern-nav-button-gap
- [variable]
variation-modern-nav-button-size
- [variable]
variation-modern-pagination-button-gap
- [variable]
variation-modern-pagination-button-width
- [variable]
variation-modern-pagination-button-tap-height
- [variable]
variation-modern-pagination-dot-background-color
- [variable]
variation-modern-pagination-dot-height
- [variable]
variation-modern-pagination-dot-border-radius
- [variable]
pagination-dot-background-color
Used by
- [mixin]
variation
container
@mixin container() { ... }
@mixin container() { position: relative; display: block; margin-left: auto; margin-right: auto; width: 100%; min-height: settings.$min-height; overflow: hidden; }
slides-container
@mixin slides-container() { ... }
@mixin slides-container() { display: flex; overflow: hidden; list-style: none; }
Description
Hero carousel slides container
Parameters
None.
slide
@mixin slide() { ... }
@mixin slide() { margin: 0; position: absolute; top: 0; left: 0; width: 100%; height: 100%; backface-visibility: hidden; > :last-child { margin-bottom: 0; } &:focus { position: absolute; &::after { $distance: settings.$emphasis-size * -2; position: absolute; top: $distance; left: $distance; right: $distance; bottom: $distance; border: settings.$emphasis-size solid settings.$emphasis-outer-color; box-shadow: inset 0 0 0 settings.$emphasis-size settings.$emphasis-inner-color; content: ''; } } }
Description
Hero carousel slide element
Parameters
None.
Requires
- [variable]
emphasis-size
- [variable]
emphasis-outer-color
- [variable]
emphasis-inner-color
slide-hide
@mixin slide-hide() { ... }
@mixin slide-hide() { display: none; }
Description
Hero carousel slide hidden
Parameters
None.
nav
@mixin nav() { ... }
@mixin nav() { padding-left: spacing.get('s1'); padding-right: spacing.get('s1'); position: absolute; left: 50%; bottom: 0; z-index: 2; transform: translateX(-50%); display: flex; background: var(--nav-background); border-top-left-radius: var(--nav-border-top-left-radius); border-top-right-radius: var(--nav-border-top-right-radius); // variation: modern align-items: var(--nav-align-items); gap: var(--nav-gap); width: var(--nav-width); justify-content: var(--nav-justify-content); }
nav-button
@mixin nav-button() { ... }
@mixin nav-button() { padding: 0; position: relative; width: var(--nav-button-width); height: var(--nav-button-height); appearance: none; background-color: transparent; border: 0; color: settings.$pagination-button-text-color; cursor: pointer; &:focus { position: relative; &:focus-visible { outline: none; } &::after { $distance: settings.$emphasis-size * -2; position: absolute; top: $distance; left: $distance; right: $distance; bottom: $distance; border: var(--pagination-button-border-focus); box-shadow: var(--pagination-button-box-shadow-focus); content: ''; } } }
Description
Hero carousel navigation button
Parameters
None.
Requires
- [variable]
pagination-button-text-color
- [variable]
emphasis-size
Used by
- [mixin]
pause
- [mixin]
pagination-button
pause
@mixin pause() { ... }
@mixin pause() { @include nav-button; -webkit-tap-highlight-color: var(--pagination-button-tab-highlight-color); }
pagination
@mixin pagination() { ... }
@mixin pagination() { padding: 0; display: flex; align-items: center; justify-content: var(--pagination-justify-content); gap: var(--pagination-gap); &:focus-within { --pagination-timer-animation-play-state: paused; } }
Description
Hero carousel pagination container
Parameters
None.
pagination-button
@mixin pagination-button() { ... }
@mixin pagination-button() { @include nav-button; padding-left: var(--pagination-button-padding-left); padding-right: var(--pagination-button-padding-right); width: var(--pagination-button-width); height: var(--pagination-button-height); -webkit-tap-highlight-color: var(--pagination-button-tab-highlight-color); // Pagination dot element &::before { position: relative; display: block; background-color: var(--pagination-button-dot-element-bg); height: var(--pagination-button-dot-element-height); border-radius: var(--pagination-button-dot-element-border-radius); width: var(--pagination-button-dot-element-width); border: var(--pagination-button-dot-element-border); transition: var(--pagination-button-dot-element-transition); content: ''; } }
pagination-button-active
@mixin pagination-button-active() { ... }
@mixin pagination-button-active() { -webkit-tap-highlight-color: var(--pagination-button-tab-highlight-color); &::before { background: var(--pagination-button-active-bg); background-size: var(--pagination-button-active-bg-size); background-position: var(--pagination-button-active-bg-position); // modern variation: animation settings animation-name: kib-hero-carousel-pagination-button-timer-bar; animation-timing-function: linear; animation-duration: var(--slide-duration); animation-play-state: var(--pagination-timer-animation-play-state); @media screen and (prefers-reduced-motion: reduce) { animation: none; } @media (forced-colors: active) { background-color: Highlight; } } }
Description
Hero carousel button dot active
Parameters
None.
control-icon
@mixin control-icon() { ... }
@mixin control-icon() { @include common.chip-icon-styles('transparent'); pointer-events: none; }
Description
Hero arrow control icons
Parameters
None.
slide-vue-transition
@mixin slide-vue-transition() { ... }
@mixin slide-vue-transition() { transition: transform settings.$slide-transition-duration settings.$slide-transition-timing; @media screen and (prefers-reduced-motion: reduce) { transition: none; } }
Description
Custom slide vue transition for <transition />
component
Parameters
None.
Requires
- [variable]
slide-transition-duration
- [variable]
slide-transition-timing
slide-vue-transition-translation
@mixin slide-vue-transition-translation($reverse) { ... }
@mixin slide-vue-transition-translation($reverse) { @if $reverse { transform: translateX(-100%); } @else { transform: translateX(100%); } }
Description
Custom slide vue transition translation directions
Parameters
parameter Name | parameter Description | parameter Type | parameter Default value |
---|---|---|---|
$reverse | Direction of transition | Boolean | — none |
slide-react-transition
@mixin slide-react-transition() { ... }
@mixin slide-react-transition() { animation: settings.$slide-transition-timing; @if $leave { @if $reverse { animation-name: kib-hero-carousel-leave-left; } @else { animation-name: kib-hero-carousel-leave-right; } animation-duration: settings.$slide-transition-duration * 2; } @else { @if $reverse { animation-name: kib-hero-carousel-left; } @else { animation-name: kib-hero-carousel-right; } animation-duration: settings.$slide-transition-duration * 1; animation-fill-mode: forwards; } }
Description
Custom slide React transition
Parameters
None.
Requires
- [variable]
slide-transition-timing
- [variable]
slide-transition-duration
Variables
max-width
$max-width: unit.rem(1440px) !default;
Description
Hero control maximum width
Type
Number
min-height
$min-height: unit.rem(296px) !default;
Description
Component minimum height
Type
Number
Used by
- [mixin]
container
- [mixin]
root-container
- [mixin]
card-root
- [mixin]
root-container
emphasis-size
$emphasis-size: unit.rem(2px) !default;
Description
Common focus ring border width
Type
Number
Used by
- [mixin]
variation
- [mixin]
slide
- [mixin]
nav-button
emphasis-outer-color
$emphasis-outer-color: color.get('action', 'cta', 'primary', 'primary') !default;
emphasis-inner-color
$emphasis-inner-color: color.get('action', 'cta', 'alternate', 'primary') !default;
nav-background
$nav-background: color.get('static', 'gray1', '900a50') !default;
nav-border-radius
$nav-border-radius: kib-core.dimensions-get('small') !default;
pagination-button-text-color
$pagination-button-text-color: color.get('ui-bg', 'primary') !default;
pagination-button-size
$pagination-button-size: kib-core.dimensions-get('default') !default;
pagination-dot-background-color
$pagination-dot-background-color: transparent !default;
pagination-dot-border-color
$pagination-dot-border-color: $pagination-button-text-color !default;
pagination-dot-border-width
$pagination-dot-border-width: unit.rem(1px) !default;
pagination-dot-active-background-color
$pagination-dot-active-background-color: $pagination-dot-border-color !default;
pagination-dot-size
$pagination-dot-size: kib-core.dimensions-get('small') !default;
control-size
$control-size: unit.rem(36px) !default;
Type
Number
control-offset
$control-offset: spacing.get('s6') !default;
Type
Number
slide-transition-duration
$slide-transition-duration: 600ms !default;
Description
Hero slide transition duration
Type
Number
Used by
- [mixin]
slide-vue-transition
- [mixin]
slide-react-transition
slide-transition-timing
$slide-transition-timing: ease-in-out !default;
Description
Hero slide transition timing function
Type
String
Used by
- [mixin]
slide-vue-transition
- [mixin]
slide-react-transition
variation-modern-nav-background
$variation-modern-nav-background: linear-gradient(
180deg,
rgba(0, 0, 0, 0) 0%,
rgba(0, 0, 0, 0.2) 100%
) !default;
Description
Hero nav background color
Type
Color
variation-modern-nav-button-size
$variation-modern-nav-button-size: unit.rem(18px) !default;
variation-modern-nav-button-gap
$variation-modern-nav-button-gap: spacing.get(s2) !default;
variation-modern-pagination-container-size
$variation-modern-pagination-container-size: unit.rem(258) !default;
Description
Hero pagination container size
Type
Number
variation-modern-pagination-button-width
$variation-modern-pagination-button-width: unit.rem(60px) !default;
variation-modern-pagination-button-tap-height
$variation-modern-pagination-button-tap-height: unit.rem(28px) !default;
variation-modern-pagination-button-gap
$variation-modern-pagination-button-gap: spacing.get('s1') !default;
variation-modern-pagination-margin-bottom
$variation-modern-pagination-margin-bottom: calc(math.div(spacing.get('s1'), 2)) !default;
Description
Hero pagination button margin bottom
Type
Number
variation-modern-pagination-border-radius
$variation-modern-pagination-border-radius: unit.rem(1px) !default;
Description
Hero pagination button border radius
Type
Number
variation-modern-pagination-padding
$variation-modern-pagination-padding: unit.rem(1px) !default;
Description
Hero pagination button padding
Type
Number
variation-modern-pagination-box-shadow
$variation-modern-pagination-box-shadow: 0 0 0 1px color.get('action', 'switch', 'foreground'),
0 0 0 2px color.get('ui-bg', 'brand', 'primary');
Description
Hero pagination button box-shadow
Type
Number
variation-modern-pagination-dot-background-color
$variation-modern-pagination-dot-background-color: rgba(white, 0.6) !default;
variation-modern-pagination-dot-border-radius
$variation-modern-pagination-dot-border-radius: spacing.get(s5) !default;
variation-modern-pagination-dot-width
$variation-modern-pagination-dot-width: unit.rem(60px) !default;
Description
Hero btn dot width
Type
Number
variation-modern-pagination-dot-height
$variation-modern-pagination-dot-height: spacing.get(s1) !default;