КБЭМ - Контейнер, Блок, Элемент, Модификатор
Привет, разработчик!
БЭМ - методология для фронтенда от Яндекса. Про неё вы можете найти очень много информации в интернете. Множество компаний внедряет её у себя на проектах и мы не стали исключением. О том как писать по БЭМ правильно можно раздуть холивар, но в этой статье я просто напишу как верстаем мы.
Идея в том, что к стандартным понятиям БЭМ добавляется еще контейнер. Контейнер - это некое хранилище для блока, которое необязательно должно быть связано с блоком. Иначе говоря - блоку все равно, в каком контейнере он находится, мы можем перемещать его из одного контейнера в другой, и смысл не потеряется.
Покажите мне код!
Возьмем кусочек макета и сделаем для него структуру:
Не будем писать структуру для страницы, сосредоточимся на разметке для приведенной картинки. Для начала расставим теги. Мы видим перечень элементов, иначе говоря список.
li - это контейнер, в него мы будем вставлять блок. Напишем разметку для блока:
Следующее правило - каждый элемент должен иметь класс(исключение составляет контент, приходящий из CMS, его нужно стилизовать по тегам). Та же разметка, но уже с классами:
Заметьте, что контейнер(li) имееет абстрактный класс ‘gl_item’, что позволит в дальнейшем вставлять в него другие блоки. Контейнер в данном случае отвечает за сетку(вы можете сделать на float,inline-block,flexbox). Блок - “action_block”. Вы можете в дальнейшем вставить его в другой контейнер. Он содержит элементы - картинку, название, текст и ссылку. Заметьте, что картинка имеет обертку(wrapper), это может уберечь вас от различных проблем. Оригинальная методология БЭМ предусматривает длинные и сложные названия классов, которые могут запутать. Все названия классов мы пишем через ‘_’.
Мы разобрали, что такое контейнер, блок, элемент. Давайте поговорим о модификаторах. Допустим блоки имели бы разное выравнивание картинок:
Картинки будут выравниваться за счет свойства text-align у обертки. Поэтому к обертке мы добавим разные классы-модификаторы. Структура для картинок без всего лишнего:
Ну и css будет следующим:
scss:
css:
Bootstrap
CSS-фреймворк bootstrap - продукт, разрабатываемый твиттером. Это отличный инструмент для быстрого прототипирования или верстки админ. панелей без определенного дизайна. Данный фреймворк не подходит для разработки сайтов с собственным дизайном. Это не субъективное мнение, а абсолютная истина, более подробно об этом можно почитать в статье Bootstrap: an intervention
Советы по набитым шишкам:
- Используйте один основной класс для тега, изменения оформляйте через модификаторы
- Не используйте презентационные классы(“color_red”,”left”,”fz34”)
- Не делайте слишком длинных классов и коротких-непонятных(“actions_list_item_block_link_bottom”,”a_l_i_link”)
- Повторяющиеся свойства оформляйте с помощью @extend(и его аналогах в разных препроцессорах), вместо дополнительных классов
На этом все.