Скажем, у меня есть стилизованный флажок (подумайте о материальном дизайне, где немного идет, чтобы достичь желаемого стиля флажка). Какой блок отвечает за изменение дочернего блока, зависящего от родителя?
Пример компонента - флажок
Итак, у меня есть следующее:
<div class="Checkbox">
<label class="Checkbox__label">
<input class="Checkbox__input" type="checkbox" checked=true />
<span class="Checkbox__icon glyphicon glyphicon-ok"></span>
<span class="Checkbox__text">{label}</span>
</label>
</div>
Я создаю каждый элемент в блоке для базы. В контексте приложения блок флажка может жить во многих других блоках (со своими собственными структурами BEM).
Пример других блоков
Флажок с изображением слегка отличается, если говорить в "Компактной панели":
<div class="Panel Panel--compact">
<p>Disclaimer.. [text]</p>
<Checkbox label="I Agree" />
</div>
Вариант один - родительский "знает" о ребенке
Итак, если Compact Panel
будет "осведомлен" о различных дочерних блоках и будет стилизовать их, так:
// Checkbox.scss
.Checkbox {
margin: 15px;
// .. other
}
// Panel.scss
.Panel {
&.Panel--compact {
margin: 0;
padding: 2px;
}
&.Panel--compact .Checkbox {
margin: 0;
padding: 1px;
}
}
Вариант второй - ребенок "знает" о родителях
Или панель имеет нулевую осведомленность, а флажок проверяется для родительской области.
// Checkbox.scss
.Checkbox {
margin: 15px;
padding: 15px;
// .. other
}
.Panel.Panel--compact .Checkbox {
margin: 0;
padding: 1px;
}
// Panel.scss
.Panel {
&.Panel--compact {
margin: 0;
padding: 2px;
}
}
Вариант три -?
Возможно, есть и другие варианты.