Information
- Rating
- Does not participate
- Location
- Симферополь, Республика Крым, Россия
- Works in
- Date of birth
- Registered
- Activity
Specialization
Frontend Developer
Lead
HTML
CSS
BEM
SCSS
Adaptive layout
TypeScript
JavaScript
Crossbrowser layout
Web development
React
В БЭМ это делается смешиванием нескольких блоков/элементов на одной DOM-ноде. Делаете отдельный блок draggable и примешиваете его к любому другому блоку, который можно таскать.
В этом случае отдельный блок отвечает за определённую функциональность и его можно использовать где угодно. Фактически, то, что вы описываете в статье про контракты, есть в БЭМ в виде миксов.
clubs.ya.ru/bem/replies.xml?item_no=712
clubs.ya.ru/bem/replies.xml?item_no=746
Наглядный пример: 30 тысяч div'ов на странице, селекторы заканчиваются на .text (рефлоу 5 секунд) и на div (рефлоу 37 секунд, осторожно! браузер замерзает, а потом оттаивает).
И там же ссылки на примеры, можете замерить сами в разных браузерах.
Чтобы вызвать перерисовку надо заставить браузер пересчитать размеры, например, вызвав offsetHeight
Отличие класса от inline стиля состоит в том, что ему может соответствовать разный CSS как в пределах разных страниц одного проекта, так и в пределах разных проектов.
Ну и названия without-padding и theme_ffffff хотя и говорящие, но не самые лучшие.
«Программировании есть две проблемы — инвалидация кешей и именование переменных» ©
В статье было неверное утверждение ро невозможность использования каскада в БЭМ, от которого пошло непонимание. Я ответил на это тут: habrahabr.ru/post/151931/#comment_5165248
В Яндексе никто никого не заставляет выступать на конференциях, наоборот сложно оторвать людей от работы и уговорить сделать доклад, вместо того, чтобы код писать.
Но если в любой момент структура блока может измениться (в один блок сложиться другой; добавятся дополнительные обёртки или наоборот уберутся; etc), то вам придётся каждый раз переписывать эти дочерние селекторы, которые сильно завязаны на конечную структуру HTML.
БЭМ позволяет отвязать CSS от структуры HTML и управлять ими независимо. Это с одной стороны даёт гибкость в поддержке, а с другой стороны усложняет как HTML, так и CSS. За всё надо платить.
Хотя соглашусь, что управлять модификаторами из скрипта во многих случаях удобнее, чем полагаться на механизм браузера.
Например, если надо выставить состояние hover не при наведении мышью, а при фокусе с клавиатуры или ещё как.
Копипастить код с проекта на проект — обрекать себя на муки обновления кода при изменении HTML. Мы выделяем общие блоки в библиотеку и подключаем её на все проекты.
Если бы я сейчас проектировал всё с нуля, я бы не использовал префиксы.