Bird
Raised Fist0
SASSmarkup~8 mins

@each loop over lists in SASS - Performance & Optimization

Choose your learning style10 modes available
Performance: @each loop over lists
MEDIUM IMPACT
This affects CSS generation time and the final CSS file size, impacting page load speed and rendering.
Generating repeated CSS rules for multiple colors
SASS
@each $color in (red, blue, green) {
  .btn-#{$color} {
    background-color: $color;
  }
}

/* Use CSS variables or utility classes for other colors to reduce duplication */
Limits the number of generated CSS rules, reducing CSS size and compile time.
📈 Performance GainSaves several kb in CSS bundle; faster compile time.
Generating repeated CSS rules for multiple colors
SASS
@each $color in (red, blue, green, yellow, orange, purple, pink, brown, black, white) {
  .btn-#{$color} {
    background-color: $color;
  }
}
Loops over a large list generate many CSS rules, increasing CSS file size and compile time.
📉 Performance CostAdds ~1kb per item to CSS bundle; increases compile time linearly with list size.
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Large @each loop generating many classes0 (compile time only)0High due to large CSS[X] Bad
Small @each loop with few classes0 (compile time only)0Low CSS size, faster paint[OK] Good
Rendering Pipeline
The @each loop runs at compile time, generating CSS rules that the browser later parses and applies during style calculation and paint.
→CSS Parsing
→Style Calculation
→Paint
⚠️ BottleneckCSS Parsing and Style Calculation due to large generated CSS
Core Web Vital Affected
LCP
This affects CSS generation time and the final CSS file size, impacting page load speed and rendering.
Optimization Tips
1Limit the number of items in @each loops to reduce CSS size.
2Use CSS variables or utility classes to avoid generating many repetitive rules.
3Check generated CSS size in DevTools Network panel to monitor impact.
Performance Quiz - 3 Questions
Test your performance knowledge
What is the main performance impact of using a large @each loop over lists in Sass?
AIncreases DOM nodes count
BSlows down JavaScript execution
CIncreases CSS file size and compile time
DCauses layout shifts during page load
DevTools: Network
How to check: Open DevTools, go to Network tab, filter by CSS files, and check the size of the generated CSS file.
What to look for: Large CSS file size indicates many generated rules; this can slow page load and style application.

Practice

(1/5)
1. What does the @each loop do in Sass when used with a list?
easy
A. It repeats a block of styles for each item in the list.
B. It creates a new list from the original list.
C. It deletes items from the list one by one.
D. It converts the list into a map automatically.

Solution

  1. Step 1: Understand the purpose of @each

    The @each loop is designed to run a block of code for every item in a list.
  2. Step 2: Identify what happens with each item

    For each item, it repeats the styles or code inside the loop, creating multiple style blocks.
  3. Final Answer:

    It repeats a block of styles for each item in the list. -> Option A
  4. Quick Check:

    @each loops = repeat styles [OK]
Hint: Remember: @each repeats code for every list item [OK]
Common Mistakes:
  • Thinking @each modifies the list itself
  • Confusing @each with list functions like map
  • Assuming it deletes or filters items
2. Which of the following is the correct syntax to loop over a list (red, green, blue) using @each in Sass?
easy
A. @each $color in (red, green, blue) { color: $color; }
B. @each color in red, green, blue { color: color; }
C. @each $color from (red, green, blue) { color: $color; }
D. @each $color on (red, green, blue) { color: $color; }

Solution

  1. Step 1: Identify correct @each syntax

    The correct syntax uses @each $variable in (list) to loop over items.
  2. Step 2: Check each option

    @each $color in (red, green, blue) { color: $color; } uses @each $color in (red, green, blue) which is correct. Options A, B, and D use wrong keywords or miss the $ sign.
  3. Final Answer:

    @each $color in (red, green, blue) { color: $color; } -> Option A
  4. Quick Check:

    Use @each $var in (list) syntax [OK]
