Bird
Raised Fist0
SASSmarkup~5 mins

Spacing scale generation in SASS

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction

Spacing scale helps keep consistent space sizes in your design. It makes your layout neat and balanced.

When you want to set consistent margins and paddings across your website.
When you need to quickly adjust spacing by changing one place.
When you want to create a design system with reusable spacing values.
When you want to avoid guessing pixel values for gaps and spaces.
When you want your site to look balanced on different screen sizes.
Syntax
SASS
@function spacing-scale($step) {
  @return $step * 0.5rem;
}

// Usage example:
.element {
  margin-bottom: spacing-scale(4); // 2rem
}

The function takes a number and returns a space size in rem units.

Using rem units helps keep spacing relative to the root font size, making it responsive.

Examples
This example uses 0.25rem as the base unit, so step 2 equals 0.5rem.
SASS
@function spacing-scale($step) {
  @return $step * 0.25rem;
}

.box {
  padding: spacing-scale(2); // 0.5rem
}
Here, each step equals 1rem, so step 3 equals 3rem spacing.
SASS
@function spacing-scale($step) {
  @return $step * 1rem;
}

.container {
  margin-top: spacing-scale(3); // 3rem
}
This example uses a map to store spacing values for easy reuse.
SASS
$spacing-values: (0: 0, 1: 0.5rem, 2: 1rem, 3: 1.5rem);

.element {
  padding: map-get($spacing-values, 2); // 1rem
}
Sample Program

This code defines a spacing scale function that multiplies the step by 0.5rem. The container uses padding and margin from the scale to keep spacing consistent. The text inside also uses the scale for margin.

SASS
@function spacing-scale($step) {
  @return $step * 0.5rem;
}

.container {
  padding: spacing-scale(4);
  margin-bottom: spacing-scale(2);
  background-color: #e0f7fa;
  border: 1px solid #00796b;
  width: 300px;
  font-family: Arial, sans-serif;
}

.text {
  margin-top: spacing-scale(3);
  color: #004d40;
  font-size: 1rem;
}
OutputSuccess
Important Notes

Use rem units for spacing to keep it scalable with user settings.

Changing the base multiplier in the function updates all spacing at once.

Keep spacing steps consistent to maintain visual rhythm.

Summary

Spacing scale helps create consistent and easy-to-manage space sizes.

Use a function or map in Sass to generate spacing values.

Use rem units for responsive and accessible spacing.

Practice

(1/5)
1. What is the main purpose of generating a spacing scale in Sass?
easy
A. To create consistent and reusable space sizes across a website
B. To change font colors dynamically
C. To add animations to elements
D. To optimize image loading speed

Solution

  1. Step 1: Understand spacing scale concept

    A spacing scale is a set of predefined space sizes used consistently in design.
  2. Step 2: Identify its purpose in Sass

    It helps keep spacing uniform and easy to manage by reusing values.
  3. Final Answer:

    To create consistent and reusable space sizes across a website -> Option A
  4. Quick Check:

    Spacing scale = consistent spacing [OK]
Hint: Spacing scale means consistent space sizes reused [OK]
Common Mistakes:
  • Confusing spacing scale with color or animation features
  • Thinking spacing scale changes fonts or images
2. Which Sass syntax correctly defines a map for spacing scale with keys 1, 2, 3 and values 0.25rem, 0.5rem, 1rem?
easy
A. $spacing-scale = {1: 0.25rem, 2: 0.5rem, 3: 1rem};
B. $spacing-scale: [1 => 0.25rem, 2 => 0.5rem, 3 => 1rem];
C. $spacing-scale: (1: 0.25rem, 2: 0.5rem, 3: 1rem);
D. $spacing-scale: (1 => 0.25rem, 2: 0.5rem, 3: 1rem);

Solution

  1. Step 1: Recall Sass map syntax

    Sass maps use parentheses () with key: value pairs separated by commas.
  2. Step 2: Check each option

    $spacing-scale: (1: 0.25rem, 2: 0.5rem, 3: 1rem); uses correct syntax with colons and parentheses. Others use invalid symbols or brackets.
  3. Final Answer:

    $spacing-scale: (1: 0.25rem, 2: 0.5rem, 3: 1rem); -> Option C
  4. Quick Check:

    Sass map syntax = parentheses + colon [OK]
Hint: Sass maps use (key: value) pairs inside parentheses [OK]
Common Mistakes:
  • Using = instead of : for assignment
  • Using square brackets [] instead of parentheses ()
  • Using => instead of : for key-value pairs
3. Given this Sass code:
$spacing-scale: (1: 0.25rem, 2: 0.5rem, 3: 1rem);

@mixin spacing($size) {
  margin: map-get($spacing-scale, $size);
}

.box {
  @include spacing(2);
}

