SASS Built-in Modules

SASS Built-in Modules

This article explains SASS built-in modules.

We cover SASS's built-in modules step by step, from basics to advanced usage.

YouTube Video

SASS Built-in Modules

SASS provides a variety of built-in modules, and using them makes stylesheet authoring even more efficient.

What are SASS's built-in modules?

SASS's built-in modules are modules that provide reusable functions and mixins. Using them makes complex calculations and creating custom styles easier.

The main built-in modules include the following:.

  • sass:color
  • sass:string
  • sass:math
  • sass:list
  • sass:map
  • sass:selector
  • sass:meta

Each module includes features to streamline specific tasks.

Details and examples of each module

The sass:color module

The sass:color module provides functions that make color manipulation easy.

Main functions
  • mix(): Mix two colors
  • adjust(): Adjust hue, lightness, saturation, and other properties together
Usage example
 1@use "sass:color";
 2
 3$primary-color: #3498db;
 4$secondary-color: #e74c3c;
 5
 6// Mix two colors with equal weight
 7$blended-color: color.mix($primary-color, $secondary-color, 50%);
 8
 9// Adjust hue by 45 degrees using color.adjust()
10$adjusted-color: color.adjust($primary-color, $hue: 45deg);
11
12div {
13  background-color: $blended-color; // Result of mixing two colors
14  border-color: $adjusted-color;    // Hue adjusted by 45 degrees
15}
  • This code generates a new color by mixing two colors and another color with an adjusted hue. The generated colors are applied to elements as background and border colors. This example helps you understand the basics of color manipulation.

The sass:string module

The sass:string module provides functions useful for string manipulation.

Main functions
  • quote(), unquote(): Quote or unquote a string
  • length(): Get the length of a string
  • to-upper-case(), to-lower-case(): Convert a string to upper or lower case
Usage example
 1@use "sass:string";
 2
 3// base values
 4$base-url: "https://example.com";
 5$path: "/assets/style.css";
 6
 7// 1) Combine strings using interpolation and then quote the result
 8$full-quoted: string.quote("#{$base-url}#{$path}");
 9// Example result: "\"https://example.com/assets/style.css\""
10
11// 2) Remove quotes from a quoted string
12$full-unquoted: string.unquote($full-quoted);
13// Example result: https://example.com/assets/style.css
14
15// 3) Get the length of the unquoted string
16$url-length: string.length($full-unquoted);
17// Example output: number of characters in the URL
18
19// 4) Convert strings to upper/lower case and quote for safe CSS output
20$block-name: "main-header";
21// "MAIN-HEADER"
22$upper-quoted: string.quote(string.to-upper-case($block-name));
23// "main-footer"
24$lower-quoted: string.quote(string.to-lower-case("MAIN-FOOTER"));
25
26a::after {
27  /* Use quoted strings for content to ensure valid CSS */
28  content: $full-quoted; /* "https://example.com/assets/style.css" */
29}
30
31:root {
32  /* Insert numeric values with interpolation when needed */
33  --url-length: #{ $url-length }; /* Example: --url-length: 31; */
34}
35
36.header::before {
37  /* Output uppercase version */
38  content: $upper-quoted; /* "MAIN-HEADER" */
39}
40
41.footer::after {
42  /* Output lowercase version */
43  content: $lower-quoted; /* "main-footer" */
44}
  • Using string.quote() and string.unquote() lets you precisely control string representations in the output CSS. string.length() is a function that gets the length of a string. string.to-upper-case() / string.to-lower-case() are handy for generating class names and formatting BEM names.

The sass:math module

The sass:math module provides functions for mathematical calculations.

Main functions
  • pow(): Exponentiation
  • sqrt(): Square root
  • abs(): Absolute value
  • round(), ceil(), floor(): Round, round up, round down
Usage example
 1@use "sass:math";
 2
 3// Using pow() to calculate exponential values
 4$base-size: math.pow(2, 3) * 10px; // 80px
 5
 6// Using sqrt() to compute a square root
 7$root-size: math.sqrt(144) * 1px; // 12px
 8
 9// Using abs() to ensure a positive value
10$offset: math.abs(-15px); // 15px
11
12// Using round(), ceil(), and floor() for different rounding methods
13$rounded: math.round(12.6px); // 13px
14$ceiled: math.ceil(12.1px); // 13px
15$floored: math.floor(12.9px); // 12px
16
17.container {
18  width: $base-size; // 80px
19  height: $root-size; // 12px
20  margin-left: $offset; // 15px
21}
22
23.values {
24  /* Demonstrating different rounding operations */
25  padding: $rounded;  // 13px
26  border-width: $ceiled; // 13px
27  margin-top: $floored; // 12px
28}
  • math.pow() and math.sqrt() are useful for size calculations, while math.abs() and the rounding functions help handle adjustments. Combining these makes it easy to compute consistent UI scales.

The sass:list module

The sass:list module provides functions specialized for list operations.

Main functions
  • append(): Add elements
  • join(): Join lists
  • nth(): Get the element at a given position
  • length(): Get the length of a list
Usage example
 1@use "sass:list";
 2
 3// Base list
 4$colors: ("red", "blue", "green");
 5
 6// Add an element to the end of the list
 7$colors-appended: list.append($colors, "yellow");
 8// ("red", "blue", "green", "yellow")
 9