Hint: Use 'in' keyword and $variable for each item [OK]
Common Mistakes:
  • Omitting the $ before the variable
  • Using wrong keywords like 'from' or 'on'
  • Not wrapping list in parentheses
3. What will be the output CSS of this Sass code?
@each $size in (small, medium, large) {
  .btn-#{$size} {
    font-size: if($size == small, 1rem, if($size == medium, 1.5rem, 2rem));
  }
}
medium
A. Syntax error due to nested if statements
B. .btn-small { font-size: 2rem; } .btn-medium { font-size: 1rem; } .btn-large { font-size: 1.5rem; }
C. .btn-small { font-size: 1rem; } .btn-medium { font-size: 1.5rem; } .btn-large { font-size: 2rem; }
D. .btn-small { font-size: 1.5rem; } .btn-medium { font-size: 2rem; } .btn-large { font-size: 1rem; }

Solution

  1. Step 1: Understand the loop and interpolation

    The loop runs over sizes: small, medium, large. The class name uses interpolation to create .btn-small, .btn-medium, .btn-large.
  2. Step 2: Evaluate the font-size condition

    Using nested if: small -> 1rem, medium -> 1.5rem, large -> 2rem.
  3. Final Answer:

    .btn-small { font-size: 1rem; } .btn-medium { font-size: 1.5rem; } .btn-large { font-size: 2rem; } -> Option C
  4. Quick Check:

    Loop + interpolation + if = correct CSS [OK]
Hint: Match each list item to its style using interpolation [OK]
Common Mistakes:
  • Mixing up font-size values
  • Thinking nested if causes syntax error
  • Ignoring interpolation in class names
4. Identify the error in this Sass code using @each loop:
@each $color (red, green, blue) {
  .text-#{$color} {
    color: $color;
  }
}
medium
A. Variable $color should not have a $ sign.
B. Interpolation syntax #{$color} is incorrect.
C. Parentheses around the list are not allowed.
D. Missing 'in' keyword after $color in the loop.

Solution

  1. Step 1: Check the @each loop syntax

    The correct syntax requires the keyword in between the variable and the list.
  2. Step 2: Identify the missing keyword

    The code misses in after $color, causing a syntax error.
  3. Final Answer:

    Missing 'in' keyword after $color in the loop. -> Option D
  4. Quick Check:

    @each $var in (list) needs 'in' [OK]
Hint: Always write '@each $var in (list)' with 'in' keyword [OK]
Common Mistakes:
  • Forgetting the 'in' keyword
  • Removing $ from variable names
  • Misusing interpolation syntax
5. Given the list (10px, 20px, 0, 30px), how can you use @each to create margin classes but skip the zero value?
hard
A. @each $m in (10px, 20px, 0, 30px) { .m-#{$m} { margin: $m; } }
B. @each $m in (10px, 20px, 0, 30px) { @if $m != 0 { .m-#{$m} { margin: $m; } } }
C. @each $m in (10px, 20px, 0, 30px) { @if $m == 0 { .m-#{$m} { margin: $m; } } }
D. @each $m in (10px, 20px, 0, 30px) { @if $m > 30px { .m-#{$m} { margin: $m; } } }

Solution

  1. Step 1: Loop over all margin values

    The @each loop goes through each value including zero.
  2. Step 2: Use @if to skip zero

    Inside the loop, add @if $m != 0 to only create classes for non-zero margins.
  3. Final Answer:

    @each $m in (10px, 20px, 0, 30px) { @if $m != 0 { .m-#{$m} { margin: $m; } } } -> Option B
  4. Quick Check:

    Use @if inside @each to filter items [OK]
Hint: Use @if inside @each to skip unwanted values [OK]
Common Mistakes:
  • Not filtering zero, so unwanted class is created
  • Using wrong condition like == 0 instead of != 0
  • Trying to filter outside the loop
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