Discover how a small Sass trick can save your website from slow loading and messy styles!
Why Avoiding selector bloat from @extend in SASS? - Purpose & Use Cases
Start learning this pattern below
Jump into concepts and practice - no test required
Imagine you have many buttons on your website, and you want them all to share the same style. You copy and paste the same CSS rules into each button's style block.
When you want to change the button style, you have to update every single copy. This is slow and easy to forget, causing inconsistent looks and extra work.
Using @extend in Sass lets you write the style once and share it across many selectors. But if used carelessly, it can create very long combined selectors, making your CSS file bigger and slower.
.btn-primary { color: white; background: blue; }
.btn-secondary { color: white; background: blue; }.btn-primary, .btn-secondary { color: white; background: blue; }You can keep your styles DRY (don't repeat yourself) without making your CSS files huge and slow to load.
On a website with many button types, avoiding selector bloat means faster page loads and easier style updates, improving user experience and developer happiness.
Copying styles manually causes extra work and errors.
@extend helps share styles but can create long selectors if overused.
Learning to avoid selector bloat keeps CSS efficient and maintainable.
Practice
@extend in Sass without placeholders?Solution
Step 1: Understand what
@extenddoes@extendshares styles by combining selectors in the output CSS.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.Final Answer:
It creates long combined selectors causing selector bloat. -> Option AQuick Check:
@extend causes selector bloat = A [OK]
- Thinking @extend duplicates properties instead of combining selectors
- Confusing @extend with mixins
- Believing @extend only works inside mixins
Solution
Step 1: Recall placeholder selector syntax
Placeholder selectors start with a percent sign (%) in Sass.Step 2: Match the syntax to the options
Only %button { color: blue; } uses %button, which is the correct placeholder syntax.Final Answer:
%button { color: blue; } -> Option AQuick Check:
Placeholder selector syntax = %name [OK]
- Using class selector syntax (.) instead of %
- Using ID selector (#) for placeholders
- Confusing & with placeholder syntax
%btn { color: red; }
.primary { @extend %btn; }
.secondary { @extend %btn; }What will the compiled CSS look like?
Solution
Step 1: Understand placeholder selectors output
Placeholder selectors do not appear in the compiled CSS; only selectors that extend them appear combined.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.Final Answer:
.primary, .secondary { color: red; } -> Option BQuick Check:
Placeholder selectors disappear, extended selectors combine [OK]
- Expecting %btn to appear in CSS
- Thinking styles duplicate for each selector
- Confusing combined selectors with separate blocks
@extend without placeholders?.btn { color: green; }
.primary { @extend .btn; }
.secondary { @extend .btn; }Solution
Step 1: Understand @extend with normal selectors
Extending a normal class merges selectors including the original class, creating longer combined selectors.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.Final Answer:
It causes selector bloat by combining all selectors including .btn. -> Option CQuick Check:
@extend without placeholders causes selector bloat [OK]
- Thinking @extend requires placeholders
- Expecting duplicated styles instead of combined selectors
- Believing styles won't apply to extending selectors
@extend. Which approach is best?Solution
Step 1: Understand selector bloat causes
@extend merges selectors, which can cause long combined selectors and bloat.Step 2: Compare placeholders and mixins
Placeholders reduce bloat but still combine selectors. Mixins copy styles without merging selectors, avoiding bloat.Step 3: Choose the best approach to avoid bloat
Using mixins copies styles directly, preventing selector bloat while sharing styles.Final Answer:
Use a mixin to include styles in each button class. -> Option DQuick Check:
Mixins avoid selector bloat better than @extend [OK]
- Thinking placeholders fully prevent bloat
- Using @extend on normal selectors causing bloat
- Copy-pasting styles manually instead of using mixins
