Why extending reduces duplication in SASS - Browser Rendering Impact
div.box { color: blue; border: 1px solid black; }[No styled boxes]
[div.box] +-------------------+ | color: blue | | border: 1px solid | +-------------------+
div.box {
color: blue;
border: 1px solid black;
}
div.alert {
@extend div.box;
background: yellow;
}div.box, div.alert { color: blue; border: 1px solid black; } div.alert { background: yellow; }
| SASS Feature | Effect | Visual Result | Common Use |
|---|---|---|---|
| @extend | Merges selectors sharing styles | Combined CSS rules reduce duplication | Reuse styles without repeating code |
| Mixin | Copies styles into each selector | Duplicates CSS rules for each use | Reusable style blocks with parameters |
| Placeholder selector (%) | Defines styles only for extending | No CSS output unless extended | Create base styles to extend |
Practice
@extend in Sass?Solution
Step 1: Understand the purpose of
@extend@extendallows one selector to inherit styles from another, avoiding repetition.Step 2: Identify the benefit
This sharing reduces duplicated CSS rules, making code cleaner and smaller.
Final Answer:
It reduces repeated CSS by sharing styles between selectors. -> Option AQuick Check:
Extending reduces duplication = B [OK]
@extend shares styles to avoid repeats [OK]- Thinking
@extendadds new styles instead of sharing - Confusing
@extendwith mixins - Believing
@extendcompiles to JavaScript
%button-base in Sass?Solution
Step 1: Recall correct
@extendsyntaxThe correct keyword is
@extendwith an '@' symbol and a semicolon inside the block.Step 2: Match syntax with options
.btn {@extend %button-base;} uses
@extend %button-base;correctly inside the selector block.Final Answer:
.btn {@extend %button-base;} -> Option BQuick Check:
Correct@extendsyntax = C [OK]
- Missing '@' symbol before extend
- Using 'extends' instead of 'extend'
- Omitting semicolon after extend statement
%base { color: blue; font-weight: bold; }
.title {@extend %base; font-size: 2rem;}
.subtitle {@extend %base; font-size: 1.5rem;}What CSS will be generated?
Solution
Step 1: Understand
@extendbehaviorExtending a placeholder merges selectors sharing the same styles into one CSS rule.
Step 2: Analyze generated CSS
Both
.titleand.subtitlesharecolor: blueandfont-weight: boldin a combined selector. Their font sizes remain separate.Final Answer:
.title, .subtitle { color: blue; font-weight: bold; } .title { font-size: 2rem; } .subtitle { font-size: 1.5rem; } -> Option AQuick Check:
Shared styles combined, unique styles separate = A [OK]
- Expecting duplicated shared styles for each selector
- Thinking placeholder selectors appear in CSS
- Confusing
@extendwith mixins copying styles
%card { padding: 1rem; border: 1px solid #ccc; }
.panel { @extend card; background: white; }Solution
Step 1: Check
@extendsyntaxThe placeholder selector
%cardmust be referenced with the '%' in the extend statement.Step 2: Identify the error
The code uses
@extend card;missing the '%', causing a syntax error.Final Answer:
Missing '%' before 'card' in the extend statement. -> Option DQuick Check:
Extend placeholder needs '%' = D [OK]
- Forgetting '%' in extend target
- Thinking placeholders can't be extended
- Misunderstanding property units
@extend with a placeholder selector help maintain your Sass code better compared to copying styles into each button class?Solution
Step 1: Understand style duplication problem
Copying shared styles into each button class repeats code, making updates tedious and CSS larger.
Step 2: Explain
@extendadvantageUsing
@extendwith a placeholder merges shared styles into one CSS rule, reducing duplication and file size.Step 3: Benefits for maintenance
Updating shared styles in one place updates all buttons, making code easier to maintain.
Final Answer:
It creates one combined CSS rule for shared styles, reducing file size and easing updates. -> Option CQuick Check:
Extending merges shared styles = A [OK]
- Thinking extend duplicates styles instead of merging
- Confusing extend with JavaScript generation
- Believing styles are disabled until enabled
Ready to prove it?
Pass the test and this pattern moves unknown
