Bird
Raised Fist0
SASSmarkup~8 mins

Content blocks with @content in SASS - Performance & Optimization

Choose your learning style10 modes available
Performance: Content blocks with @content
LOW IMPACT
This affects CSS preprocessing time and the final CSS bundle size, indirectly influencing page load speed.
Reusing styles with dynamic content blocks in Sass
SASS
@mixin button-style($color) {
  background-color: $color;
  border-radius: 0.5rem;
  padding: 1rem 2rem;
  font-weight: bold;
  @content;
}

.button-primary {
  @include button-style(blue) {
    color: white;
    text-transform: uppercase;
  }
}

.button-secondary {
  @include button-style(gray) {
    color: white;
    text-transform: uppercase;
  }
}
Using @content allows injecting unique styles without repeating common styles, reducing CSS duplication.
📈 Performance Gainreduces CSS bundle size by avoiding repeated rules
Reusing styles with dynamic content blocks in Sass
SASS
@mixin button-style($color) {
  background-color: $color;
  border-radius: 0.5rem;
  padding: 1rem 2rem;
  font-weight: bold;
  // Repeating styles without @content
  color: white;
  text-transform: uppercase;
}

.button-primary {
  @include button-style(blue);
  color: white;
  text-transform: uppercase;
}

.button-secondary {
  @include button-style(gray);
  color: white;
  text-transform: uppercase;
}
Repeating the same styles inside each mixin call causes duplicated CSS rules, increasing bundle size.
📉 Performance Costadds unnecessary CSS bytes, increasing bundle size and load time
Performance Comparison
PatternDOM OperationsReflowsPaint CostVerdict
Repeating styles without @contentNo impactNo impactNo impact[X] Bad - larger CSS bundle
Using @content to inject stylesNo impactNo impactNo impact[OK] Good - smaller CSS bundle
Rendering Pipeline
Sass @content is processed at build time, so it does not affect browser rendering directly but impacts CSS size and load time.
→CSS Preprocessing
→Network Load
→Style Calculation
⚠️ BottleneckNetwork Load due to larger CSS files
Optimization Tips
1Use @content to inject unique styles inside reusable mixins.
2Avoid repeating common styles in multiple mixin calls to reduce CSS size.
3Remember @content is processed at build time, so it does not affect runtime rendering.
Performance Quiz - 3 Questions
Test your performance knowledge
How does using @content in Sass mixins affect CSS bundle size?
AIt increases CSS bundle size by duplicating styles.
BIt helps reduce CSS bundle size by avoiding repeated styles.
CIt has no effect on CSS bundle size.
DIt slows down browser rendering directly.
DevTools: Network
How to check: Open DevTools, go to Network tab, filter by CSS files, and compare file sizes before and after using @content.
What to look for: Smaller CSS file size indicates better performance due to less duplicated CSS.

Practice

(1/5)
1. What is the main purpose of @content in Sass?
easy
A. To pass custom styles into a mixin for flexible reuse
B. To define variables inside a mixin
C. To import external CSS files
D. To create loops in Sass

Solution

  1. Step 1: Understand what @content does

    @content allows you to insert custom CSS blocks inside a mixin, making it flexible.
  2. Step 2: Compare with other options

    Variables, imports, and loops are different Sass features unrelated to @content.
  3. Final Answer:

    To pass custom styles into a mixin for flexible reuse -> Option A
  4. Quick Check:

    @content = custom styles in mixin [OK]
Hint: Remember: @content inserts custom styles inside mixins [OK]
Common Mistakes:
  • Confusing @content with variables or imports
  • Thinking @content creates loops
  • Assuming @content is for defining selectors
2. Which of the following is the correct syntax to use @content inside a mixin?
easy
A. @mixin example { @include content; }
B. @mixin example { content(); }
C. @mixin example { @content; }
D. @mixin example { content; }

Solution

  1. Step 1: Recall the syntax for content blocks

    Inside a mixin, @content; is used to insert the passed block.
  2. Step 2: Check each option

    Only @mixin example { @content; } uses @content; correctly with the semicolon.
  3. Final Answer:

    @mixin example { @content; } -> Option C
  4. Quick Check:

    Correct syntax uses @content; inside mixin [OK]
