Bird
Raised Fist0
SASSmarkup~5 mins

Avoiding selector bloat from @extend in SASS - Cheat Sheet & Quick Revision

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
Recall & Review
beginner
What is selector bloat when using @extend in Sass?
Selector bloat happens when @extend causes many CSS selectors to combine, making the final CSS larger and harder to read.
Click to reveal answer
intermediate
How can you avoid selector bloat when using @extend?
Use @extend only with placeholder selectors (starting with %) and avoid extending complex selectors to keep CSS clean.
Click to reveal answer
beginner
What is a placeholder selector in Sass?
A placeholder selector starts with % and is used only for @extend. It does not output CSS on its own, helping avoid selector bloat.
Click to reveal answer
intermediate
Why should you avoid extending selectors with many classes or elements?
Because it creates long combined selectors in the output CSS, increasing file size and reducing readability.
Click to reveal answer
intermediate
What is a good alternative to @extend to avoid selector bloat?
Using mixins or utility classes can help reuse styles without creating complex combined selectors.
Click to reveal answer
What does @extend do in Sass?
AAdds JavaScript to CSS
BCopies styles from one selector to another
CDeletes unused CSS selectors
DCreates a new CSS file
Which selector type helps avoid selector bloat when using @extend?
AElement selectors (e.g., <code>div</code>)
BID selectors (e.g., <code>#header</code>)
CClass selectors (e.g., <code>.button</code>)
DPlaceholder selectors (e.g., <code>%placeholder</code>)
What is a downside of extending complex selectors with many classes?
AIt creates long combined selectors causing selector bloat
BIt reduces CSS file size
CIt makes CSS invalid
DIt disables styles
Which Sass feature can be used instead of @extend to avoid selector bloat?
AVariables
BNesting
CMixins
DFunctions
What happens if you extend a placeholder selector?
AThe styles are copied and selectors combined only where extended
BThe placeholder selector outputs CSS on its own
CNo CSS is generated
DAn error occurs
Explain what selector bloat is and how using placeholder selectors with @extend helps avoid it.
Think about how CSS selectors combine and how placeholders don't output CSS alone.
You got /4 concepts.
    Describe alternatives to @extend that help keep your CSS clean and avoid selector bloat.
    Consider ways to reuse styles without combining selectors.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main problem with using @extend in Sass without placeholders?
      easy
      A. It creates long combined selectors causing selector bloat.
      B. It duplicates all CSS properties in the output.
      C. It prevents styles from being reused.
      D. It only works inside mixins.

      Solution

      1. Step 1: Understand what @extend does

        @extend shares styles by combining selectors in the output CSS.
      2. Step 2: Identify the problem with combining selectors

        When many selectors are combined, the CSS file grows longer and harder to maintain, called selector bloat.
      3. Final Answer:

        It creates long combined selectors causing selector bloat. -> Option A
      4. Quick Check:

        @extend causes selector bloat = A [OK]
      Hint: Remember: @extend merges selectors, causing long combined lists [OK]
      Common Mistakes:
      • Thinking @extend duplicates properties instead of combining selectors
      • Confusing @extend with mixins
      • Believing @extend only works inside mixins
      2. Which of the following is the correct way to define a placeholder selector in Sass?
      easy
      A. %button { color: blue; }
      B. .button { color: blue; }
      C. #button { color: blue; }
      D. &button { color: blue; }

      Solution

      1. Step 1: Recall placeholder selector syntax

        Placeholder selectors start with a percent sign (%) in Sass.
      2. Step 2: Match the syntax to the options

        Only %button { color: blue; } uses %button, which is the correct placeholder syntax.
      3. Final Answer:

        %button { color: blue; } -> Option A
      4. Quick Check:

        Placeholder selector syntax = %name [OK]
      Hint: Placeholders start with % in Sass [OK]
      Common Mistakes:
      • Using class selector syntax (.) instead of %
      • Using ID selector (#) for placeholders
      • Confusing & with placeholder syntax
      3. Given the Sass code:
      %btn { color: red; }
      .primary { @extend %btn; }
      .secondary { @extend %btn; }

      What will the compiled CSS look like?
      medium
      A. .primary, .secondary, %btn { color: red; }
      B. .primary, .secondary { color: red; }
      C. %btn { color: red; } .primary, .secondary { color: red; }
      D. .primary { color: red; } .secondary { color: red; }

      Solution

      1. Step 1: Understand placeholder selectors output

        Placeholder selectors do not appear in the compiled CSS; only selectors that extend them appear combined.
      2. Step 2: Combine selectors that extend the placeholder

        .primary and .secondary both extend %btn, so they are combined into one selector with the shared styles.
      3. Final Answer:

        .primary, .secondary { color: red; } -> Option B
      4. Quick Check:

        Placeholder selectors disappear, extended selectors combine [OK]
      Hint: Placeholder selectors don't output; extended selectors combine [OK]
      Common Mistakes:
      • Expecting %btn to appear in CSS
      • Thinking styles duplicate for each selector
      • Confusing combined selectors with separate blocks
      4. What is wrong with this Sass code that uses @extend without placeholders?
      .btn { color: green; }
      .primary { @extend .btn; }
      .secondary { @extend .btn; }
      medium
      A. It duplicates the .btn styles instead of combining selectors.
      B. It causes a syntax error because @extend needs placeholders.
      C. It causes selector bloat by combining all selectors including .btn.
      D. It does not apply styles to .primary and .secondary.

      Solution

      1. Step 1: Understand @extend with normal selectors

        Extending a normal class merges selectors including the original class, creating longer combined selectors.
      2. Step 2: Identify the problem caused

        This merging causes selector bloat because the original selector (.btn) stays in output and combines with all extending selectors.
      3. Final Answer:

        It causes selector bloat by combining all selectors including .btn. -> Option C
      4. Quick Check:

        @extend without placeholders causes selector bloat [OK]
      Hint: Extending normal selectors merges all selectors, causing bloat [OK]
      Common Mistakes:
      • Thinking @extend requires placeholders
      • Expecting duplicated styles instead of combined selectors
      • Believing styles won't apply to extending selectors
      5. You want to share button styles in Sass but avoid selector bloat from @extend. Which approach is best?
      hard
      A. Use a placeholder selector with @extend in button classes.
      B. Use @extend directly on a normal class selector.
      C. Copy and paste the styles into each button class.
      D. Use a mixin to include styles in each button class.

      Solution

      1. Step 1: Understand selector bloat causes

        @extend merges selectors, which can cause long combined selectors and bloat.
      2. Step 2: Compare placeholders and mixins

        Placeholders reduce bloat but still combine selectors. Mixins copy styles without merging selectors, avoiding bloat.
      3. Step 3: Choose the best approach to avoid bloat

        Using mixins copies styles directly, preventing selector bloat while sharing styles.
      4. Final Answer:

        Use a mixin to include styles in each button class. -> Option D
      5. Quick Check:

        Mixins avoid selector bloat better than @extend [OK]
      Hint: Mixins copy styles, avoiding selector bloat from @extend [OK]
      Common Mistakes:
      • Thinking placeholders fully prevent bloat
      • Using @extend on normal selectors causing bloat
      • Copy-pasting styles manually instead of using mixins