Владимир Гриненко, Яндекс
Владимир Гриненко,
29 апреля 2016, Frontend Party, Санкт-Петербург
index.css
@import "../../path/to/component/component.css";
@import "../../path/to/component2/component2.css";
/* project styles */
index.js
require(../../path/to/component/component.js);
require(../../path/to/component2/component2.js);
/* project logic */
index.decl.js
['component', 'components2']
<div class="component"></div>
<div class="component2"></div>
Декларация 1 Декларация 2 Декларация 3
[ [ [
'header', 'header', 'header',
'button', 'button', 'button',
'link', 'link',
'attach', + = 'attach',
'menu', 'menu',
'image', 'image',
'checkbox', 'checkbox',
'popup' 'popup',
'textarea' 'textarea'
] ] ]
Декларация 1 Декларация 2 Декларация 3
[ [ [
'button', 'button',
'checkbox', 'checkbox',
'textarea', 'textarea',
'suggest' 'suggest'
'header',
- 'input', =
'button',
'menu'
] ] ]
Декларация 1 Декларация 2 Декларация 3
[ [ [
'header', 'header', 'header',
'input', 'menu',
'link', ⋂ 'button', =
'attach', 'input',
'checkbox', 'image',
'textarea', 'popup',
'footer' 'footer' 'footer'
] ] ]
my-component.css
@import "../../path/to/component/component.css";
@import "../../path/to/component2/component2.css";
/* my-component styles */
my-component.js
require(../../path/to/component/component.js);
require(../../path/to/component2/component2.js);
/* my-component logic */
my-component.deps.js
['component', 'components2']
my-component.deps.js
{
mustDeps: ['component'],
shouldDeps: ['components2']
}
library-blocks/ # Уровень библиотеки
input/
button/ # Базовая реализация блока button
popup/
project/ # Уровень проекта
input/
button/ # Измененная реализация блока button
header/
common.blocks/button/button.css
.button {
height: 25px;
}
touch.block/button/button.css
.button {
height: 50px;
tap-highlight-color: #ccc;
}
@import "library/common.blocks/button/button.css";
@import "library/touch.block/button/button.css";
@import "library/design/common.block/button/button.css";
@import "library/design/touch.block/button/button.css";
@import "project/common.blocks/button/button.css";
@import "project/touch.blocks/button/button.css";
И аналогично для JS.
[‘button’]
Владимир Гриненко
bem.info
info@bem.info
bem_ru #b_