DEV Community

Cover image for How Sass Maps Work
Athreya aka Maneshwar
Athreya aka Maneshwar

Posted on

How Sass Maps Work

Sass maps are powerful tools for organizing data in SCSS, helps to manage breakpoints for responsive designs.

Here’s a dive into how these maps work, focusing on the $break-devices map and its utility.


1. Extracting Breakpoint Values with Functions

The break-select-device function navigates the $break-devices map to extract breakpoint values for a specified device.

@function break-select-device($device) {
  $current: $break-devices;
  @for $n from 1 through length($device) {
    @if type-of($current) == map {
      $current: map.get($current, list.nth($device, $n));
    } @else {
      @error "Invalid device map: #{$device}";
    }
  }
  @return $current;
}
Enter fullscreen mode Exit fullscreen mode
  • Key Mechanisms:
    • @for Loop: Traverses the hierarchy to find the correct device and its breakpoints.
    • Error Handling: Stops execution if the provided device is invalid.
    • map.get: Extracts values at each level of the hierarchy.

2. Generating Media Queries with Mixins

The break-from-device and break-to-device mixins utilize the extracted breakpoints to dynamically generate media queries.

@mixin break-from-device($device) {
  @if type-of($device) == list {
    $breakpoint: break-select-device($device);
    $min: list.nth($breakpoint, 1);

    @media screen and (min-width: $min) {
      @content;
    }
  }
}

@mixin break-to-device($device) {
  @if type-of($device) == list {
    $breakpoint: break-select-device($device);
    $max: list.nth($breakpoint, 2);

    @media screen and (max-width: $max) {
      @content;
    }
  }
}
Enter fullscreen mode Exit fullscreen mode

These mixins streamline responsive design by abstracting complex logic into reusable SCSS blocks.


Example Applications in Light and Dark Themes

Light Theme: Mobile Devices

Targeting mobile portrait devices to adjust background and font size for better readability:

@include break-from-device(mobile portrait) {
  body {
    background-color: #ffffff;
    color: #333;
    font-size: 14px;
  }
}
Enter fullscreen mode Exit fullscreen mode

Generated Media Query:

@media screen and (min-width: 220px) {
  body {
    background-color: #ffffff;
    color: #333;
    font-size: 14px;
  }
}
Enter fullscreen mode Exit fullscreen mode

Dark Theme: Tablet Landscape

Hiding the sidebar for tablets in landscape mode to optimize screen space:

@include break-to-device(tablet landscape) {
  .sidebar {
    display: none;
    background-color: #121212;
  }
}
Enter fullscreen mode Exit fullscreen mode

Generated Media Query:

@media screen and (max-width: 1219px) {
  .sidebar {
    display: none;
    background-color: #121212;
  }
}
Enter fullscreen mode Exit fullscreen mode

Final Thoughts

Sass maps and mixins like these enable clean, scalable, and maintainable responsive design workflows.

While exploring their implementation, I've been learning how to adapt these techniques for LiveAPI, a product I've been passionately working on for quite a while.

If you're curious about Sass maps or want to learn more about LiveAPI, feel free to check it out.

And don’t forget to follow me for tomorrow's in-depth analysis of Sass maps, where we’ll dissect their design architecture and advanced use cases.

Checkout:

Top comments (0)