Bird
Raised Fist0
SASSmarkup~3 mins

Why @extend directive in SASS? - Purpose & Use Cases

Choose your learning style10 modes available
The Big Idea

Discover how one simple directive can save you hours of tedious CSS updates!

The Scenario

Imagine you are styling a website with many buttons that share similar styles. You copy and paste the same CSS rules for each button type manually.

The Problem

When you want to change a common style, you have to update every copied block. This is slow, error-prone, and can cause inconsistent styles if you miss one.

The Solution

The @extend directive lets you share styles by extending existing selectors. Change the base style once, and all extended selectors update automatically.

Before vs After
✗ Before
.btn-primary { color: white; background: blue; }
.btn-secondary { color: white; background: gray; }
.btn-primary-large { color: white; background: blue; font-size: 1.5rem; }
✓ After
.btn-base { color: white; }
.btn-primary { @extend .btn-base; background: blue; }
.btn-secondary { @extend .btn-base; background: gray; }
.btn-primary-large { @extend .btn-primary; font-size: 1.5rem; }
What It Enables

You can write cleaner, DRY (Don't Repeat Yourself) styles that are easier to maintain and update across your whole site.

Real Life Example

On a large website, you want all buttons to share the same font and padding but differ in colors. Using @extend, you define these shared styles once and extend them for each button type.

Key Takeaways

Manually copying styles leads to mistakes and extra work.

@extend shares styles between selectors efficiently.

It helps keep your CSS clean, consistent, and easy to update.

Practice

(1/5)
1. What does the @extend directive do in Sass?
easy
A. It defines a variable.
B. It creates a new CSS property.
C. It imports external CSS files.
D. It allows one selector to reuse styles from another selector.

Solution

  1. Step 1: Understand the purpose of @extend

    The @extend directive is used to share styles between selectors in Sass.
  2. Step 2: Identify what @extend does

    It copies the styles of one selector into another, reducing repetition.
  3. Final Answer:

    It allows one selector to reuse styles from another selector. -> Option D
  4. Quick Check:

    @extend = reuse styles [OK]
Hint: Remember: @extend shares styles between selectors [OK]
Common Mistakes:
  • Thinking @extend creates new properties
  • Confusing @extend with imports
  • Using @extend to define variables
2. Which of the following is the correct syntax to extend styles from .button to .submit in Sass?
easy
A. .submit { @extend .button; }
B. .submit { extend(@button); }
C. .submit { @extend .button(); }
D. .submit { @extend '#button'; }

Solution

  1. Step 1: Recall correct @extend syntax

    The correct syntax is @extend followed by the selector name without quotes or parentheses.
  2. Step 2: Check each option

    .submit { @extend .button; } uses @extend .button; which is correct. Others use wrong syntax like parentheses or quotes.
  3. Final Answer:

    .submit { @extend .button; } -> Option A
  4. Quick Check:

    Correct syntax = @extend .selector; [OK]
Hint: Use @extend followed by selector without quotes or parentheses [OK]
Common Mistakes:
  • Adding parentheses after selector
  • Using quotes around selector
  • Using wrong function-like syntax
3. Given this Sass code:
.alert { color: red; font-weight: bold; }
.error { @extend .alert; }

What CSS will be generated?
medium
A. .alert { color: red; font-weight: bold; } .error { color: red; font-weight: bold; }
B. .alert, .error { color: red; font-weight: bold; }
C. .error { color: red; font-weight: bold; }
D. .alert { color: red; } .error { font-weight: bold; }

Solution

  1. Step 1: Understand @extend output

    @extend merges selectors so they share the same style block.
  2. Step 2: Apply to given code

    Both .alert and .error share the same styles in one combined selector.
  3. Final Answer:

    .alert, .error { color: red; font-weight: bold; } -> Option B
  4. Quick Check:

    Selectors combined with @extend [OK]
Hint: Remember: @extend combines selectors sharing styles [OK]
Common Mistakes:
  • Expecting duplicated style blocks
  • Thinking styles copy separately
  • Splitting properties between selectors
4. What is wrong with this Sass code?
.card { border: 1px solid black; }
.panel { @extend card; }
medium
A. Missing dot before card in @extend selector.
B. Cannot use @extend inside .panel.
C. Border property is invalid.
D. No styles defined in .panel.

Solution

  1. Step 1: Check @extend selector syntax

    The selector to extend must include the dot for class selectors.
  2. Step 2: Identify error in code

    @extend card; misses the dot, should be @extend .card;.
  3. Final Answer:

    Missing dot before card in @extend selector. -> Option A
  4. Quick Check:

    Class selectors need dot in @extend [OK]
Hint: Always include dot for class names in @extend [OK]
Common Mistakes:
  • Omitting dot before class name
  • Thinking @extend can't be used inside rules
  • Confusing property errors with selector errors
5. You want to create a .warning style that shares all styles from .alert but also adds background-color: yellow;. Which Sass code correctly does this?
hard
A. .warning { @extend alert; background-color: yellow; }
B. .warning { background-color: yellow; @extend .alert(); }
C. .warning { @extend .alert; background-color: yellow; }
D. .warning { @extend .alert background-color: yellow; }

Solution

  1. Step 1: Understand @extend usage with additional styles

    You can use @extend inside a selector and add other properties after it.
  2. Step 2: Check each option

    .warning { @extend .alert; background-color: yellow; } correctly uses @extend .alert; then adds background-color in the same block. Others have syntax errors: parentheses after selector, missing dot before alert, or missing semicolon.
  3. Final Answer:

    .warning { @extend .alert; background-color: yellow; } -> Option C
  4. Quick Check:

    @extend plus extra styles in same block [OK]
Hint: Put @extend first, then add extra styles in same block [OK]
Common Mistakes:
  • Adding parentheses after selector
  • Omitting dot before class name in @extend
  • Missing semicolon after @extend
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