Здравствуйте, сегодня мы провели вебинар — «Верстаем веб-страницу по БЭМ-методологии». Надеюсь вам было интересно и полезные знания влились в ваши головы.
Видеозапись будет доступна в течении двух недель.
Ссылки для изучения: — Методология. Определения — История создания БЭМ — Видео: История создания БЭМ. Кратко, сбивчиво и неполно — Side effects in CSS — Методология. Организация файловой системы
Ссылка на слайды на github.com. Ссылка на проект.
Конфиг vim
— это форк vimi
.
Всем БЭМ.
Вопрос.
Допустим у нас есть блок
list
с элементамиlist__item
. У нас есть блокlast-news
(который по сути является аналогомlist
). Он тоже имеет свои элементы. (каждая новость имеет дату и ссылку). Есть также блокevents
по сути копияlast-news
.в итоге получается что-то похожее на это
Это можно как-то оптимизировать через миксы?
@belozyorcev скорее всего да, но ответ зависит от того, что хочется получить в результате. Например, HTML вида
ul>li
можно строить благодаря шаблонам блокаlist
,<a>
— благодаря блокуlink
, а какие-то особенности внешнего вида и/или JS-поведение добавлять через миксы с блокомlast-news
иevents
соответственно.Т.е. получается что-то типо этого:
но чтобы стилизовать
link
нам нужно применять в такой ситуации каскад?Допускается ли такое решение методологией?
Всем привет! Спасибо за отличный вебинар!!! Только начал вникать в тему. Хотел разобрать следующий код, т.к. верстал сам на основе примеров компании mail
1) Укажите пожалуйста на ошибки и объясните, что не так 2) Есть ли минусы у моего подхода?
P.S. Всегда рад критике и советам, которые направят меня в нужное русло
@bemcoder есть возможность оформления кода (для этого нужно указать три апострофа ` (на win-клавиатуре где буква ё) вначале и в конце кода )
@bemcoder
Элементы отделяются от блоков двойным подчёркиванием
__
модификаторы одиночным_
. Повторение каскада, но только в названии класса не есть БЭМ.Вот например
что будет, если у тебя пропадёт уровень
body
в вёрстке? Это будет создавать лишнюю неразбериху. В добавок к этому возникнут трудности при работе сi-bem
(а это очень классная и удобная штука)для начала рекомендовал бы использовать
а лучше
Ага, спасибо! просто я пока тулзами не пользуюсь, пишу все вручную..
Это хорошо :) Что ручками. При использование
bem-stub
поймёшь его крутость.@bemcoder
ИМХО у них довольно странный подход к методологии. Возьми за основу первоисточник, Яндекс. Будет меньше путаницы.
Привет. @bemcoder Спасибо за вопросы. Выше вам верно написали про принципы именования. Если переписать код в соответствии с ними, получится вот такое DOM-дерево:
Еще я убрал один
div
и примиксовалtitle
к элементу__title
блокаrelated
:Теперь можно отбирать узлы DOM-дерева c классом
.related__title
и доопределять блокtitle
без использования каскада.@belozyorcev
да, вполне — родитель может знать о детях.
@dab А есть ссылка на запись, чет не найду. Посмотреть хочу.
@Rahnar запись должна быть в течении пары недель.
@dab, спасибо за вебинар, и ребятам из команды тоже, ответы на вопросы в чатике очень помогали. Из первых слайдов, как я понял, вебинар будет состоять из нескольких частей, с увеличением сложности поэтапно. А есть уже расписание следующих вебинаров?
@basilred, благодарю за отзыв. Да, для плавного ввода в тему будет поэтапное усложнение. Точных дат пока нет. Планируем делать вебинары с перерывом около двух недель.
Здравствуйте! У меня появился вопрос относительно истории развития БЭМ. Перед 2008 годом были предложены правила именования блоков АНБ (абсолютно-независимые блоки). Где к каждому потомку блока приписывался класс основного родителя. В более современных версиях БЭМ предполагается более строгое наследование, элемент блока наследует все имена предыдущих родителей.
Каковы были основные причины такой модификации? Т.е. конфликт вложенности блоков отсутствует в html, также в css можно писать правила без создания дерева, тем самым обеспечивая быстрый поиск (минус — не видна структура). Вероятно, такой выбор связан с возможностью существования подобных именований в самом блоке. Но если проект небольшой и блоки небольшие, то такой конфликт вряд ли имеет место. Поясните, пожалуйста.
@elena90 Можете показать на примере, что имеете ввиду?
@elena90 ты про такой вариант?
page__content__header
Как по мне - это не правильный вариант БЭМа. Такая конструкция создаёт сложности.Лично у меня создаётся такое чувство, что они не поняли БЭМ и всячески его отрицают. АНБ - да, при таком именовании выполняется. Но вот переносимость стремится к нулю.
Если речь действительно о
page__content__header
, то БЭМ ничего такого никогда не рекомендовал.@kompolom, @belozyorcev, @tadatuta Примеры: Подход АНБ (пример, взят c http://clubs.ya.ru/bem/replies.xml?item_no=43):
В современном БЭМе, как я понимаю, идет наслоение потомков (префиксы излишни, но это не столь принципиально):
Вопрос в том, чем вызвано подобное усложнение именования потомков. Один из предполагаемых ответов, что, например, ссылка может быть не одна в блоке, можно добавить ее в шапку услуги (services_head) и тем самым избегается конфликт. Есть ли еще какие-либо причины?
@elena90 парсер вырезал лишнюю по его мнению разметку. Оформите, пожалуйста, ваши примеры с помощью блоков подсветки синтаксиса:
@elena90 от префиксов действительно практически отказались.
Насколько я понял, под
Вы имеете ввиду
block__element
вместо.block .element
Если я понял правильно, то это избавляет от каскада, что ускоряет работу браузера со стилями, а также вносит ясность в стили.@elena90 нет, в БЭМе за
services__list__item
принято бить по рукам. Правильный вариант как раз тот, который у вас в первом примере.Всем спасибо за ответы! Некорректно поняла правильность современной разметки. Предполагала, что второй вариант верный. Буду дальше изучать. Но есть небольшое уточнение:
@tadatuta, вы написали: "в БЭМе за
services__list__item
принято бить по рукам."Т.е. пример выше от bemcoder (20 марта 2015) тоже не совсем корректный? Часть кода:
@elena90 да. и в двух следующих комментариях об этом говорится
@Guria, спасибо! Все поняла!
@elena90, некоторые почему-то не любят, но мне нравился
bem create
из bem-tools. Он вам ни за что не даст создать подобнуюservices__list__item
конструкцию.@basilred спасибо, учту! Пока bem-tools не использую в реальной жизни, только начила изучать.