В предыдущей заметке я писал, что модификаторы элементов, в общем случае, не должны влиять на другие элементы.
/* Плохой пример! Не повторяйте такого */
.block {
&__element {
}
&__child {
color: black;
}
&__element_active &__child {
color: red;
}
}
Если приглядеться внимательно к получившейся конструкции, то можно найти аналогию с модификатором блока. Так оно и есть. Опишем элемент как новый блок с именем block-element
и всё встанет на свои места.
/* Хороший пример. Декомпозиция упростила
взаимоотношения между элементами */
.block {
&__element {
}
}
.block-element {
&__child {
color: black;
}
&_active &__child {
color: red;
}
}
На одних и тех же «физических» DOM-элементах мы разместили два «логических» блока.
<div class="block">
<div class="block__element block-element">
<span class="block-element__child">Some text</span>
</div>
</div>
Миксин для генерации Блока
<article class="block">
<h1 class="block__title">
<span class="block__title-wrap">My cool title</span>
</h1>
…
</article>
Предположим, что есть миксин, который генерирует стили не только для текущего элемента, но и для каких-то его дочерних элементов, и вы планируете его повторно использовать в разных блоках.
.cool-title(@color: yellow) {
font-size: normal 24px/1 sans-serif;
&-wrap {
background: @color;
}
}
.block {
&__title {
.cool-title();
}
}
Как только вам захотелось так сделать, то значит вы свернули с правильного пути. Тут дело в том, что наименования элементов будут создаваться неявным образом из названия элемента и части, которую приклеивает к нему миксин.
Лучше представить такой миксин в виде отдельного блока и позволить ему генерировать имена элементов и модификаторов явным образом.
.cool-title(@color: yellow) {
font-size: normal 24px/1 sans-serif;
&__wrap {
background: @color;
}
}
.block-title {
.cool-title();
}
Опять у нас на одних и тех же DOM-элементах прекрасно уживаются два блока.
<article class="block">
<h1 class="block__title block-title">
<span class="block-title__wrap">My cool title</span>
</h1>
…
</article>
Коментарии к заметке
Что скажешь о таком?
Не совсем понимаю что иллюстрирует это фрагмент кода. Поэтому даже не знаю что ответить на это.