Здравствуйте.
Изучаю БЭМ и на некоторые вопросы не могу найти ответ:
1) Как обнулять браузерные стили по умолчанию?
Согласно БЭМ
Блок не должен влиять на свое окружение, т. е. блоку не следует задавать внешнюю геометрию (в виде отступов, границ, влияющих на размеры) и позиционирование.
Что делать, если у нас есть блоки
<ul class="nav">
или
<button class="button">
, у которых по умолчанию присутствует браузерный
margin? Каждый раз миксовать с классом элемента (например,
<ul class="parent__nav nav">
) и уже на нем обнулять
margin?
На сайте
https://ru.bem.info/ для
.nav они просто прописали
margin: 0, что идет в разрез с их же правилами.
2) Как правильно выносить стили в модификаторы?
Пример: есть такой код для кнопки
.button {
padding: 20px;
...
тут много других правил
}
Через некоторое время возникла необходимость сделать такую же кнопку, но поменьше. Изначально при верстке макета я бы сделал так:
.button {
...
тут много других правил
}
.button_size_large {
padding: 20px
}
.button_size_small {
padding: 10px
}
Но сейчас у нас два варианта:
1 - переписать стили по примеру выше, найти все старые кнопки в html и добавить им модификатор
button_size_large;
2 - сделать только класс
button_size_small, который будет переопределять старый
padding для
.button, при этом нужно следить, чтобы класс в таблице стилей находился ниже
.button, либо повышать специфичность, что не по БЭМ'у.
С постоянными такими доработками код превращается в кучу мусора, и нормально он выглядит только после первоначальной верстки до каких-либо правок. В чем тут преимущество БЭМ от обычного написания стилей с вложенностью, !important и т.д., или я что-то не так делаю?
3) Согласно БЭМ'у блоки не зависимы, можно как угодно менять их положение на странице, при этом они должны корректно выглядеть.
Предположим, что есть заголовок с размером шрифта 30px. Я знаю, что он на момент разработки шаблона используется только в
.content (width:80%) и нормально там выглядит. Должен ли я думать о том, что в будущем заголовок могут поместить в
.sidebar (width: 20%), и там 30px явно будет много.
Или цвет заголовка в
.content красный, при этом
.sidebar имеет красный фон, и при добавлении его туда текст будет не читабельным.
То же касается адаптива.
Как я должен обеспечивать независимость блока от контекста использования?
4) Сколько не искал, ни разу не находил шаблон сверстанный по БЭМ-методологии, который бы на 100% соответствовал их подходу. Такие вообще существуют?
Тот же
https://ru.bem.info как я писал выше, обнуляет
margin для БЭМ-блока. И тут все нормально, пока не возникнет необходимость еще где-то использовать это меню с другим отступом.
Часто вижу сообщения в стиле
БЭМ - это не набор строгих правил, а лишь рекомендация...
А потом куда не посмотришь, у каждого "свой" БЭМ, со своими исключениями и правилами, которые известны лишь автору.