10// Add an element to the beginning of the list using join()
11$colors-prepended: list.join(("black",), $colors);
12// ("black", "red", "blue", "green", "yellow")
13
14// Join two lists together
15$extra-colors: ("pink", "cyan");
16$merged-colors: list.join($colors-prepended, $extra-colors);
17// ("black", "red", "blue", "green", "yellow", "pink", "cyan")
18
19// Get list length
20$total-length: list.length($merged-colors);
21
22// Example usage in a loop: assign each color to a list item
23ul {
24  @for $i from 1 through $total-length {
25    li:nth-child(#{$i}) {
26      /* Get the color at index $i */
27      color: list.nth($merged-colors, $i);
28    }
29  }
30}
  • You can add elements to the end of a list with append(), and use join() to flexibly combine multiple lists. If you want to add an element to the beginning, you can do so by joining a single-element list to the front using join(). By combining length() and nth(), it becomes easier to generate UI styles that require dynamic list processing.

The sass:map module

The sass:map module provides functions to work with maps (associative arrays).

Main functions
  • get(): Get the value for a key
  • set(): Add or update a key-value pair
  • keys(): Get all keys
Usage example
 1@use "sass:map";
 2
 3// Base theme map
 4$theme-colors: (
 5  "primary": #3498db,
 6  "secondary": #e74c3c
 7);
 8
 9// Update or add a value using set()
10$updated-theme: map.set($theme-colors, "warning", #f1c40f);
11// Map now has "warning": #f1c40f added
12
13// Get a value from the map
14$primary-color: map.get($updated-theme, "primary");
15
16// Get all keys from the map
17$all-keys: map.keys($updated-theme);
18// Example: ("primary", "secondary", "warning")
19
20button {
21  /* Apply color retrieved from the theme map */
22  background-color: $primary-color;
23}
24
25.debug {
26  /* Print keys as content for demonstration */
27  content: "#{$all-keys}";
28}
  • Using map.set() lets you update maps dynamically, and combined with map.get() you can build flexible theme structures. With map.keys() you can list configuration entries, which helps in designing extensible styles.

The sass:selector module

The sass:selector module provides functions helpful for selector manipulation.

Main functions
  • nest(): Nest selectors
  • is-superselector(): Check selector containment
  • replace(): Replace selectors
Usage example
 1@use "sass:selector";
 2
 3// Nest selectors (combine parent and child)
 4$nested-selector: selector.nest(".parent", ".child");
 5// Result: ".parent .child"
 6
 7// Check if one selector is a superselector of another
 8$is-super: selector.is-superselector(".parent", $nested-selector);
 9// true because ".parent" matches all elements that
10// ".parent .child" can match as an ancestor
11
12// Replace part of a selector with another selector
13$replaced-selector: selector.replace(".parent .child", ".child", ".item");
14// Result: ".parent .item"
15
16// Use generated selectors in actual CSS output
17#{$nested-selector} {
18  /* Applies to .parent .child */
19  color: red;
20}
21
22@if $is-super {
23  .info::after {
24    /* Demonstrate boolean result */
25    content: "parent is a superselector";
26  }
27}
28
29#{$replaced-selector} {
30  /* Applies to .parent .item */
31  background: blue;
32}
  • Use selector.nest() to flexibly compose selectors and selector.is-superselector() to verify their relationships. Combine with selector.replace() to handle advanced selector-generation logic succinctly.

The sass:meta module

The sass:meta module provides features useful for meta-programming in SASS.

Main functions
  • variable-exists(): Check if a variable exists
  • global-variable-exists(): Check if a global variable exists
  • inspect(): Display a value for debugging
Usage example
 1@use "sass:meta";
 2
 3// Define a global variable
 4$color: #3498db;
 5
 6// Check if a variable exists in the current scope
 7@if meta.variable-exists("color") {
 8  body {
 9    /* Apply style only if $color exists */
10    background-color: $color;
11  }
12}
13
14// Create a local variable inside a block
15.container {
16  $local-size: 20px;
17
18  @if meta.variable-exists("local-size") {
19    /* Demonstrates detection of local variable */
20    width: $local-size;
21  }
22}
23
24// Check if a global variable exists
25$result: meta.global-variable-exists("color"); // true
26
27.debug {
28  /* Use inspect() to output the inspected value as a string */
29  content: meta.inspect($result); // "true"
30}
  • meta.variable-exists() and meta.global-variable-exists() let you safely determine variable states per scope. meta.inspect() is very useful for debugging and can display values as strings.

Practical example

Combining multiple built-in modules further enhances SASS's expressiveness. Below is an example that uses the color, math, and list modules together to automate color processing and list operations.

 1@use "sass:color";
 2@use "sass:math";
 3@use "sass:list";
 4
 5// Base color list
 6$base-colors: (#3498db, #e74c3c, #2ecc71);
 7$darkened-colors: (); // Empty list for processed colors
 8
 9// Loop through each base color and darken it by 10%
10@each $color in $base-colors {
11  $darkened-colors: list.append(
12    $darkened-colors,
13    // Darken color by decreasing lightness by 10%
14    color.adjust($color, $lightness: -10%)
15  );
16}
17
18div {
19  // Apply each processed color to a corresponding <div>
20  @for $i from 1 through list.length($darkened-colors) {
21    &:nth-child(#{$i}) {
22      // Set color by index
23      background-color: list.nth($darkened-colors, $i);
24    }
25  }
26}
  • In this code, processed colors are appended sequentially with list.append(), and color.adjust() with $lightness: -10% is used to darken the colors by 10%. Finally, @for is combined with list.nth() to apply different background colors to each <div>.

Summary

SASS's built-in modules greatly increase CSS flexibility. By understanding each module and using them appropriately, you can create more efficient, maintainable stylesheets.

You can follow along with the above article using Visual Studio Code on our YouTube channel. Please also check out the YouTube channel.

YouTube Video