Block name is a keyword (usually in English) that makes sence what is a block about.
A block name may be composed of several words separated with hyphen.
A block name usually has a prefix that helps to indentify block purpose.
Prefix for a block with an appearance on a page.
Example
b-menu-horiz
Has concrete appearance on a page.
This is a prefix for an abstract block that does not exist on its own account but is used to build other blocks.
That is also for a block that does not have an appearance but realize some functionality.
Example
i-menu
You cannot see it on the page. It provides a functionality used by b-menu-horiz and b-menu-vert blocks.
Full element name is to indentify which block this element belongs to.
Full element name is formed according to this scheme: b-block-name__element-name
Examples
b-menu-horiz__item b-popup__content
Full name for a modifier of a block is to indetify which block this modifier belongs to.
Full modifier name of a block is formed accroding to a scheme: b-block-name_modofier-name_modifier-value.
Examples
b-link_type_pseudo b-menu-horiz_type_simple b-popup_direction_up
Full name for a modifier of an element is to indentify which element (and which block) this modifier belongs to.
Full modifier name of an element is formed according to a scheme: b-block-name__element-name_modifier-name_modifier-value.
Examples
b-menu-horiz__item_state_current