Bird
Raised Fist0
SASSmarkup~20 mins

Theming with mixins in SASS - Practice Problems & Coding Challenges

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
Challenge - 5 Problems
🎖️
Theming Mixins Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
📝 Syntax
intermediate
2:00remaining
What is the output CSS of this SASS mixin usage?
Given the following SASS code, what CSS will be generated?
$primary-color: #3498db;
@mixin theme-colors($color) {
  background-color: $color;
  color: white;
}
.button {
  @include theme-colors($primary-color);
}
SASS
$primary-color: #3498db;
@mixin theme-colors($color) {
  background-color: $color;
  color: white;
}
.button {
  @include theme-colors($primary-color);
}
A
.button {
  background-color: blue;
  color: white;
}
B
.button {
  background-color: $primary-color;
  color: white;
}
C
.button {
  background-color: #3498db;
  color: white;
}
D
.button {
  background-color: #000000;
  color: white;
}
Attempts:
2 left
💡 Hint
Remember that SASS variables are replaced with their values when compiled.
🧠 Conceptual
intermediate
1:30remaining
Which option correctly explains the purpose of mixins in theming?
Why do developers use mixins when creating themes in SASS?
ATo reuse a set of CSS properties with different values easily across multiple selectors.
BTo create new HTML elements dynamically in the stylesheet.
CTo store JavaScript functions inside SASS files.
DTo automatically minify CSS files during compilation.
Attempts:
2 left
💡 Hint
Think about how mixins help avoid repeating code.
selector
advanced
2:00remaining
What CSS selector is generated by this SASS code using a mixin?
Consider this SASS code:
@mixin theme-button($bg-color) {
  background-color: $bg-color;
  border: none;
  padding: 1rem;
}
.primary {
  @include theme-button(#007bff);
}
.primary:hover {
  background-color: darken(#007bff, 10%);
}

What is the correct CSS selector for the hover style?
SASS
@mixin theme-button($bg-color) {
  background-color: $bg-color;
  border: none;
  padding: 1rem;
}
.primary {
  @include theme-button(#007bff);
}
.primary:hover {
  background-color: darken(#007bff, 10%);
}
A.primary :hover
B.primary:hovered
C:hover.primary
D.primary:hover
Attempts:
2 left
💡 Hint
Remember how CSS pseudo-classes are written.
layout
advanced
1:30remaining
How does using a theming mixin affect layout consistency?
If a mixin sets padding and margin for buttons in a theme, what is the main benefit for layout?
AIt changes button sizes randomly to create a dynamic layout.
BIt ensures all buttons have consistent spacing, improving visual alignment across the site.
CIt disables all margins and paddings for buttons to save space.
DIt automatically centers all buttons horizontally on the page.
Attempts:
2 left
💡 Hint
Think about how consistent spacing affects design.
accessibility
expert
2:30remaining
Which mixin usage best supports accessible theming for color contrast?
You want to create a mixin that sets background and text colors ensuring good contrast for readability. Which SASS mixin usage below best supports accessibility?
SASS
@mixin accessible-theme($bg, $text) {
  background-color: $bg;
  color: $text;
  @if (contrast($bg, $text) < 4.5) {
    color: adjust-color($text, $lightness: 50%);
  }
}
A@include accessible-theme(#000000, #ffffff);
B@include accessible-theme(#ffffff, #eeeeee);
C@include accessible-theme(#123456, #123456);
D@include accessible-theme(#ff0000, #ff0000);
Attempts:
2 left
💡 Hint
Good contrast means text stands out clearly from background.

Practice

(1/5)
1. What is the main purpose of using @mixin in Sass theming?
easy
A. To write plain CSS without nesting
B. To create reusable style blocks that can accept parameters
C. To import external CSS files
D. To define variables for colors and fonts

Solution

  1. Step 1: Understand the role of @mixin

    @mixin defines reusable style blocks that can be included multiple times.

  2. Step 2: Recognize parameter use in mixins

    Mixins can accept parameters to customize styles like colors or fonts.
  3. Final Answer:

    To create reusable style blocks that can accept parameters -> Option B
  4. Quick Check:

    @mixin = reusable styles [OK]
Hint: Mixins reuse styles with parameters, not variables or imports [OK]
Common Mistakes:
  • Confusing mixins with variables
  • Thinking mixins import files
  • Assuming mixins write plain CSS only
2. Which of the following is the correct syntax to include a mixin named theme-colors with a parameter $main-color set to blue?
easy
A. @include theme-colors($main-color: blue);
B. @mixin theme-colors($main-color: blue);
C. @include theme-colors blue;
D. @mixin theme-colors($main-color) { blue; }

Solution

  1. Step 1: Identify the correct way to apply a mixin

    Mixins are applied using @include, not @mixin.
  2. Step 2: Check parameter passing syntax

    Parameters are passed inside parentheses with variable names and values, like ($main-color: blue).
  3. Final Answer:

    @include theme-colors($main-color: blue); -> Option A
  4. Quick Check:

    @include + parameters = @include theme-colors($main-color: blue); [OK]
Hint: Use @include with parentheses and named parameters [OK]
Common Mistakes:
  • Using @mixin instead of @include to apply mixins
  • Passing parameters without parentheses
  • Confusing mixin definition and usage syntax
3. Given the Sass code:
@mixin theme($color) {
  background-color: $color;
  color: white;
}

.button {
  @include theme(red);
}

What will be the background color of the .button class in the compiled CSS?
medium
A. transparent
B. white
C. red
D. black

Solution

  1. Step 1: Understand the mixin parameter usage

    The mixin theme sets background-color to the passed parameter $color.
  2. Step 2: Check the included value

    The mixin is included with red, so background-color becomes red.
  3. Final Answer:

    red -> Option C
  4. Quick Check:

    Mixin parameter sets background-color = red [OK]
Hint: Mixin parameter directly sets background-color [OK]
Common Mistakes:
  • Confusing text color with background color
  • Assuming default colors override mixin
  • Ignoring parameter passed to mixin
4. Identify the error in this Sass code snippet:
@mixin theme($color) {
  background-color: $color;
  color: white;
}

.button {
  @include theme;
}
medium
A. Missing semicolon after mixin definition
B. Mixin name is misspelled
C. Cannot use color property inside mixin
D. Mixin is included without required parameter

Solution

  1. Step 1: Check mixin definition

    The mixin theme requires one parameter $color.
  2. Step 2: Check mixin usage

    The mixin is included without any parameter, which causes an error.
  3. Final Answer:

    Mixin is included without required parameter -> Option D
  4. Quick Check:

    Missing parameter in @include = Mixin is included without required parameter [OK]
Hint: Always pass required parameters when including mixins [OK]
Common Mistakes:
  • Forgetting to pass parameters to mixins
  • Assuming default parameters without defining them
  • Ignoring error messages about missing arguments
5. You want to create a theme mixin that sets background and text colors, but if no text color is provided, it should default to black. Which mixin definition correctly implements this behavior?
hard
A. @mixin theme($bg-color, $text-color: black) { background-color: $bg-color; color: $text-color; }
B. @mixin theme($bg-color, $text-color) { background-color: $bg-color; color: if($text-color, $text-color, black); }
C. @mixin theme($bg-color) { background-color: $bg-color; color: black; }
D. @mixin theme($bg-color, $text-color) { background-color: $bg-color; color: $text-color; }

Solution

  1. Step 1: Understand default parameter usage

    In Sass, default values for parameters are set using $param: default syntax.
  2. Step 2: Check each option for default text color

    @mixin theme($bg-color, $text-color: black) { background-color: $bg-color; color: $text-color; } sets $text-color default to black, so if omitted, black is used.
  3. Step 3: Verify other options

    @mixin theme($bg-color, $text-color) { background-color: $bg-color; color: if($text-color, $text-color, black); } tries to use if() function incorrectly; @mixin theme($bg-color) { background-color: $bg-color; color: black; } lacks text color parameter; @mixin theme($bg-color, $text-color) { background-color: $bg-color; color: $text-color; } has no default.
  4. Final Answer:

    @mixin theme($bg-color, $text-color: black) { background-color: $bg-color; color: $text-color; } -> Option A
  5. Quick Check:

    Default parameter syntax = @mixin theme($bg-color, $text-color: black) { background-color: $bg-color; color: $text-color; } [OK]
Hint: Use default parameter values with $param: default syntax [OK]
Common Mistakes:
  • Trying to set defaults inside mixin body instead of parameters
  • Using if() function incorrectly for defaults
  • Omitting parameters needed for theming