Bird
Raised Fist0
SASSmarkup~3 mins

Why BEM naming with SASS nesting? - Purpose & Use Cases

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
The Big Idea

Discover how a simple naming trick with nesting can save you hours of styling headaches!

The Scenario

Imagine you are styling a website with many buttons, cards, and headers. You write CSS classes like .button, .button--primary, .card__title, and so on, but you write each style separately and repeat the block names everywhere.

The Problem

Writing all these class names fully every time is tiring and easy to mess up. You might forget part of the name or write inconsistent styles. Also, your CSS file becomes long and hard to read because related styles are scattered.

The Solution

BEM naming combined with SASS nesting lets you write styles in a clear, organized way. You write the block once, then nest elements and modifiers inside it. This keeps your code clean and easy to maintain.

Before vs After
Before
.button { color: blue; }
.button--primary { color: white; background: blue; }
.button__icon { margin-right: 0.5rem; }
After
.button {
  color: blue;
  &--primary {
    color: white;
    background: blue;
  }
  &__icon {
    margin-right: 0.5rem;
  }
}
What It Enables

You can write CSS that is easier to read, update, and scale, making your stylesheets neat and your workflow faster.

Real Life Example

When building a website with many components like menus, cards, and buttons, using BEM with SASS nesting helps you keep all related styles grouped, so you quickly find and change them without confusion.

Key Takeaways

BEM naming keeps class names meaningful and consistent.

SASS nesting groups related styles inside blocks.

Together, they make CSS easier to write and maintain.

Practice

(1/5)
1. What does the __ double underscore represent in BEM naming?
easy
A. It separates a block from its element
B. It separates a modifier from a block
C. It is used to join two blocks
D. It indicates a CSS property

Solution

  1. Step 1: Understand BEM structure

    BEM uses blocks, elements, and modifiers. Elements are parts of blocks.
  2. Step 2: Identify the role of double underscore

    The double underscore __ connects a block to its element, e.g., block__element.
  3. Final Answer:

    It separates a block from its element -> Option A
  4. Quick Check:

    BEM element separator = __ [OK]
Hint: Double underscore links block and element in BEM [OK]
Common Mistakes:
  • Confusing __ with modifier separator --
  • Thinking __ joins two blocks
  • Using __ as a CSS property
2. Which of the following is the correct SASS nesting syntax for a BEM modifier block--active inside .block?
easy
A. &__active { color: red; }
B. .block--active { color: red; }
C. &--active { color: red; }
D. --active { color: red; }

Solution

  1. Step 1: Understand SASS nesting with &

    The ampersand & represents the parent selector inside nesting.
  2. Step 2: Apply modifier syntax

    For modifier block--active, use &--active inside .block nesting.
  3. Final Answer:

    &--active { color: red; } -> Option C
  4. Quick Check:

    SASS & + --modifier = &--modifier [OK]
Hint: Use & before --modifier inside block nesting [OK]
Common Mistakes:
  • Writing full class name inside nesting
  • Using __ instead of -- for modifiers
  • Omitting & causing invalid selector
3. Given this SASS code, what CSS selector will be generated for the nested element?
.card {
  &__title {
    font-weight: bold;
  }
}
medium
A. .card__title { font-weight: bold; }
B. .card &__title { font-weight: bold; }
C. .card__title { font-weight: normal; }
D. .card-title { font-weight: bold; }

Solution

  1. Step 1: Understand & usage in SASS

    The & represents the parent selector .card.
  2. Step 2: Combine & with __title

    Combining .card and __title forms .card__title.
  3. Final Answer:

    .card__title { font-weight: bold; } -> Option A
  4. Quick Check:

    SASS & + __element = block__element [OK]
Hint: & plus __element creates block__element selector [OK]
Common Mistakes:
  • Thinking & is literal text in output
  • Confusing __title with -title
  • Ignoring font-weight value changes
4. Identify the error in this SASS code using BEM nesting:
.menu {
  &__item {
    color: blue;
  }
  &--active {
    color: red;
  }
  &__item--active {
    font-weight: bold;
  }
  &-extra {
    padding: 10px;
  }
}
medium
A. Using &--active inside block is invalid
B. Missing nesting for &__item--active
C. No errors, code is correct
D. Incorrect use of &-extra for a modifier

Solution

  1. Step 1: Check each nested selector

    &__item, &--active, and &__item--active follow BEM rules correctly.
  2. Step 2: Analyze &-extra

    &-extra is invalid because BEM modifiers use double hyphen --, not single hyphen.
  3. Final Answer:

    Incorrect use of &-extra for a modifier -> Option D
  4. Quick Check:

    BEM modifiers need --, not - [OK]
Hint: Modifiers use --, not single - after & [OK]
Common Mistakes:
  • Using single hyphen for modifiers
  • Thinking &--active is invalid
  • Missing nesting for combined element-modifier
5. You want to style a BEM block .form with an element __input and a modifier --error on the element. Which SASS nesting code correctly applies red border only when the input has the error modifier?
hard
A. .form { &--error { &__input { border-color: red; } } }
B. .form { &__input { border: 1px solid black; &--error { border-color: red; } } }
C. .form { &__input-error { border-color: red; } }
D. .form-input { &--error { border-color: red; } }

Solution

  1. Step 1: Nest element inside block

    The element __input is nested inside .form using &__input.
  2. Step 2: Nest modifier inside element

    The modifier --error applies to the element, so inside &__input nest &--error.
  3. Step 3: Confirm correct CSS output

    This produces .form__input--error selector with red border, applying only when input has error modifier.
  4. Final Answer:

    Correct nesting with &__input then &--error inside -> Option B
  5. Quick Check:

    Modifier nested inside element = &__element { &--modifier } [OK]
Hint: Nest modifier inside element nesting for element modifiers [OK]
Common Mistakes:
  • Placing modifier outside element nesting
  • Using block--modifier for element modifier
  • Not nesting modifier with & inside element