@use 'sass:math'; @use "../spacing" as *; @mixin no-margin($selectors) { #{$selectors} { margin: 0; } } @mixin no-padding($selectors) { #{$selectors} { padding: 0; } } @mixin left-padding($selectors, $horizontal-spacing) { #{$selectors} { padding-inline-start: $horizontal-spacing; } } @mixin bottom-margin($selectors, $vertical-spacing) { #{$selectors} { &:not(:last-child) { margin-bottom: $vertical-spacing; } } } @mixin apply-uniform-vertical-spacing { /* Reset default top/bottom margins added by browser. */ @include no-margin('p'); @include no-margin('h1, h2, h3, h4, h5, h6'); @include no-margin('blockquote'); @include no-margin('pre'); @include no-margin('hr'); @include no-margin('ul, ol'); /* Add spacing between elements using `margin-bottom` only (bottom-up instead of top-down strategy). */ @include bottom-margin('p', $spacing-relative-medium); @include bottom-margin('li > p', $spacing-relative-small); // Reduce margin for paragraphs directly within list items to visually group related content. @include bottom-margin('h1, h2, h3, h4, h5, h6', $spacing-relative-small); @include bottom-margin('ul, ol', $spacing-relative-medium); @include bottom-margin('li', $spacing-relative-small); @include bottom-margin('table', $spacing-relative-medium); @include bottom-margin('blockquote', $spacing-relative-medium); @include bottom-margin('pre', $spacing-relative-medium); @include bottom-margin('article', $spacing-relative-medium); @include bottom-margin('hr', $spacing-relative-medium); } @mixin apply-uniform-horizontal-spacing { /* Reset default left/right paddings added by browser. */ @include no-padding('ul, ol'); /* Add spacing for list items. */ @include left-padding('ul, ol', $spacing-relative-large); } @mixin apply-uniform-spacing { @include apply-uniform-vertical-spacing; @include apply-uniform-horizontal-spacing; }