Вопрос 1: Предположим имеется какой-нибудь блок карты (card), который в принципе может переиспользоваться в других проектах. Но в разных проектах разные размеры шрифтов. Каким образом поступить: задавать какой-то размер по-умолчанию (например подходящий для текущего проекта) или создавать модификаторы для размеров (или еще как-то)?
Вопрос 2: Предположим есть блок кнопки (button), и в разных местах одного и того же проекта ему задаются разные размеры, это все нужно задавать через модификаторы?
Вопрос 3: Иногда требуется задать отступы от одного блока до другого, как это лучше реализовать (через модификаторы)?
Вопрос 4: Одна и та же кнопка в разных проектах имеет некоторые различия во внешнем виде, но часть стилей одинаковая, в стиль блока запихнуть только общее, а остальное сделать через модификаторы (_theme_a, _theme_b)?
P.S. Новичок в БЭМ, вопросов много, извините.
1) слишком «размытая» ситуация — в зависимости от деталей реализации могут меняться. Можно исходить из предположение, что если размер меняется, значит это модификации (и меняется, наверняка, не только размер шрифта, но и отступы), значит, это модификация
size
:card_size_small
,card_size_large
,card_size_medium
и т. д. Если зависимость найти не получается (или она действительно ограничивается только размером шрифта), можно использовать микс, например:.card.font.font_size_large
или.card.font.font_size_small
2) нужно понять, что именно влияет на блок, что вынуждает использовать разные размеры. Если дело опять в размере шрифта и внутренних отступах (padding), то это может быть один модификатор:
3) через элементы родительского блока. У самого блока не должно быть «внешней геометрии»: явных
width
иheight
,margin
'ов,position: absolute
илиposition: fixed
(за редким исключением, но такие даже в голову сейчас не приходят) и, соответсвенно,top
,left
,bottom
иright
. А вот у элементов — пожалуйста. Например, естьheader
с логотипом и меню. Соответсвенно, между этими элементами естьmargin
(а не у самих блоковlogo
иmenu
):4) абсолютно верно.