visible: true
or false
) or either represent a key-value pair (code> size: large, medium
, small
). This is somewhat similar to the attributes in HTML, but still not the same. An entity may have several modifiers if these modifiers describe different things.
<body>
or even <html>
) and ending with deeply nested blocks, you create a semantic layer on top of the existing DOM structure. This layer is called a BEM tree. The BEM tree makes it possible to interact with the whole document in terms of BEM, from the point of view of semantics, abstracting from the features of the DOM implementation.
<h1>
... <h6>
. They created different tags, while the modifiers of the same entity block were required. In HTML5, they are trying to fix this with sectional elements, but with support in browsers, this is not very good.
BLOCK heading MOD level: alpha, beta, gamma
. , datalist , , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
. , datalist
, , .
, :
BLOCK text-input MOD multiline MOD disabled ELEMENT text-field ELEMENT label
, . , , multiline
— . HTML , — , . textfield
label
. , , .
BLOCK checkbox ELEMENT tick-box ELEMENT label
BLOCK radio ELEMENT radio-button ELEMENT label
. - <label>
, <input>
.
BLOCK select MOD disabled MOD multiple ELEMENT optgroup ELEMENT option MOD disabled MOD selected
select
label
, - select
. . , select
, option
disabled
. , : , — option
(, !). .
. , !
CSS
, CSS. ?
, CSS- , . CSS , .
CSS
:
, ; , ; ( _
), .
CSS-, :
.b-heading .b-text-input
b-
«» . , . , , CSS ( !) .
CSS- , :
.b-text-input__label .b-text-input__text-field
(, .b-block__elem1__elem2
-).
, . CSS- «», , :
.b-text-input_disabled .b-select__option_selected
. — «-», :
.b-heading_level_alpha
- :
<div class="b-heading b-heading_level_alpha">BEM</div>
CSS -
CSS . — CSS. BEM ID, . .
CSS-:
CSS - , , .
«» : CSS-. , , , ( CSS ) . , , .
. :
td.data { background-color: white } td.summary { background-color: yellow }
:
.final-summary { background-color: green }
, tag.class
.class
, CSS-.
, :
td.final-summary { background-color: green }
, , , .
, ?!
— , . , , , . CSS , .
? , CSS, Cascading Style Sheets?
, - . , , . , , , ( !) , :
; ; .
CSS-, . , . « » ( ) , . , . , , — , , .
CSS , CSS- . , CSS . , 250 — , . CSS , , « ».
, CSS?! , , , . , , — . , :
.b-text-input_disabled .b-text-input__label { display: none; }
, , , , ( ), - ! , .
, ( , , CSS-). , ( !), .
( )
, CSS? : , . « », . «» , ( ) . - CSS- . ; . , .
— . , . ?
, (Nicolas Gallagher) , . , , .
, , : -, , . , .
, - , . — , , .
JavaScript -
- JavaScript-?
CSS, .
, (HTML, CSS, JavaScript, , ) — polyfill, , jQuery, API DOM.
HTML , . , Web Components, , , , API, .
. , «», , , . «- » — .
— . — , «», «». , SQL XSLT — , , , . , .
, . i-bem.js
, , , , , -.
BEMDOM.decl('b-dropdown', { onSetMod: { disabled: function(modName, modVal) { this.getLabel().setMod('hidden', 'yes'); if (modVal === 'yes') { this.getPopup().hide(); } }, open: { yes: function() { this.populateList(); } } }, /* … */
b-dropdown
.
, CSS, CSS-, .
b-editor
:
BEMDOM.decl('b-editor', { onSetMod: { hotkeys: { windows: function() { this.delMod('theme'); this.loadKeyMap('windows'); }, emacs: function() { this.setMod('theme', 'unix'); this.loadKeyMap('emacs'); enableEasterEgg(); }, '': function() { this.clearKeyMaps(); this.delMod('theme'); } } } /* … */
, .
, , ( — ):
BEMDOM.decl({ block : 'b-popup', modName : 'type', modVal : 'inplace' }, { appear: function() { // makeYouHappy(); } });
, type
: inplace
.
«» -, , , . , . :
BEMDOM.decl({ block: 'b-link', 'modName': 'pseudo', 'modVal': 'yes' }, { _onClick : function() { // _onClick, // b-link this.__base.apply(this, arguments); // CSS, // // this.setMod('status', 'clicked'); } });
_onClick
b-link
, _pseudo_yes
. .
HTML- JavaScript , -.
-
, ? — -, , DOM, (, , ):
BEMDOM.decl('b-checkbox-example', { onSetMod: { js: { inited: function() { var checkbox = this.findBlockInside({ block: 'b-form-checkbox', modName: 'type', modVal: 'my-checkbox' }); BEMDOM.append(this.domElem, 'Checkbox value: ' + checkbox.val()); } } } } );
, API-, this.elem('name')
this.findBlockOutside('b-block')
. ( ), , - -.
.
, , .
-, .
CSS-, ( ). , CSS, i-bem.js
API ( ):
// setter this.setMod(modName, modVal); // getter this.getMod(modName); // this.hasMod(modName, modVal); // this.toggleMod(modName, modVal); // this.delMod(modName);
, .
-
JavaScript- , - .
«» , :
-, DOM-
API, DOM,
-.
, .
, .
, CSS ( ,
..). inline CSS .
, - .
jQuery,
- :
jQuery BEM plugin jQuery BEM Helpers ( setMod
getMod
)
— Style Guide
, - .
, , ™. , PDF-, , , . , , - : - , «» .
, , « »? « », . , , ? «», .
, «» .
. (), ( ).
, « » «», , (, , «» -). : , , «pixel perfect» . , ( — --) ! — , . , , .
, , , — , , — UX-. , , « ».
, ( ) , « » , - . , (-, , ) ; , — . , , :
: . , — . , , , , — , .
, , . , , API , « » , . : , , , : , — .
, - , , :
() , , () , .
. , ?
// b-popup // _hidden _size _big _medium _large _direction _left _right _top _bottom _color-scheme _dark _light // __anchor-node __popup-box __close-btn __controls __ok __cancel
- ( ), , , , !
, . - CSS-, YAML .
, . , . , .. , ( - ?!), — , .
, . , — , .
— « » , -. , — . , :
/blocks /b-button /b-heading /b-flyout /b-menu /b-text-field
( ..) .
:
/blocks … /b-jquery /b-model
«» :
/b-menu b-menu.js b-menu.css b-menu.tpl
«» — , :
/b-menu /__item b-menu__item.css b-menu__item.tpl /_horizontal b-menu_horizontal.css /_theme /_dark b-menu_theme_dark.css /_light b-menu_theme_light.css b-menu.css b-menu.js b-menu.tpl
, . .
, ? () . JS- , ? , (JS, HTML, CSS) .
, . .
, :
/common /blocks /b-heading /b-menu … /pages /intro /blocks /b-heading b-heading_decorated.css /b-demo /b-wizard …
/common/blocks
, .
( /pages/intro
) : , /pages/intro/blocks
, ( ) «» ( _decorated
b-heading
).
, ( , , ).
- :
/common.blocks /desktop.blocks /mobile.blocks
common
, mobile
desktop
, . , , .
- ( ). , . - , . « ».
- , JavaScript CSS , UglifyJS CSS Optimizer . RequireJS , , .
-? bem-tools .
, , : , , .
, , ... ?
. - , , , , : -.
.
, . , DOM . , , . , « » -, .
? , , , , .
Source: https://habr.com/ru/post/234905/