CSS methodology
BEM methodology was invented at Yandex to develop sites which should be launched fast and supported for a long time. It helps to create extendable and reusable interface components.
Block - a logically and functionally independent page component, the equivalent of a component in Web Components. A block encapsulates behavior (JavaScript), templates, styles (CSS), and other implementation technologies. Blocks being independent allows for their re-use, as well as facilitating the project development and support process.
Element - a constituent part of a block that can't be used outside of it.
Modifier - a BEM entity that defines the appearance and behaviour of a block or an element.
The use of modifiers is optional.
block_name__elem_name-mod_name
block-name__elem-name--mod-name
<nav class="top-nav">
<ul class="top-nav__list">
<li class="top-nav__item top-nav__item--active">
<a href="#home" class="top-nav__link">
<i class="top-nav__icon top-nav__icon--home"></i>
</a>
</li>
<li class="top-nav__item">
<a href="#configure" class="top-nav__link">
<i class="top-nav__icon top-nav__icon--configure"></i>
<span class="top-nav__description">
Configure
</span>
</a>
</li>
<li class="top-nav__item">
<a href="#admin" class="top-nav__link">
<i class="top-nav__icon top-nav__icon--admin"></i>
<span class="top-nav__description">
Admin
</span>
</a>
</li>
<li class="top-nav__item">
<a href="#help" class="top-nav__link">
<i class="top-nav__icon top-nav__icon--help"></i>
<span class="top-nav__description">
Help
</span>
</a>
</li>
</ul>
</nav>
.top-nav {}
.top-nav__list {}
.top-nav__item {}
.top-nav__item--active {}
.top-nav__link {}
.top-nav__icon {}
.top-nav__icon--home {}
.top-nav__icon--configure {}
.top-nav__icon--admin {}
.top-nav__icon--help {}
.top-nav__description {}