Extending in Sass helps you reuse styles without rewriting them. It keeps your code shorter and easier to manage.
Why extending reduces duplication in SASS
%placeholder { property: value; }
.selector { @extend %placeholder; }Use %placeholder selectors to define reusable styles that don't output CSS on their own.
The @extend directive copies styles from the placeholder into the selector.
%button-base {
padding: 1rem;
border-radius: 0.5rem;
font-weight: bold;
}
.btn-primary {
@extend %button-base;
background-color: blue;
color: white;
}.title and .subtitle share the same text style but have different weights and colors.%text-style {
font-family: Arial, sans-serif;
font-size: 1.2rem;
}
.title {
@extend %text-style;
font-weight: 700;
}
.subtitle {
@extend %text-style;
font-weight: 400;
color: gray;
}This Sass code defines a base card style and extends it for primary and secondary cards. Both cards share padding, border-radius, and shadow, but have different borders and background colors.
@use 'sass:color'; %card-base { padding: 1rem; border-radius: 0.75rem; box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.1); background-color: white; } .card-primary { @extend %card-base; border: 2px solid blue; } .card-secondary { @extend %card-base; border: 2px solid gray; background-color: color.scale(white, $lightness: -10%); } /* HTML example: <div class="card-primary">Primary Card</div> <div class="card-secondary">Secondary Card</div> */
Extending copies styles without repeating code, making maintenance easier.
Use placeholders (%) to avoid generating extra CSS selectors.
Be careful: extending too many selectors can create complex CSS output.
Extending helps reuse styles and reduces repeated code.
Use @extend with placeholders (%) for clean, maintainable Sass.
It keeps your CSS smaller and easier to update.
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
