DEV Community

Cover image for My favorite tricks with Sass
Basile Bong
Basile Bong

Posted on Edited on Originally published at basilebong.com

My favorite tricks with Sass

1. Dynamically create component variants based on theme colors

// Create a map containing all the important colors
$theme-colors: (
  "danger": #ff0000,
  "success": #00ff00,
  "info": #0000ff,
) !default;

// Loop through the map to create a variant per color
.button {
  // ...

  @each $colorName, $color in $theme-colors {
    &--#{$colorName} {
      background: $color;
      // ...
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

CSS result

.button--danger {
  background: #ff0000;
}

.button--success {
  background: #00ff00;
}

.button--info {
  background: #0000ff;
}
Enter fullscreen mode Exit fullscreen mode

2. Pick the right text color automatically

@function text-color($color) {
  @if (lightness($color) > 40) {
    @return #000;
  } @else {
    @return #fff;
  }
}

// Use the function anywhere
.button--primary {
  background: #ff0000;
  color: text-color(#ff0000);
}
Enter fullscreen mode Exit fullscreen mode

CSS result

.button--primary {
  background: #ff0000;
  color: black;
}
Enter fullscreen mode Exit fullscreen mode

3. Simplify the use of breakpoints

// Create a map containing your breakpoints
$breakpoints: (
  "sm": 576px,
  "md": 768px,
  "lg": 992px,
  "xl": 1200px,
) !default;

// Create a mixin to simplify the use of the breakpoints
@mixin breakpoint-down($screen-size) {
  $breakpoint-size: map-get(
    $map: $breakpoints,
    $key: $screen-size,
  );

  @media (max-width: $breakpoint-size) {
    @content;
  }
}

// Use the breakpoints anywhere
.square {
  width: 100px;
  @include breakpoint-down(sm) {
    width: 50px;
  }
}
Enter fullscreen mode Exit fullscreen mode

CSS result

.square {
  width: 100px;
}

@media (max-width: 576px) {
  .square {
    width: 50px;
  }
}
Enter fullscreen mode Exit fullscreen mode

4. Simplify the use of spacers

// Create a map containing you spacings
// Name them from 0 to n
$spacers: (
  0: 0,
  1: 0.5rem,
  2: 1rem,
  3: 1.5rem,
  4: 2rem,
  5: 3rem,
) !default;

// Create a function to simplify the use of the spacers
@function getSpace($space) {
  @return map-get($map: $spacers, $key: $space);
}

// Use the function anywhere
.square {
  margin-top: getSpace(0);
  margin-bottom: getSpace(5);
}
Enter fullscreen mode Exit fullscreen mode

CSS result

.square {
  margin-top: 0;
  margin-bottom: 3rem;
}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)