Layout Grid

Installation

  yarn add @chewy/kib-layout-styles

Import

  @use '~@chewy/kib-layout-styles/src/kib-grid/styles' as kib-grid;

Functions

get-columns

@function get-columns($size) { ... }@function get-columns($size) { 
  $columns: common.get-map-by-key-safe(settings.$columns, $size, 'column');

  @return $columns;
 }
Description

Gets a breakpoint-specific number of columns.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$size

A named breakpoint size.

String none
Returns
Number

Unitless number

Requires

get-gutters

@function get-gutters($size) { ... }@function get-gutters($size) { 
  $gutter: common.get-map-by-key-safe(settings.$gutters, $size, 'gutter');

  @return $gutter;
 }
Description

Gets a breakpoint-specific gutter spacing properties.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$size

A named breakpoint size.

String none
Returns
String

String with CSS var() function with fallback values

Requires

get-column-width

@function get-column-width($span, $size) { ... }@function get-column-width($span, $size) { 
  $columns: if(meta.type-of($size) == string, get-columns($size), $size);
  @return if($span < $columns, math.percentage(math.div($span, $columns)), 100%);
 }
Description

Gets a breakpoint-specific column size.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$span

The number of columns to span.

Number none
$size

A named breakpoint size or number of total columns.

String or Number none
Returns
Number

The column span amount as a percentage.

Requires
Used by

has-min-breakpoint

@function has-min-breakpoint($size) { ... }@function has-min-breakpoint($size) { 
  @return if(common.get-breakpoint-min($size) != 0, true, false);
 }
Description

Returns if a minimum size query is needed.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$size

A named breakpoint size.

String none
Returns
Boolean
Requires

has-max-breakpoint

@function has-max-breakpoint($size) { ... }@function has-max-breakpoint($size) { 
  @return if(common.get-breakpoint-max($size) != null, true, false);
 }
Description

Returns if a maximum size query is needed.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$size

A named breakpoint size.

String none
Returns
Boolean
Requires

Mixins

container-base

@mixin container-base() { ... }@mixin container-base() { 
  box-sizing: border-box;
  display: flex;
  flex: {
    direction: row;
    wrap: wrap;
  }
 }
Description

Base styles for the grid container.

Parameters

None.

container-aligned-left

@mixin container-aligned-left() { ... }@mixin container-aligned-left() { 
  justify-content: flex-start;
 }
Description

Variant styles for the grid container to horizontally align to the left.

Parameters

None.

container-aligned-right

@mixin container-aligned-right() { ... }@mixin container-aligned-right() { 
  justify-content: flex-end;
 }
Description

Variant styles for the grid container to horizontally align to the right.

Parameters

None.

container-aligned-center

@mixin container-aligned-center() { ... }@mixin container-aligned-center() { 
  justify-content: center;
 }
Description

Variant styles for the grid container to horizontally align to the center.

Parameters

None.

container-vertical-aligned-top

@mixin container-vertical-aligned-top() { ... }@mixin container-vertical-aligned-top() { 
  align-items: flex-start;
 }
Description

Variant styles for the grid container to vertically align to the top.

Parameters

None.

container-vertical-aligned-bottom

@mixin container-vertical-aligned-bottom() { ... }@mixin container-vertical-aligned-bottom() { 
  align-items: flex-end;
 }
Description

Variant styles for the grid container to vertically align to the bottom.

Parameters

None.

container-vertical-aligned-center

@mixin container-vertical-aligned-center() { ... }@mixin container-vertical-aligned-center() { 
  align-items: center;
 }
Description

Variant styles for the grid container to vertically align to the center.

Parameters

None.

container-spacing

