Bird
Raised Fist0
SASSmarkup~10 mins

@each loop over maps in SASS - Browser Rendering Trace

Choose your learning style10 modes available
Render Flow - @each loop over maps
Read SASS file
↓
Parse @each loop
↓
Extract map keys and values
↓
Iterate over each key-value pair
↓
Generate CSS rules for each pair
↓
Output compiled CSS
The SASS compiler reads the @each loop, extracts keys and values from the map, then repeats the inner code for each pair, generating CSS rules accordingly.
Render Steps - 3 Steps
Code Added:$colors: (red: #f00, green: #0f0, blue: #00f);
Before
[No boxes visible]
→
After
[No boxes visible]
Defines a map of color names to color codes; no visual change yet because no CSS applied.
🔧 Browser Action:Stores variable in SASS memory; no CSS output.
Code Sample
Creates three colored boxes: red, green, and blue, each styled using the @each loop over the colors map.
SASS
<div class="box red"></div>
<div class="box green"></div>
<div class="box blue"></div>
SASS
$colors: (red: #f00, green: #0f0, blue: #00f);

@each $name, $color in $colors {
  .box.#{$name} {
    background-color: $color;
    width: 5rem;
    height: 5rem;
    margin: 0.5rem;
    display: inline-block;
  }
}
Render Quiz - 3 Questions
Test your understanding
After applying the @each loop in render_step 3, what do you see on the page?
AOne large box with mixed colors
BThree colored boxes side by side: red, green, and blue
CNo boxes visible
DBoxes stacked vertically without color
Common Confusions - 2 Topics
Why don't I see any boxes styled if I only define the map but forget the @each loop?
Defining a map only stores data in SASS; it does not create any CSS rules. The @each loop is needed to generate CSS for each map entry (see render_step 1 vs 3).
💡 Maps hold data; loops create visible styles.
Why does the class name need interpolation like .#{$name}?
Without interpolation, SASS treats the selector literally. Interpolation inserts the variable's value into the selector, creating unique class names (render_step 3).
💡 Use #{} to insert variables into selectors.
Property Reference
SASS FeatureSyntaxPurposeVisual EffectCommon Use
@each loop@each $key, $value in $map { ... }Iterate over map entriesGenerates repeated CSS rulesCreate multiple classes or styles dynamically
Map$map: (key1: value1, key2: value2);Store key-value pairsNo direct visual effectHold related style values
Interpolation.#{$name}Insert variable into selectorCreates dynamic class namesGenerate selectors from variables
Concept Snapshot
@each loop over maps lets you repeat CSS rules for each key-value pair. Use $map: (key: value, ...); to store pairs. Loop with @each $key, $value in $map { ... }. Use interpolation .#{$key} for dynamic class names. Generates multiple styled elements efficiently.

Practice

(1/5)
1. What does the @each loop do when used with a map in Sass?
easy
A. It creates a new map from the keys only.
B. It deletes all map entries after looping.
C. It repeats styles for each key-value pair in the map.
D. It converts the map into a list.

Solution

  1. Step 1: Understand the purpose of @each with maps

    The @each loop iterates over each key-value pair in a map.
  2. Step 2: Identify what happens during iteration

    For each pair, it repeats the block of styles or code inside the loop.
  3. Final Answer:

    It repeats styles for each key-value pair in the map. -> Option C
  4. Quick Check:

    @each loops over map pairs = repeats styles [OK]
Hint: Remember: @each repeats code for each map pair [OK]
Common Mistakes:
  • Thinking @each deletes map entries
  • Confusing map keys with list items
  • Assuming it converts maps to lists
2. Which of the following is the correct syntax to loop over a map $colors with @each in Sass?
easy
A. @each $key $value in $colors { ... }
B. @each $colors in $key, $value { ... }
C. @each $value, $key in $colors { ... }
D. @each $key, $value in $colors { ... }

Solution

  1. Step 1: Recall the correct @each syntax for maps

    The syntax requires two variables separated by a comma, then in, then the map name.
  2. Step 2: Match the syntax to the options

    @each $key, $value in $colors { ... } correctly uses @each $key, $value in $colors. Others have wrong order or missing comma.
  3. Final Answer:

    @each $key, $value in $colors { ... } -> Option D
  4. Quick Check:

    Two variables separated by comma + in + map name [OK]
Hint: Use comma between key and value, then 'in' before map [OK]
Common Mistakes:
  • Swapping key and value order
  • Missing comma between variables
  • Using wrong variable order or syntax
3. Given the Sass map and code:
$themes: (light: #fff, dark: #000); @each $name, $color in $themes { .#{$name}-theme { background: $color; } }
What CSS will this generate?
medium
A. .light-theme { background: #fff; } .dark-theme { background: #000; }
B. .light { background: #fff; } .dark { background: #000; }
C. .theme-light { background: #fff; } .theme-dark { background: #000; }
D. .light-theme { background: light; } .dark-theme { background: dark; }

Solution

  1. Step 1: Understand the map and loop variables

    The map has keys light and dark with colors #fff and #000.
  2. Step 2: Analyze the generated CSS selectors and properties

    The selector uses interpolation .#{$name}-theme producing .light-theme and .dark-theme. The background uses the color value.
  3. Final Answer:

    .light-theme { background: #fff; } .dark-theme { background: #000; } -> Option A
  4. Quick Check:

    Interpolation creates .light-theme and .dark-theme with correct colors [OK]
Hint: Interpolation with #{} creates dynamic class names [OK]
Common Mistakes:
  • Forgetting interpolation syntax
  • Using keys as colors instead of values
  • Mixing up class name order
4. Identify the error in this Sass code:
$sizes: (small: 1rem, medium: 2rem); @each $size in $sizes { .btn-#{$size} { font-size: $size; } }
medium
A. Missing comma between key and value in @each loop.
B. Using only one variable for a map instead of two.
C. Incorrect interpolation syntax in class name.
D. Map keys and values are reversed.

Solution

  1. Step 1: Check the @each loop variables

    The map has key-value pairs, so the loop needs two variables separated by a comma.
  2. Step 2: Identify the problem with one variable

    The code uses only $size instead of $key, $value, so it cannot access both parts of the map.
  3. Final Answer:

    Using only one variable for a map instead of two. -> Option B
  4. Quick Check:

    Maps need two variables in @each loops [OK]
Hint: Use two variables for maps in @each loops [OK]
Common Mistakes:
  • Using one variable for map iteration
  • Forgetting comma between variables
  • Misusing interpolation syntax
5. You have a Sass map:
$shadows: (none: 0 0 0 transparent, light: 0 1px 3px rgba(0,0,0,0.12), heavy: 0 4px 6px rgba(0,0,0,0.3));

Write a @each loop that creates classes .shadow-none, .shadow-light, and .shadow-heavy with the correct box-shadow property. Which code snippet is correct?
hard
A. @each $name, $shadow in $shadows { .shadow-#{$name} { box-shadow: $shadow; } }
B. @each $shadow, $name in $shadows { .shadow-#{$name} { box-shadow: $shadow; } }
C. @each $name in $shadows { .shadow-#{$name} { box-shadow: $name; } }
D. @each $name, $shadow in $shadows { .shadow-#{$shadow} { box-shadow: $name; } }

Solution

  1. Step 1: Identify correct variable order for map iteration

    Maps use @each $key, $value in $map, so $name is key and $shadow is value.
  2. Step 2: Check class name and property usage

    The class uses interpolation with the key $name, and the property uses the value $shadow.
  3. Final Answer:

    @each $name, $shadow in $shadows { .shadow-#{$name} { box-shadow: $shadow; } } -> Option A
  4. Quick Check:

    Key first, value second, use interpolation for class [OK]
Hint: Map loops: key first, value second, interpolate key for class [OK]
Common Mistakes:
  • Swapping key and value variables
  • Using only one variable for map
  • Interpolating value instead of key in class name
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard