Например хочу добавить к себе select, подключив dist, а html посмотреть не могу (его просто нет). https://ru.bem.info/libs/bem-components/v3.0.0/desktop/select/#mode
Например хочу добавить к себе select, подключив dist, а html посмотреть не могу (его просто нет). https://ru.bem.info/libs/bem-components/v3.0.0/desktop/select/#mode
У нас на проекте для фронта используются bem-components, а серверной частью занимается Symfony и шаблонизатор Twig. Возникла совершенно не понятная проблема с инициализацией бэм скриптов, если шаблонизатором Twig создавать копии js файлов (или объединять) на стороне сервера, что-бы выдавать пользователю свежие скрипты.
Работает создание копий на деве и объединение всё в один файл на бою в твиге так:
{% javascripts
'@jquery'
'plugins/modernizr/modernizr.js'
'plugins/bem-components/desktop/bem-components.js+bh.js'
'js/common.js'
output='js/compiled/app.js'
%}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
В итоге, к примеру для дева, создаются копии файлов всех перечисленных скриптов с новым названием, что избавляет от проблем кэширования, т.е. на фронте скрипты выглядят уже так:
<script src="/app_dev.php/js/compiled/app_part_1.js"></script>
<script src="/app_dev.php/js/compiled/app_modernizr_2.js"></script>
<script src="/app_dev.php/js/compiled/app_bem-components.js+bh_6.js"></script>
<script src="/app_dev.php/js/compiled/app_common_7.js"></script>
И вот здесь уже возникает не понятная проблема, все скрипты с идентичным исходным кодом, как в оригинале, просто загружаются из другой папки с другими названиями, но с вероятностью 50% БЭМ модули не отрабатываются и не инициализируются. Причем скрипты все загружаются, в правильном порядке, в консоли чисто, ни одной ошибки, просто модули не инициализируются. jQuery код нормально отрабатывает, а вот БЭМ просто молчит. Кто сталкивался с данной проблемой? А то мне уже надоело выслушивать сопли бэкендеров, что бэм такой сякой и дело не в твиге, а в бэме и т.д. и т.п., динозавры они короче говоря, привыкли по старинке ваять кучи непонятного jQuery кода и теперь всё остальное для них, это бред и их мнение истина)) Ну думаю некоторые поймут)
PS: если подключать обычным способом, то все нормально работает.
Привет!
Мы под покровом ночи выпустили bem-components 3.0.0!
Несмотря на мажорную версию, обновление должно быть «бесплатным»: просто обновите версию в bower.json
и пересоберите проект.
Тогда почему мажор? Потому что:
bem-core
до версии 3.0.1
, где оторвали FastClick в пользу собственного решения для iOSbem-xjst
(вы ведь уже давно обновились?)*.bemhtml
в *.bemhtml.js
(даешь подсветку синтаксиса!)Теперь версия публикуется с предкомпилированным CSS, так что больше нет необходимости использовать Stylus для сборки (вреда однако ж тоже никакого ;)
Кроме того, версия теперь публикуется еще и в npm
.
И как всегда, помимо основного варианта поставки в виде исходников, доступна не требующая сборки dist-поставка для локальной установки в проект и для прямого подключения с CDN.
Подробно со списком изменений можно ознакомиться здесь.
Приятного обновления!
PS: project-stub уже обновлен.
Есть блок, в котором есть кнопка и блок с картой от Яндекса. При нажатии на кнопку раскрывается карта. Реализовано через toggleMod
. Заменяю текст кнопки через
var button=...
...
button.findElem('text').text("Скрыть")
Как сделать, чтобы при закрытии карты текст в ней снова стал "показать"?
Добрый день. Кому не сложно, запилите пример использования popup
из библиотеки bem-components
на чистом проекте project-stub
. Пытался подключить как указано в примере на странице компонента, выдает ошибку `popup is not a function'.
Все привет! Недавно начал разбираться с BEM. Для нового проекта понадобилась адаптивная сетка, решил использовать bem-grid.
postcss([bemgrid({
maxWidth: '1100px',
gutter: '10px',
flex: 'flex'
})]).process('a {color: red}').then(function(result) {
console.log(result.css);
});
В консоль выводится код сетки, а вот сохранить данный код в файл никак не могу. Для сборки использую Gulp
Добрый день. Подскажите, пожалуйста, есть ли статья по темам? Не хочу использовать "islands". Как создавать свои темы?
Здравствуйте, я новичок в BEM. Помогите разобраться, пожалуйста.
Я подключил bem-components в проект dist-способом
<link rel="stylesheet" href="https://yastatic.net/bem-components/2.4.0/desktop/bem-components.css">
<script src="https://yastatic.net/bem-components/2.4.0/desktop/bem-components.js+bemhtml.js"></script>
Также у меня есть форма с несколькими select-блоками из bem-components, html которых скопировал со странички описания:
<form class='filter-form i-bem' data-bem='{ "filter-form": {} }'>
<div class="select select_mode_radio select_theme_islands select_size_m i-bem" data-bem='{"select":{"name":"city"}}'>
...
</div>
<div class="select select_mode_radio select_theme_islands select_size_m i-bem" data-bem='{"select":{"name":"region"}}'>
...
</div>
</form>
Мне нужно при изменении значения определенного select, а именно city, выполнить некоторые действия (если интересно, то нужно сделать post-ajax и выполнить submit формы).
Вроде надо что-то типа этого:
modules.define('filter-form', ['i-bem__dom'], function(provide, BEMDOM) {
provide(BEMDOM.decl(this.name, {
onSetMod: {
js: {
'inited': function() {
var sity_select = findBlockInside('cityselect');
city_select.on(this.domElem, 'change', this._onCityChanged, this);
}
}
},
_onCityChanged: function() { ... }
}))
});
Как правильно указать событие и указать конкретный select?
про bemjson и про bemhtml понятно, а про js не понятно...
Привет!
Хочется подписаться через делегирование на бэм-событие изменения чекбокса, как-то так:
modules.define('foo', ['i-bem__dom', 'checkbox'], function(provide, BEMDOM, Checkbox) {
provide(BEMDOM.decl(this.name, {
onSetMod: {
'js': function() {
Checkbox.on(this.domElem, 'change', this._onCheckboxChanged, this)
}
},
_onCheckboxChanged: function() {
...
}
});
});
Однако, похоже такого события нет. Есть ли возможность подписаться на изменение всех чекбоксов внутри блока?
На предыдущих вебинарах мы говорили о декларативных возможностях CSS и BEMHTML, используемых в методологии БЭМ, а также о специальном фреймворке JavaScript для БЭМ.
В этот раз мы расскажем об open-source библиотеке БЭМ-блоков bem-components, используемой в Яндексе. Она вобрала в себя весь накопленный опыт и учитывает множество тонких нюансов от пуленепробиваемости благодаря БЭМ методологии и полному покрытию тестами, до соответствия высоким требованиям доступности (a11y).
Мы разработали её таким образом, что вы легко сможете внедрить её в свой проект, изменить визуальную тему или расширить.
Это вебинар для тех, кто уже немного знаком с БЭМ, знает HTML и CSS хотя бы на базовом уровне, понимает общие процессы веб-разработки и умеет пользоваться командной строкой. Также пригодятся знания, полученные на прошлых вебинарах. Для выполнения заданий понадобится терминал с установленными git, node.js и npm.
Обратите внимание, трансляция начнется в 17:00 16 марта на отдельной странице.
Важно! В этот раз мы хотим поэкспериментировать с Hangouts, так что трансляция будет выглядеть по-новому и предварительная регистрация не нужна.
Читал форум, наткнулся на несколько ответов о responsive, что можно писать стили для разных размеров браузера прямо в файле блока, так и делаю. А как быть, например с кнопками, селектами из bem-components? Какое нибудь есть решение или нужно дописывать media запросы для этих блоков?
Здравствуйте. Извиняюсь, если писать вопросы начинающего сюда это спам. Подскажите, если не прав.
Начал разбираться с БЭМ библиотеками для PHP, имею знание о существовании библиотек =)
Мне удалось установить лишь первую библиотеку через composer(очень удобно), но если верно всё понимаю - ничего не будет работать как минимум без второй.
Вот тут в обсуждении мне подсказали, что есть библиотеки, используемые Node.js, а есть для PHP. Сам пока предпочитаю использовать голый PHP 5.6.
Второй и третьей библиотеки в composer не нашёл, в руководствах по использованию дано указание для установки использовать bower. Если верно понимаю, то composer это менеджер пакетов для PHP, а bower это менеджер пакетов для Node.js Возник диссонанс - зачем мне устанавливать что-то для PHP через bower? Наводит на мысль что делаю что-то неправильно. Вопрос может быть некорректным с высоты опыта опытных=), но хочу ликбеза.
По ссылке выложил свои действия по установке и пробе примеров указанных тут. Номер картинки - это шаг, номер действия. PHP Storm выругался на рисунках 4, 5 и 7, что удалось мне частично исправить на рисунках 8,9. Ну а результат сами видите.
Вопросы: 1) Какие библиотеки мне надо ещё установить и как не бояться bower, если он для работы с php тоже помогает? 2) Возможно это касается настроек самого PHP Storm, но по возможности хотелось бы знать, почему ваши примеры заставляют его ругаться?
BEM Design (pre-alpha) - http://bemdesign.github.io/bemdesign-blocks/
Первый набросок библиотеки блоков с кастомными БЭМ компонентами, для "живого прототипирования".
Библиотека на самом старте. Впереди большая работа последовательных улучшений:
Кит дизайноориентированый. Тем кто хочет внести свой вклад и поработать со:
Велкам!
bemdesign@yandex.ru https://twitter.com/bem_design
Цель: реализовать всплывающие подсказки в таблице при клике на иконку (если сравнивать, то тоже самое можно увидеть на маркете в информации о товаре).
@voischev подсказал, что лучше реализовывать не через popup, а через dropdown. Отсюда вопрос, как кастомизировать тот popup который вызывается через dropdown? Особенно интересует:
1) как установить положение для popup (которое по умолчанию bottom-left). 2) Как правильно изменить внешний вид. 3) В качестве посредника между ссылками и попапами может выступать таблица? 4) Такая конструкция считается годной или как то иначе нужно?
{
elem : 'th',
tag : 'th',
content : [
'1 year',
{
block : 'dropdown',
mix : { block : 'hint', elem : 'handle' },
directions : ['right-center'],
mods : { switcher : 'link', theme : 'project', size : 's' },
switcher : '',
popup : 'Скидка 30% на новую коллекцию. Для активации акции нужно ввести промокод.'
}
]
}
С удивлением обнаружил отсутствие этой функции. Прощу помощи в расширении функционала стандартного модального окна в bem-components.
Всем привет. Расскажите, пожалуйста, какие есть варианты кастомизации bem-components под проект? Хочется отказатья от привязки к теме islands, но в тоже время чтобы блоки имели "основной каркас" и функциональность (выпадающие списки, селекты и т.д), чтобы можно было "додизайнить" под проект.
Один из вариантов решений предлагает @koloskof, он вынес большинство свойств в переменные, с помощью которых можно координально изменить внешний вид темы islands.
Какие существуют еще варианты? Спасибо.
Hi. Как скрыть у блока attach: имя файла (элемент text); крестик для отмены выбора (элемент clear)?
Проверил возможность использовать БЭМ-стек в песочницах. Учитывая наличие dist-поставки bem-core-dist и bem-components-dist препятствий для этого быть не должно.
Бывает возникает желание проверить идею или что-то продемонстрировать. Использовать для этого песочницу, для работы в которой нужен только браузер, самое подходящие место.
Для эксперимента взял блок hello
из статьи Собираем статическую страницу на БЭМ. Вот что получилось:
Шаблоны заворачиваем в модуль:
bemhtml
modules.define('BEMHTML', [], function (provide, BEMHTML) {
BEMHTML.compile(function() {
block('hello')(
js()(true),
tag()('form')
);
});
provide(BEMHTML);
} );
bh
modules.define('BH', [], function (provide, bh) {
bh.match('hello', function (ctx) {
ctx.js(true);
ctx.tag('form');
} );
provide(bh);
} );
Для возможности использовать bemjson
реализовал блок:
/**
* @module bemjson
*/
modules.define(
'bemjson', ['i-bem__dom', 'BEMHTML'],
function(provide, BEMDOM, BEMHTML) {
/**
* @exports
* @class bemjson
* @bem
*/
provide(BEMDOM.decl(this.name, /** @lends bemjson.prototype */ {
onSetMod: {
js: {
inited: function() {
BEMDOM.replace(this.domElem, BEMHTML.apply(JSON.parse(this.domElem.text())));
}
}
}
}));
}
);
Пример использования:
<script type="text/bemjson" class="bemjson i-bem" data-bem="{"bemjson": {}}">
{
"block": "hello",
"content": ""
}
</script>
В проверенных песочницах все отлично работает. Plunker и CodePen дают больше свободы и поэтому больше подходят для экспериментов с БЭМ-стеком, а Pluker больше всего, потому что позволяет все разложить по отдельным файлам.
К сожалению в IE8
не работает хотя все необходимые ресурсы (shim, ie.css) для этого подключены в Plunker и CodePen кроме JSFiddle, ошибка:
'modules' is undefined
bemjson
отдельным файлом в Plunker?UPD: v2
Для чего в bem-components вместо селектора :hover
используется модификатор _hovered
?
Подскажите, пожалуйста. Есть блок, но в разных случая, к нему примиксовываю разные свойства. В случае с elem: 'price', стили блока перекрываются, а в случае с elem: 'heading' - нет. В чем может быть проблема?
{
block: 'title',
mods: { level: 4 },
mix: { block: 'search-result', elem: 'price' },
content: '368,00 $'
},
{
block: 'title',
mods: { level: 4 },
mix: { block: 'search-result', elem: 'heading' },
content: '*******'
},
Хочется в реакт проекте использовать весь браузерный js из bem-core + bem-components this.elem('foo') == что-то такое что реакту понятно
что бы рекваиришь *.browser.js
из bem-components и оно работает в реакте
Никто не думал о подобном? Реально ли это? Что нужно предпринять?
Всем привет. Подскажите, пожалуйста, как переопределить стили блока select через модификатор или киньте пример, в документации ничего не нашел, кроме общего описания, что это возможно https://ru.bem.info/method/key-concepts/#Переопределение-блока .
мне нужно переопределить два свойства: Первое:
.menu-item_theme_islands.menu-item_checked {
/* background: url("data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%…h d%3D%22M13.5.5l-8 12L1.7 8l-1 1.6L5.6 15l9.1-13.4z%22%2F%3E%3C%2Fsvg%3E") 0 50% no-repeat; */
}
заменить на
.menu-item_theme_islands.menu-item_checked {
background-color: #fc0;
}
Второе:
.menu_size_m .menu__group-title~.menu-item_theme_islands, .menu_size_m[class*=menu_mode] .menu-item_theme_islands {
padding: 0 30px;
}
заменить на
.menu_size_m .menu__group-title~.menu-item_theme_islands, .menu_size_m[class*=menu_mode] .menu-item_theme_islands {
padding: 0;
}
В итоге, вместо http://i.imgur.com/HYTWPsN.jpg должно получиться так: http://i.imgur.com/hxGDcse.jpg
Что я сделал:
Добавил модификатор к блоку select ( without : 'tick' )
mods : { mode : 'radio-check', theme : 'islands', size : 'm', without : 'tick' },
mustDeps : { block: 'menu-item', mods: { without: 'tick' } }
})В папке common.blocks/menu-item/_without создал файл menu-item_without_tick.styl
.menu-item_without_tick {
padding: 0;
&.menu-item_checked {
background: none;
background-color: #fc0;
}
}
Где у меня ошибка?
Всем привет! Какой файл нужно править, чтобы при выботе в блоке select какого-то значения, в кнопку попадало не значение text блока select, а icon? Второе, нужно избавиться от __tick, и просто выделять цветом.
Как связать элемент формы radio с подписью через идентификатор. Пробовал устанавливать id, for в подписи не появился.
<span class="checkbox__text" role="presentation">TEXT</span>
Всем привет! Вчера я объединил между собой две ветки, ветку i18n и ветку suggest, так как нужны обе. Все блоки отображаются корректно, все работает, кроме одного. У меня возникла проблема с блоком dropdown (switcher : 'button',) вложенного в блок control-group, а именно, почему-то не прилетает свойство last-child. Если заменяю dropdown на обычную кнопку, все ок. Вот скрины: http://i.imgur.com/DAMqGDb.png http://i.imgur.com/4r0bQ5g.png
При установке модулей Ноды выдает ошибку с питоном ( http://prntscr.com/9qfkyt ). понятно что дело уже пахнет жареным, но я все равно попробовал собрать проект node_modules/.bin/bem server при переходе на страницу http://localhost:8080/desktop.pages/index/index.html получаю http://prntscr.com/9qfm9g . может кто сталкивался с проблемами запуска данной библиотеки под Windows? (лог ноды - https://yadi.sk/i/RGhkB8whn3LDz) Project-stub нормально запускается и показывает демонстрационную страницу Версии софта $ node -v v0.12.2 $ npm -v 2.7.4
Всем привет! Есть ли возможность переопределять эффект открытия блока popup. Хочу сделать так, чтобы он не выезжал снизу вверх, а раскрывался из центра как здесь http://codepen.io/pen? Какой файл править?
Может ли mainOffset принимать отрицательные значения?