What CSS will be generated for the .box class?
medium
A. .box { margin: 2rem; }
B. .box { margin: 0.5rem; }
C. .box { margin: 0.25rem; }
D. .box { margin: 1rem; }

Solution

  1. Step 1: Understand map-get usage

    map-get($spacing-scale, 2) returns the value for key 2, which is 0.5rem.
  2. Step 2: Apply mixin to .box

    The mixin sets margin to 0.5rem for .box.
  3. Final Answer:

    .box { margin: 0.5rem; } -> Option B
  4. Quick Check:

    map-get key 2 = 0.5rem [OK]
Hint: map-get returns value for given key in Sass map [OK]
Common Mistakes:
  • Confusing keys and values in map-get
  • Assuming mixin sets padding instead of margin
  • Mixing up rem values for keys
4. Identify the error in this Sass code for generating spacing scale:
@function generate-spacing($steps) {
  $scale: ();
  @for $i from 1 through $steps {
    $scale: map-merge($scale, $i: $i * 0.25rem);
  }
  @return $scale;
}

$spacing-scale: generate-spacing(3);
medium
A. Cannot multiply number by unit directly in map-merge key-value
B. map-merge syntax is incorrect; keys must be strings
C. The function does not initialize $scale as a map
D. Using $i: $i * 0.25rem inside map-merge is invalid syntax

Solution

  1. Step 1: Analyze map-merge usage

    map-merge expects a map and a map as arguments. The second argument must be a map with key-value pairs.
  2. Step 2: Check key-value pair syntax

    $i: $i * 0.25rem is invalid inside map-merge because $i: is not a valid map literal key syntax. It should be ($i: $i * 0.25rem) wrapped in parentheses.
  3. Final Answer:

    Using $i: $i * 0.25rem inside map-merge is invalid syntax -> Option D
  4. Quick Check:

    map-merge needs proper map syntax [OK]
Hint: Wrap key-value pair in parentheses for map-merge [OK]
Common Mistakes:
  • Forgetting parentheses around key-value pair in map-merge
  • Trying to multiply unitless number by unit incorrectly
  • Not initializing $scale as empty map ()
5. You want to create a spacing scale in Sass that doubles each step starting from 0.25rem for 5 steps (0.25rem, 0.5rem, 1rem, 2rem, 4rem). Which function correctly generates this scale as a map with keys 1 to 5?
hard
A. @function generate-scale($steps) { $scale: (); $value: 0.25rem; @for $i from 1 through $steps { $scale: map-merge($scale, ($i: $value)); $value: $value * 2; } @return $scale; }
B. @function generate-scale($steps) { $scale: (); @for $i from 1 through $steps { $scale: map-merge($scale, ($i: 0.25rem * $i)); } @return $scale; }
C. @function generate-scale($steps) { $scale: (); $value: 0.25rem; @each $i in 1 2 3 4 5 { $scale: map-merge($scale, ($i: $value)); $value: $value + 0.25rem; } @return $scale; }
D. @function generate-scale($steps) { $scale: (); $value: 0.25rem; @for $i from 1 through $steps { $scale: map-merge($scale, ($i: $value)); $value: $value + $value; } @return $scale; }

Solution

  1. Step 1: Understand doubling logic

    The value starts at 0.25rem and doubles each step: multiply by 2 each loop.
  2. Step 2: Check each function

    @function generate-scale($steps) { $scale: (); $value: 0.25rem; @for $i from 1 through $steps { $scale: map-merge($scale, ($i: $value)); $value: $value * 2; } @return $scale; } correctly initializes $value, merges map with ($i: $value), then doubles $value by multiplying by 2.
  3. Step 3: Identify errors in others

    @function generate-scale($steps) { $scale: (); @for $i from 1 through $steps { $scale: map-merge($scale, ($i: 0.25rem * $i)); } @return $scale; } multiplies by $i (linear, not doubling). @function generate-scale($steps) { $scale: (); $value: 0.25rem; @each $i in 1 2 3 4 5 { $scale: map-merge($scale, ($i: $value)); $value: $value + 0.25rem; } @return $scale; } uses @each with addition (not doubling). @function generate-scale($steps) { $scale: (); $value: 0.25rem; @for $i from 1 through $steps { $scale: map-merge($scale, ($i: $value)); $value: $value + $value; } @return $scale; } adds $value to itself (works but less clear than multiply by 2).
  4. Final Answer:

    Option A function correctly generates doubling scale -> Option A
  5. Quick Check:

    Multiply by 2 each step = doubling scale [OK]
Hint: Multiply value by 2 each loop to double spacing [OK]
Common Mistakes:
  • Using addition instead of multiplication for doubling
  • Multiplying by loop index instead of doubling
  • Using @each instead of @for for numeric loops