×
Back to book

Class Naming Conventions

How Codebots uses the BEM naming conventions to structure CSS classes

All classes follow the BEM naming convention, which is available on the Get BEM website.

Basic BEM Structure

The BEM methodology allows us to efficiently style large, complex projects. BEM is composed of three elements - blocks, elements and modifiers.

A BEM block refers to a standalone entity that is meaningful on its own. Examples of block classes could be header, input or button.

A BEM element is a part of a block that has no standalone meaning and is semantically tied to its block. Note that is different to a Codebots element. The CSS class for an element is formed as the block name + 2 underscores + the element name - block__element. Examples of element classes could be, header__title, or input__label.

A BEM modifier is flag that changes how a block or element looks or behaves. It is appended to the block or element class using two hyphens: block--modifier or block__element--modifier. Examples of modifier classes include input__label--red or btn--disabled.

Parent Classes

We can use parent classes (such as input-group or btn) as a prefix to create more specific class names for element states, child elements or wrappers.

State

State classes include the class of the parent element as a prefix, following the structure [parent-element]--[state].

Examples:

  • input-group--is-required
  • btn--warning

Child Elements

Child elements also use the class of the parent element as prefix. For example, a parent element of input--group could include many child elements, such as checkbox, radio or textarea.

Child elements follow the structure [parent-element]__[child-element].

Examples:

  • input-group__checkbox
  • input-group__radio
  • input-group__textarea

Wrapper Classes

Wrapper classes may be used to wrap groups of parent elements. For example, multiple input-group elements could be organised into a specific layout. We used the structure [parent-element]-wrapper to name the wrapper class.

Example:

  • input-group-wrapper

We can be more specific with our wrapper names by adding the element type as a modifier. This uses the structure [parent-element]-wrapper__[element-type].

Example:

  • input-group-wrapper__radio