Bird
Raised Fist0
SASSmarkup~8 mins

Mixin libraries pattern in SASS - Performance & Optimization

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
Performance: Mixin libraries pattern
MEDIUM IMPACT
This pattern affects CSS bundle size and rendering speed by how styles are generated and reused.
Applying reusable styles with mixins in Sass
SASS
.button {
  padding: 1rem 2rem;
  border-radius: 0.5rem;
  background-color: blue;
  color: white;
}

.button1, .button2, .button3 {
  @extend .button;
}
Using a shared class with @extend avoids duplicating CSS rules, reducing file size and improving parsing speed.
📈 Performance GainSingle CSS block reused, reducing CSS size and improving LCP by faster style application.
Applying reusable styles with mixins in Sass
SASS
@mixin button-style {
  padding: 1rem 2rem;
  border-radius: 0.5rem;
  background-color: blue;
  color: white;
}

.button1 {
  @include button-style;
}
.button2 {
  @include button-style;
}
.button3 {
  @include button-style;
}
Each use of the mixin duplicates the CSS properties in the final stylesheet, increasing file size and CSS parsing time.
📉 Performance CostAdds multiple duplicated CSS blocks, increasing CSS file size by ~3x and blocking rendering longer.
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Mixin included multiple timesNo extra DOM nodesNo extra reflowsHigher paint cost due to larger CSS[X] Bad
Shared class with @extendNo extra DOM nodesNo extra reflowsLower paint cost due to smaller CSS[OK] Good
Rendering Pipeline
Mixin libraries generate CSS by copying styles where included, increasing CSS size and parsing time. This affects style calculation and layout phases.
Style Calculation
Layout
Paint
⚠️ BottleneckStyle Calculation due to larger CSS and duplicated rules
Core Web Vital Affected
LCP
This pattern affects CSS bundle size and rendering speed by how styles are generated and reused.
Optimization Tips
1Avoid repeating mixins that generate identical CSS blocks multiple times.
2Use shared classes or @extend to reuse styles without duplication.
3Keep CSS file size small to improve style calculation and LCP.
Performance Quiz - 3 Questions
Test your performance knowledge
What is a main performance downside of using Sass mixins repeatedly in your CSS?
AIt duplicates CSS rules, increasing file size and parsing time.
BIt creates extra DOM elements.
CIt delays JavaScript execution.
DIt causes images to load slower.
DevTools: Performance
How to check: Record a page load and look at the 'Style Recalculation' and 'Layout' events to see if style calculation takes longer than expected.
What to look for: Long style recalculation times and large CSS files in the Network panel indicate inefficient mixin usage.

Practice

(1/5)
1. What is the main purpose of using mixin libraries in Sass?
easy
A. To create HTML templates
B. To write plain CSS without variables
C. To compile Sass into JavaScript
D. To group reusable style blocks for consistent styling

Solution

  1. Step 1: Understand mixins in Sass

    Mixins are reusable blocks of styles that help avoid repetition.
  2. Step 2: Purpose of mixin libraries

    Mixin libraries group many mixins to keep styling consistent and reusable across projects.
  3. Final Answer:

    To group reusable style blocks for consistent styling -> Option D
  4. Quick Check:

    Mixin libraries = reusable style groups [OK]
Hint: Mixins group styles; libraries group mixins [OK]
Common Mistakes:
  • Confusing mixins with plain CSS
  • Thinking mixins create HTML
  • Believing mixins compile to JavaScript
2. Which of the following is the correct syntax to include a mixin named button-style in Sass?
easy
A. @mixin button-style;
B. @include button-style;
C. include(button-style);
D. @use button-style;

Solution

  1. Step 1: Recall mixin creation syntax

    Mixins are created with @mixin name { ... }.
  2. Step 2: Recall mixin usage syntax

    To apply a mixin, use @include name;.
  3. Final Answer:

    @include button-style; -> Option B
  4. Quick Check:

    Use @include to apply mixins [OK]
Hint: Use @include to apply mixins, not @mixin [OK]
Common Mistakes:
  • Using @mixin instead of @include to apply
  • Writing include() like a function
  • Confusing @use with @include
3. Given the Sass code:
@mixin card-style {
  border: 1px solid #ccc;
  padding: 1rem;
  box-shadow: 0 0 5px rgba(0,0,0,0.1);
}

.card {
  @include card-style;
  background-color: white;
}

What CSS will be generated for the .card class?
medium
A. .card { border: 1px solid #ccc; padding: 1rem; box-shadow: 0 0 5px rgba(0,0,0,0.1); background-color: white; }
B. .card { @include card-style; background-color: white; }
C. .card { border: none; padding: 0; background-color: white; }
D. Syntax error, no CSS generated

Solution

  1. Step 1: Understand mixin content

    The mixin card-style defines border, padding, and box-shadow styles.
  2. Step 2: Applying mixin in .card

    Using @include card-style; inserts those styles inside .card, plus the background color.
  3. Final Answer:

    .card { border: 1px solid #ccc; padding: 1rem; box-shadow: 0 0 5px rgba(0,0,0,0.1); background-color: white; } -> Option A
  4. Quick Check:

    Mixin styles + extra styles = full CSS block [OK]
Hint: Mixin styles expand fully inside selector [OK]
Common Mistakes:
  • Expecting @include to remain in CSS output
  • Ignoring mixin styles when included
  • Thinking mixins cause syntax errors
4. Identify the error in this Sass code snippet:
@mixin text-style {
  font-size: 1.2rem;
  color: #333;
}

.title {
  @mixin text-style;
  font-weight: bold;
}
medium
A. Missing semicolon after font-weight
B. Mixin name should be .text-style with dot
C. Using @mixin instead of @include inside .title
D. Cannot use mixins inside class selectors

Solution

  1. Step 1: Check mixin usage syntax

    Mixins are created with @mixin but applied with @include.
  2. Step 2: Identify incorrect usage

    The code uses @mixin text-style; inside .title, which is wrong syntax.
  3. Final Answer:

    Using @mixin instead of @include inside .title -> Option C
  4. Quick Check:

    Apply mixins with @include, not @mixin [OK]
Hint: Use @include to apply mixins, never @mixin [OK]
Common Mistakes:
  • Confusing @mixin and @include
  • Adding dot before mixin name
  • Thinking mixins can't be used in selectors
5. You have a mixin library with multiple mixins for buttons. You want to create a new mixin primary-button that uses the existing button-base mixin and adds a blue background. Which Sass code correctly achieves this?
hard
A. @mixin primary-button { @include button-base; background-color: blue; }
B. @mixin primary-button { @mixin button-base; background-color: blue; }
C. @include primary-button { @include button-base; background-color: blue; }
D. @mixin primary-button { button-base(); background-color: blue; }

Solution

  1. Step 1: Define new mixin with @mixin

    Use @mixin primary-button { ... } to create the new mixin.
  2. Step 2: Include existing mixin inside new one

    Inside the new mixin, use @include button-base; to reuse styles.
  3. Step 3: Add additional styles

    Add background-color: blue; after including the base mixin.
  4. Final Answer:

    @mixin primary-button { @include button-base; background-color: blue; } -> Option A
  5. Quick Check:

    New mixin includes old mixin + extra styles [OK]
Hint: Nest @include inside @mixin to combine styles [OK]
Common Mistakes:
  • Using @mixin instead of @include inside mixin body
  • Trying to call mixins like functions
  • Using @include outside mixin definition incorrectly