@mixin container-spacing($gutter, $query) { ... }@mixin container-spacing($gutter, $query) { 
  $formatted-gutter: calc((#{$gutter} * 0.5) * -1);
  @if meta.type-of($gutter) == 'number' {
    // check to avoid breaking change
    $formatted-gutter: unit.rem(($gutter * 0.5)) * -1;
  }

  @if $query {
    @include common.media-query($query) {
      margin: {
        left: $formatted-gutter;
        right: $formatted-gutter;
      }
    }
  } @else {
    margin: {
      left: $formatted-gutter;
      right: $formatted-gutter;
    }
  }
 }
Description

Breakpoint-specific spacing styles for the grid container.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$gutter

Spacing between items as Number or String with CSS var() function with fallback values

Number or String none
$query

(optional) A named breakpoint size.

String none
Requires

generate-container-spacing

@mixin generate-container-spacing() { ... }@mixin generate-container-spacing() { 
  @each $size, $gutter in settings.$gutters {
    @include container-spacing($gutter, min-#{$size});
  }
 }
Description

Generates each breakpoint spacing style for the grid container.

Parameters

None.

Requires

item-base

@mixin item-base() { ... }@mixin item-base() { 
  box-sizing: border-box;
 }
Description

The base styles for a grid item.

Parameters

None.

item-spacing

@mixin item-spacing($gutter, $query) { ... }@mixin item-spacing($gutter, $query) { 
  $horizontal-gutter: calc(#{$gutter} * 0.5);
  $vertical-gutter: $gutter;
  @if meta.type-of($gutter) == 'number' {
    // check to avoid breaking change
    $horizontal-gutter: unit.rem(($gutter * 0.5));
    $vertical-gutter: unit.rem($gutter);
  }

  @if $query {
    @include common.media-query($query) {
      margin: {
        left: $horizontal-gutter;
        right: $horizontal-gutter;
        bottom: $vertical-gutter;
      }
    }
  } @else {
    margin: {
      left: $horizontal-gutter;
      right: $horizontal-gutter;
      bottom: $vertical-gutter;
    }
  }
 }
Description

Breakpoint-specific spacing styles for a grid item.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$gutter

Spacing between items as Number or String with CSS var() function with fallback values

Number or String none
$query

(optional) A named breakpoint size.

String none
Requires
Used by

generate-item-spacing

@mixin generate-item-spacing() { ... }@mixin generate-item-spacing() { 
  @each $size, $gutter in settings.$gutters {
    @include item-spacing($gutter, min-#{$size});
  }
 }
Description

Generates each breakpoint spacing style for a grid item.

Parameters

None.

Requires

item-span-modifier

@mixin item-span-modifier($prefix, $span, $suffix: '', $at) { ... }@mixin item-span-modifier($prefix, $span, $suffix: '', $at) { 
  $selector: '' + $prefix + '-' + $span + $suffix;

  @if $at {
    #{$selector}\@#{$at} {
      @content;
    }
  } @else {
    #{$selector} {
      @content;
    }
  }
 }
Description

Contructs a modifier selector for grid items.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$prefix

Selector prefix.

String none
$span

Number of columns to span.

Number none
$suffix

(Optional) Selector suffix.

String''
$at

(Optional) Media query suffix.

String none

item-span-width

@mixin item-span-width($span, $columns, $gutter) { ... }@mixin item-span-width($span, $columns, $gutter) { 
  $width: functions.get-column-width($span, $columns);
  $formatted-gutter: $gutter;
  @if meta.type-of($gutter) == 'number' {
    // check to avoid breaking change
    $formatted-gutter: unit.rem($gutter);
  }

  width: calc(#{$width} - #{$formatted-gutter});
 }
Description

Column-specific width for a grid item.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$span

Number of columns to span.

Number none
$columns

The total number of columns in the grid.

Number none
$gutter

The gutter amount between columns as Number or String with CSS var() function with fallback values.

Number or String none
Requires
Used by

generate-item-span-width

@mixin generate-item-span-width($span, $size) { ... }@mixin generate-item-span-width($span, $size) { 
  $columns: functions.get-columns($size);
  $gutter: functions.get-gutters($size);

  @include item-span-width($span, $columns, $gutter);
 }
Description

Grid-specific width for a grid item.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$span

Number of columns to span.

Number none
$size

A named breakpoint size.

String none
Requires
Used by

generate-item-spans

@mixin generate-item-spans($size, $prefix, $suffix: '', $at) { ... }@mixin generate-item-spans($size, $prefix, $suffix: '', $at) { 
  @for $i from 1 through functions.get-columns($size) {
    @include item-span-modifier($prefix, $i, $suffix, $at) {
      @include generate-item-span-width($i, $size);
    }
  }
 }
Description

Grid-specific grid item styles.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$size

A named breakpoint size.

String none
$prefix

Selector prefix.

String none
$suffix

(Optional) Selector suffix.

String''
$at

(Optional) Media query suffix.

String none
Requires

generate-breakpoint-item-spans

@mixin generate-breakpoint-item-spans($size, $selector) { ... }@mixin generate-breakpoint-item-spans($size, $selector) { 
  $has-min: functions.has-min-breakpoint($size);
  $has-max: functions.has-max-breakpoint($size);
  $min-size: min-#{$size};
  @if $has-min {
    // Min
    @include common.media-query($min-size) {
      @include generate-item-spans($size, $selector, $at: $min-size);
    }

    // Only
    @include common.media-query($size) {
      @include generate-item-spans($size, $selector, $at: $size);
    }
  } @else {
    // Min
    @include generate-item-spans($size, $selector, $at: $min-size);
  }

  @if $has-max {
    $max-size: max-#{$size};
    @include common.media-query($max-size) {
      @if not $has-min {
        // Only
        @include generate-item-spans($size, $selector, $at: $size);
      }

      // Max
      @include generate-item-spans($size, $selector, $at: $max-size);
    }
  }
 }
Description

Breakpoint-specific grid item styles.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$size

A named breakpoint size.

String none
$selector

Selector to generate classnames from.

String none
Requires

generate-all-item-spans

@mixin generate-all-item-spans($selector) { ... }@mixin generate-all-item-spans($selector) { 
  @each $size in common.get-breakpoint-sizes() {
    @include generate-breakpoint-item-spans($size, $selector);
  }
 }
Description

Generates grid item styles for all breakpoints.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$selector

Selector to generate classnames from.

String none
Requires

item-offset-margin

@mixin item-offset-margin($span, $columns, $gutter, $direction: 'left') { ... }@mixin item-offset-margin($span, $columns, $gutter, $direction: 'left') { 
  $width: functions.get-column-width($span, $columns);
  $formatted-gutter: calc(#{$gutter} * 0.5);
  @if meta.type-of($gutter) == 'number' {
    // check to avoid breaking change
    $formatted-gutter: unit.rem($gutter * 0.5);
  }

  margin-#{$direction}: calc(#{$width} + #{$formatted-gutter});
 }
Description

Column-specific offset margin for a grid item.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$span

Number of columns to offset.

Number none
$columns

The total number of columns in the grid.

Number none
$gutter

The gutter amount between columns as Number or String with CSS var() function with fallback values.

Number or String none
$direction

(optional) Direction to offset, left or right. Default is left.

String'left'
Requires

generate-item-offset-margin

@mixin generate-item-offset-margin($span, $size, $direction: 'left') { ... }@mixin generate-item-offset-margin($span, $size, $direction: 'left') { 
  $columns: functions.get-columns($size);
  $gutter: functions.get-gutters($size);

  @include item-offset-margin($span, $columns, $gutter, $direction);
 }
Description

Grid-specific offset margin for a grid item.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$span

Number of columns to offset.

Number none
$size

A named breakpoint size.

String none
$direction

(optional) Direction to offset, left or right. Default is left.

String'left'
Requires
Used by

generate-item-offsets

@mixin generate-item-offsets($size, $prefix, $direction: 'left', $suffix: '', $at) { ... }@mixin generate-item-offsets($size, $prefix, $direction: 'left', $suffix: '', $at) { 
  @for $i from 1 through functions.get-columns($size) {
    @include item-span-modifier($prefix, $i, $suffix, $at) {
      @include generate-item-offset-margin($i, $size, $direction);
    }
  }
 }
Description

Grid-specific grid item offset styles.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$size

A named breakpoint size.

String none
$prefix

Selector prefix.

String none
$direction

(optional) Direction to offset, left or right. Default is left.

String'left'
$suffix

(optional) Selector suffix.

String''
$at

(optional) Media query suffix.

String none
Requires

generate-breakpoint-item-offsets

@mixin generate-breakpoint-item-offsets($size, $selector, $direction: 'left') { ... }@mixin generate-breakpoint-item-offsets($size, $selector, $direction: 'left') { 
  $has-min: functions.has-min-breakpoint($size);
  $has-max: functions.has-max-breakpoint($size);
  $min-size: min-#{$size};
  @if $has-min {
    // Min
    @include common.media-query($min-size) {
      @include generate-item-offsets($size, $selector, $direction, $at: $min-size);
    }

    // Only
    @include common.media-query($size) {
      @include generate-item-offsets($size, $selector, $direction, $at: $size);
    }
  } @else {
    // Min
    @include generate-item-offsets($size, $selector, $direction, $at: $min-size);
  }

  @if $has-max {
    $max-size: max-#{$size};
    @include common.media-query($max-size) {
      @if not $has-min {
        // Only
        @include generate-item-offsets($size, $selector, $direction, $at: $size);
      }

      // Max
      @include generate-item-offsets($size, $selector, $direction, $at: $max-size);
    }
  }
 }
Description

Breakpoint-specific grid item styles.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$size

A named breakpoint size.

String none
$selector

Selector to generate classnames from.

String none
$direction

(optional) Direction to offset, left or right. Default is left.

String'left'
Requires

generate-all-item-offsets

@mixin generate-all-item-offsets($selector, $direction) { ... }@mixin generate-all-item-offsets($selector, $direction) { 
  @each $size in common.get-breakpoint-sizes() {
    @include generate-breakpoint-item-offsets($size, $selector, $direction);
  }
 }
Description

Generates grid item styles for all breakpoints.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$selector

Selector to generate classnames from.

String none
$direction

(optional) Direction to offset, left or right. Default is left.

String none
Requires

generate-item-ordering

@mixin generate-item-ordering($size, $prefix, $suffix: '', $at) { ... }@mixin generate-item-ordering($size, $prefix, $suffix: '', $at) { 
  $columns: functions.get-columns($size);
  @include item-span-modifier($prefix, 'first', $suffix, $at) {
    order: -1;
  }
  @for $i from 0 through $columns {
    @include item-span-modifier($prefix, $i, $suffix, $at) {
      order: $i;
    }
  }
  @include item-span-modifier($prefix, 'last', $suffix, $at) {
    order: $columns + 1;
  }
 }
Description

Grid-specific grid item ordering styles.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$size

A named breakpoint size.

String none
$prefix

Selector prefix.

String none
$suffix

(Optional) Selector suffix.

String''
$at

(Optional) Media query suffix.

String none
Requires

generate-breakpoint-item-ordering

@mixin generate-breakpoint-item-ordering($size, $selector) { ... }@mixin generate-breakpoint-item-ordering($size, $selector) { 
  $has-min: functions.has-min-breakpoint($size);
  $has-max: functions.has-max-breakpoint($size);
  $min-size: min-#{$size};
  @if $has-min {
    // Min
    @include common.media-query($min-size) {
      @include generate-item-ordering($size, $selector, $at: $min-size);
    }

    // Only
    @include common.media-query($size) {
      @include generate-item-ordering($size, $selector, $at: $size);
    }
  } @else {
    // Min
    @include generate-item-ordering($size, $selector, $at: $min-size);
  }

  @if $has-max {
    $max-size: max-#{$size};
    @include common.media-query($max-size) {
      @if not $has-min {
        // Only
        @include generate-item-ordering($size, $selector, $at: $size);
      }

      // Max
      @include generate-item-ordering($size, $selector, $at: $max-size);
    }
  }
 }
Description

Breakpoint-specific grid item order styles.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$size

A named breakpoint size.

String none
$selector

Selector to generate classnames from.

String none
Requires

generate-all-item-ordering

@mixin generate-all-item-ordering($selector) { ... }@mixin generate-all-item-ordering($selector) { 
  @each $size in common.get-breakpoint-sizes() {
    @include generate-breakpoint-item-ordering($size, $selector);
  }
 }
Description

Generated grid item order styles for all breakpoints.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$selector

Selector to generate classnames from.

String none
Requires

item-span

@mixin item-span($span, $query, $columns) { ... }@mixin item-span($span, $query, $columns) { 
  $size: common.get-root-size($query);
  $total-columns: if($columns != null, $columns, functions.get-columns($size));
  $gutter: functions.get-gutters($size);

  @include common.media-query($query) {
    @include item-span-width($span, $total-columns, $gutter);
  }
 }
Description

Column-specific width styles for a grid item.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$span

Number of columns to span.

Number none
$query

A named breakpoint size. This may include a min- and max- prefix as modifiers.

String none
$columns

(optional) Override total number of columns in the grid.

Number none
Requires

item-offset

@mixin item-offset($span, $query, $direction: 'left', $columns) { ... }@mixin item-offset($span, $query, $direction: 'left', $columns) { 
  $size: common.get-root-size($query);
  $total-columns: if($columns != null, $columns, functions.get-columns($size));
  $gutter: functions.get-gutters($size);

  @include common.media-query($query) {
    @include item-offset-margin($span, $total-columns, $gutter, $direction);
  }
 }
Description

Column-specific offset styles for a grid item.

Parameters
Parameters
parameter Nameparameter Descriptionparameter Typeparameter Default value
$span

Number of columns to offset.

Number none
$query

A named breakpoint size. This may include a min- and max- prefix as modifiers.

String none
$direction

(optional) Direction to offset, left or right. Default is left.

String'left'
$columns

(optional) Override total number of columns in the grid.

Number none
Requires

Variables

columns

$columns: (...) !default;$columns: (
  xs: 4,
  sm: 4,
  md: 8,
  lg: 12,
  xl: 12
) !default;
Description

Defines the number of columns for each breakpoint

Type

Map

gutters

$gutters: (...) !default;$gutters: (
  xs: spacing.get('s4'),
  sm: spacing.get('s4'),
  md: spacing.get('s4'),
  lg: spacing.get('s4'),
  xl: spacing.get('s4')
) !default;
Description

Defines the spacing properties, between columns, for each breakpoint

Type

Map