Hint: Use @content; with a semicolon inside mixins [OK]
Common Mistakes:
  • Omitting the @ symbol before content
  • Using parentheses like a function call
  • Forgetting the semicolon after @content
3. What will be the output CSS of this Sass code?
@mixin card {
border: 1px solid black;
padding: 1rem;
@content;
}

.box {
@include card {
background-color: yellow;
}
}
medium
A. .box { border: 1px solid black; padding: 1rem; } .box { background-color: yellow; }
B. .box { border: 1px solid black; padding: 1rem; background-color: yellow; }
C. .box { background-color: yellow; }
D. Syntax error, no output

Solution

  1. Step 1: Understand mixin with @content

    The mixin card adds border and padding, then inserts the passed block with @content.
  2. Step 2: Check how .box includes the mixin

    The block inside @include card { ... } adds background-color: yellow; inside the mixin's content.
  3. Final Answer:

    .box { border: 1px solid black; padding: 1rem; background-color: yellow; } -> Option B
  4. Quick Check:

    Mixin + @content block = combined styles [OK]
Hint: Mixin styles + @content block styles combine inside selector [OK]
Common Mistakes:
  • Thinking @content styles appear outside the selector
  • Expecting separate CSS blocks for mixin and content
  • Assuming syntax error due to block usage
4. Identify the error in this Sass code using @content:
@mixin highlight {
background: yellow;
@content
}

.text {
@include highlight {
color: red;
}
}
medium
A. Missing semicolon after @content
B. Mixin name should be @content
C. Cannot use blocks with @include
D. Background property is invalid

Solution

  1. Step 1: Check syntax of @content inside mixin

    @content must end with a semicolon to be valid.
  2. Step 2: Verify other parts

    Mixin name and block usage are correct; background property is valid CSS.
  3. Final Answer:

    Missing semicolon after @content -> Option A
  4. Quick Check:

    @content requires semicolon [OK]
Hint: Always put semicolon after @content inside mixins [OK]
Common Mistakes:
  • Omitting semicolon after @content
  • Confusing mixin and content names
  • Thinking block usage with @include is invalid
5. You want to create a reusable button style mixin that allows custom hover styles using @content. Which Sass code correctly achieves this?
hard
A. @mixin button { padding: 1rem; border: none; @content; &:hover { @content; } }
B. @mixin button { padding: 1rem; border: none; @content; } .btn:hover { @content; }
C. @mixin button { padding: 1rem; border: none; } .btn { @include button; &:hover { @content; } }
D. @mixin button { padding: 1rem; border: none; @content; &:hover { @content; } } .btn { @include button { color: blue; &:hover { color: red; } } }

Solution

  1. Step 1: Understand the goal

    Create a mixin that sets base button styles and allows custom styles including hover via @content.
  2. Step 2: Analyze each option

    @mixin button { padding: 1rem; border: none; @content; &:hover { @content; } } .btn { @include button { color: blue; &:hover { color: red; } } } defines the mixin with @content inside and inside &:hover, then includes it with a block that passes normal and hover styles. This correctly applies custom hover styles.
  3. Step 3: Why others fail

    @mixin button { padding: 1rem; border: none; @content; &:hover { @content; } } tries to use @content twice in the mixin without passing blocks properly. @mixin button { padding: 1rem; border: none; @content; } .btn:hover { @content; } applies hover styles outside the mixin, losing reusability. @mixin button { padding: 1rem; border: none; } .btn { @include button; &:hover { @content; } } misuses @content outside mixin context.
  4. Final Answer:

    @mixin button { padding: 1rem; border: none; @content; &:hover { @content; } } .btn { @include button { color: blue; &:hover { color: red; } } } -> Option D
  5. Quick Check:

    Mixin with @content block for hover = @mixin button { padding: 1rem; border: none; @content; &:hover { @content; } } .btn { @include button { color: blue; &:hover { color: red; } } } [OK]
Hint: Pass hover styles inside @include block with nested &:hover [OK]
Common Mistakes:
  • Using @content outside mixin
  • Trying to call @content multiple times without blocks
  • Defining hover styles outside mixin losing flexibility
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