Верстка, CSS, HTML, SVG

А еще глупый вопрос про БЭМ можно спросить?

Вадим Канаев
Вадим Канаев
72 242
Общие стили, как правило, задаются вложенным элементам (заголовкам, текстовым блокам, кнопкам и т. д.) – тогда в 99% случаев пропадает смысл привязывать общие стили к section-у.

БЭМ – это же не только именование классов, это еще и модульность, поэтому такие большие блоки (а это целые разделы) не стоит делать тупо модификаторами.

Насчет именования: имя класса должно быть говорящим: когда вы видите класс – вам сразу должно быть понятно, что это за элемент и к чему он относится. Section ни о чем не говорит, просто продублировано название тега (если боитесь использовать глобально обычные about, contacts и т. д., то хотя бы сокращаете до s-about, s-contacts и т. д.).

Ну, и использование записи class="section section_about" не совсем по БЭМ (точнее совсем не по БЭМ) :) такая запись в БЭМ может означать одно из двух:
1) section – это Блок, а section_about – это Элемент внутри вашего section (чего быть не может, т. к. у вас это один и тот же элемент)
2) section – это Блок, а section_about – Модификатор (тоже не по БЭМ, т. к. нижнее подчеркивание (или два, кому как нравится) по стандарту означает принадлежность, а дефис (или два) – Модификатор).

-----
И я не согласна с комментарием выше: БЭМ – штука хорошая и удобная, с низкой специфичностью селекторов (т. е. сайт, сверстанный по БЭМ легко поддерживать в дальнейшем), и БЭМ ничего не нарушает и уж точно не отрицает каскадирование (товарищ выше, видимо, путает с вложенностью, а вложенность делает селекторы высокоспецифичными, что усложняет дальнейшую поддержку и незначительно, но негативно влияет на производительность).
Никита Потапов
Никита Потапов
15 925
Лучший ответ
Вадим Канаев Спасибо за подробный ответ.
Но все-таки я не понимаю: ну пусть не section. Пусть ссылка в меню - class="menu__item". А если она активная - это получается class="menu__item--active" и все стили из menu__item нужно будет копировать? class="menu__item active" - так по БЭМ нельзя?
Кхм, нет. Тег вообще не указывается в имени класса. Будет contacts, contacts__address, и т. д.
Общие стили - отдельный общий класс.

В целом, БЭМ это форменный маразм, который живет только благодаря тому что усиленно форсится среди не шибко образованных и осведомленных верстунов. Он нарушает основные принципы CSS, в частности - отрицает каскадирование. Крайне не советую.
Вадим Канаев Не, это я для общего развития. Нужно же быть в курсе.

А тег в класс, может, имеет смысл вляпывать в таком случае? Если, например, в разделе "клиенты" находится список клиентов. Тогда удобнее section_clients, потому что внутри список с классом clients, а в нем элементы с классом client.