Задать вопрос
stanislav-belichenko
@stanislav-belichenko
Backend PHP Developer

В чем преимущество при использовании CSS-препроцессоров включения во вложенное имя стиля имени его родителя?

Объясню. Например, у нас есть footer. И нам нужно описать его стили. Есть условно два варианта, с которыми я встречался при использовании авторами Sass/Less препроцессоров:

1. Без включения имен родителей в имена потомков:
.footer_bottom
  display: flex

  .autor
    text-align: left

  .policy
    text-align: right

  .company
    text-align: right

Что в итоге дает нам такой код:
.footer_bottom {
  display: flex;
}
.footer_bottom .autor {
  text-align: left;
}
.footer_bottom .policy {
  text-align: right;
}
.footer_bottom .company {
  text-align: right;
}

2. С включением имен родителей в имена потомков:
.footer_bottom
  display: flex

  &--autor
    text-align: left

  &--policy
    text-align: right

  &--company
    text-align: right

И это в итоге дает нам такой код:
.footer_bottom {
  display: flex;
}
.footer_bottom--autor {
  text-align: left;
}
.footer_bottom--policy {
  text-align: right;
}
.footer_bottom--company {
  text-align: right;
}

Понятно, что это достаточно синтетические примеры, но суть, думаю, ясна. В итоге в более менее сложном проекте выходят монстры вроде таких:

5a65b2fbb381d657739321.png
При этом структура кода для такого компонента страницы выглядит примерно вот так:

5a65b3f56ea21021992848.png
Где корневой файл импортирует в себя все эти субкомпоненты:

5a65b442d1b16965379481.png
Заметьте, что импорт происходит на уровне родительского элемента, в него и больше никуда, то есть, на мой взгляд, ничто не обязывает нас использовать в субкомпонентах именно такой код (см. на красную стрелку), который включал бы имя родителя в имена потомков:

5a65b49fb9a17511544980.png

Так вот, вопрос: есть какой-то практический смысл использования имен родителей в именах потомков при написании CSS? Кроме того, что кому-то, возможно, легче читать после этого готовый css. На мой взгляд, от этого становится только сложнее писать html под такой CSS и читать потом готовый код в браузере.
  • Вопрос задан
  • 215 просмотров
Подписаться 3 Средний Комментировать
Решения вопроса 2
dom1n1k
@dom1n1k
Почитайте про БЭМ. Причем желательно не просто краткое объяснение методологии, а с историческими выкладками, откуда и почему он взялся. Ещё очень полезно послушать старые лекции Виталия Харисова на эту тему.

PS На мой вкус, приведенный пример с кучей импортов переусложнен. Вытаскивать в отдельный файл каждый элемент блока нет смысла. Зачем отдельный файл десятку строк кода? А если их там много, значит скорее всего блок надо разбивать на подблоки.
Ответ написан
vicodin
@vicodin
Имею некоторый опыт
такое вложение даёт некоторую "защиту" от того, что класс с подобным именем в другом родительском блоке переопределит такие стили, но это плохой код, так как двойные-тройные-энные селекторы замедляют рендер css, лучше использовать одинарные с БЭМ
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы