TGViewer
Канал сайта code.mu Канал сайта code.mu @codemu · 1.82K subscribers
Post #273 1.45K
Проблемы модульности в CSS

В современной верстке принято разбивать части сайта на независимые модули. Но есть проблема: обычный CSS это не поддерживает. Сейчас я покажу на примере. Пусть у нас есть следующая верстка:
<div class="parent">
<span class="elem">+++</span>

<div class="child">
<span class="elem">---</span>
</div>
</div>

Пусть я хочу, чтобы у меня был блок parent и блок child. Эти блоки должны работать независимо. Это значит, что если я стилизую какой-то элемент из parent, то элемент с таким же именем в блоке child стилизоваться не должен.

Собственно, в этом и проблема. Для примера я специально сделал два элемента с классом elem в обоих наших блоках. Пусть я хочу стилизовать элемент из блока child. Я напишу следующий CSS код:
.parent .elem {
color: red;
}

Этот CSS, однако, зацепит как elem из родительского блока, так и elem из дочернего. Что же с этим делать? Проблему можно решить через соглашения, которые накладываются на имена классов. В данном случае соглашение - это правило, которое мы накладываем на имена наших CSS классов. Мы говорим, что будем следовать этому правилу и не будем его нарушать. Наиболее известным таким соглашением является БЭМ от Яндекс https://ru.bem.info/methodology/.

Перепишем нашу верстку в стиле БЭМ:
<div class="parent">
<span class="parent__elem">+++</span>

<div class="child">
<span class="child__elem">---</span>
</div>
</div>

Стилизуем наш элемент:
.parent__elem {
color: red;
}

Как вы видите, суть соглашения в случае БЭМ - это то, что в имени элемента указывается имя родителя. Это решает описанную выше проблему. Но так как БЭМ это по сути костыль, то проблема решается не очень хорошо. Нам приходится дублировать имена родителя в каждом его элементе. Из-за этого код становится очень многословным и нарушает принцип DRY (https://code.mu/ru/theory/glossary/DRY/).
  • 🔥 7
  • ❤ 1
More from @codemu
  1. Sep 30, 2026Готовы учебники по Docker Основной: https://code.mu/ru/tool/docker/book/prime/ Высший: htt…
  2. Sep 30, 2026Принимаю заявки на учебники:) Напишите в комментариях, какие еще хотите. Уже делаю (но буд…
  3. Sep 30, 2026Добавил учебники по следующим Python библиотекам: NumPy Pandas PyTorch TensorFlow Кому инт…
  4. Sep 29, 2026Готовы учебники по Filament Основной: https://code.mu/ru/php/framework/laravel/kit/filamen…
  5. Sep 29, 2026Доработал учебник по Next основной перевел с 14 на 16 версию и дописал еще 2 учебника Осно…
  6. Sep 29, 2026Готовы учебники по Nuxt Основной: https://code.mu/ru/javascript/framework/nuxt/book/prime/…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →