EN
RU
Forum
Libraries
Classic BEM libraries
Methodology
Quick start
Key concepts
Naming convention
CSS
HTML
JavaScript
File structure
Redefinition level
Block modification
Build
Declarations
Solved problems
History
Articles
FAQ
Technology
Classical BEM stack
Data (BEMJSON)
Templates (BEMHTML, BEMTREE)
Client-side JavaScript (i-bem.js)
Dependencies
DEPS specification
Project stub
bem-react
Why BEM?
classname
core
di
Toolbox
ENB
API
Technologies for working with files
Using the command line
Terminology
How to build a project
How to write a technology
Automation with express
ENB packages
bemhint
CSS naming
File naming
DEPS schema
DEPS specification
bem-tools
bemmet
SDK
@bem/sdk.walk
@bem/sdk.config
@bem/sdk.naming.entity
@bem/sdk.naming.cell.stringify
@bem/sdk.naming.cell.pattern-parser
@bem/sdk.naming.file.stringify
@bem/sdk.decl
@bem/sdk.bemjson-to-decl
@bem/sdk.bemjson-to-jsx
@bem/sdk.import-notation
@bem/sdk.graph
@bem/sdk.deps
@bem/sdk.entity-name
@bem/sdk.file
@bem/sdk.cell
@bem/sdk.bundle
@bem/sdk.bemjson-node
Libraries
Classic BEM libraries
bem-core
bem-components
bem-history
Principles of BEM library development
Tutorials
Classical BEM stack
Creating a static page
Starting a static BEM project
Starting a dynamic BEM project
i-bem.js tutorial
Dist bem-components: adding blocks to a page
bem-core
bem-components
bem-history
Principles of BEM library development
Open source code
Simplicity
Minimalism
Test coverage
Uniformity
Division into private and public APIs
Fine tuning by the user
Support for multiple themes
Explicit over implicit (in the JavaScript API)
Shortcuts in the BEMJSON API
Explicit defaults
Error handling
The scope of BEM
BEM events vs. modifier change events
Modifiers vs. special fields
Composition vs. inheritance vs. delegation
Hierarchy of blocks
Optimization at the block level
Automation of routine processes
Mobile platforms without adaptive layout
Accessibility
Bleeding edge
Libraries
bem-core
bem-components
bem-history
Libraries
Read next
bem-core