#html #css #bem
#HTML #css #bem
Вопрос:
Пример подклассования:
<button class="button button--large">
Пример состояния:
<button class="button button--open">
Эти два существенно отличаются. Однако я не смог найти ни одного соглашения BEM, которое проводило бы различие, они оба были бы записаны как модификаторы.
Я знаю другие методологии, которые могли бы сделать что-то подобное для состояния:
<button class="button is-open">
или
<button class="button is-button-open">
Комментарии:
1. Я бы просто выбрал,
button button--active
а не open, кнопка не открыта, но она активна, когда что-то открыто — если это имеет смысл2. @AndyHolmes Я бы визуализировал неактивную кнопку таким образом, чтобы ее нажатие было бессмысленным, поскольку она неактивна. Словарное определение неактивного — «ничего не делать», но поскольку кнопка ожидает нажатия в обоих состояниях, в обоих состояниях она одинаково занята. Ни в одном из состояний я бы не сказал, что кнопка менее активна. Вот почему я думаю, что такое имя, как open, лучше.
3. Да, я понимаю, но сама кнопка не открыта, независимо от того, на что она влияет. Кнопки по умолчанию неактивны, поэтому
:active
при нажатии на них отображается состояние. Я думаю, вы слишком глубоко вникаете в определение слова active4. @AndyHolmes Я думаю, что на самом деле имеет смысл думать о том, что кнопка управляет как неактивная по умолчанию, если она недоступна, а кнопка — как активатор. Нет смысла активировать активатор. Я думаю о :active скорее как о процессе щелчка, и именно так работает:active , он не ссылается на состояние после завершения щелчка. В html это состояние: фокус. Сама кнопка даже не обязательно должна быть открытой, мы можем рассматривать состояние компонента как открытое, где кнопка реагирует на это открытое состояние.
5. Кнопки по умолчанию неактивны, я не знаю, что еще вам сказать. Они активны только тогда, когда с ними взаимодействовали. Фокус — это когда элемент имеет фокус, активный — когда элемент находится в процессе щелчка — это не одно и то же. Честно говоря, я думаю, что вы идете по долгому и запутанному пути, когда спецификация HTML описывает все это очень четко.
Ответ №1:
В BEM нет официального правила для модификаторов состояний.
Но … на BEM в значительной степени повлияли методы, которые разработчики использовали ранее, например, SMACSS. В SMACSS есть руководство по написанию классов состояний, и в вашем случае это было бы так .is-open
.
Разработчики, которых я знаю, пишут классы состояний в BEM, следуя этому шаблону : .[block]--is-[state]
.
Это все еще допустимый класс-модификатор BEM, и его легко отличить от модификаторов, используемых для композиции статического стиля.