DEV Community

Nesha Zoric
Nesha Zoric

Posted on

Basic Rules of RSCSS and BEM Systems

Often, there is a lot of confusion on how to use CSS properly. This document is here to provide a clarification.

The SASS 3 preprocessor introduces a new syntax known as SCSS which is used in Kolosek's projects.

One of the most important things to learn is nesting in Sass.

The two most frequently used guide systems are RSCSS and BEM. I will go through the basics of both systems in order to ensure you use them properly in any current and future projects.

General Rules

First, let's take a look at some general CSS rules that should be followed.

  1. When writing CSS, classes should be used, while IDs should be avoided.
  2. Use the SCSS syntax, never the SASS syntax.
  3. Use two spaces for indentation.
  4. When using multiple selectors in the rule declaration, give each selector its own line.
  5. When a margin or padding helper class needs to be used, first see if it could be incorporated into the elements CSS rules, to avoid having too many classes added to a single element.
  6. Do not nest selectors more than 2 levels deep.

RSCSS

Components

When working with RSCSS you should think in components. Each piece of UI should be viewed as an individual component.

Classes of components should be named with two words, with a dash in the middle.

Some of the naming examples include:

  • search-form,
  • photo-container,
  • primary-button.

Elements

Each component contains elements. Classes should have only one word.

If an element contains multiple words, they should be joined together to make one word.

For example:

  • userimg,
  • smalltext,
  • navlink.

Using tag names and ids while writing your CSS should be avoided.

Variants

Variants can be used for** both component and element names*.
Class names for variants are **prefixed with a dash
*.

For example:

  • class="button-primary -large",
  • class="avatar -round",
  • class="input-form -wide".

In the example below, I will break down the components into elements and show a real life usage of RSCSS.

Group-10--1-

The image shows a simple input field with a button and placeholder text.
First, we will identify the component and break it down to elements.

Group-11

The component includes the input field and submit button.

Group-11.1--1-

Now, it is time to write the CSS classes. I'll name the component, element, and variable.

.signup-form {
   .inputfield {
     ...
   }
   .submitbtn {
     ...

     &.-inverted {
       ..
     }
   }
}
Enter fullscreen mode Exit fullscreen mode

For naming the elements, I connected the two words (didn't use a dash or underscore). A variable was used for defining the style of the button. Therefore, both submitbtn and -inverted of the classes will have to be used on the button element.

BEM

BEM is a methodology that based on the Block - Element - Modifier system. Only class name selectors are used, ids are to be avoided.

Blocks

Blocks can be nested, or can interact with each other. They are similar to components in RSCSS, and are semantically equal.

Bloks usually have a class name with one word or two words separated by a dash. Block names may consist of Latin letters, digits, and dashes.

Elements

Elements are a part of the block.

Element names may consist of Latin letters, digits, dashes and underscores. The class name is formed with the name of the block plus two underscores and the element name. For example: " forminput".

Modifiers

Modifiers are used on elements to show a change in appearance, behavior or state. An elements design is changed by adding or removing a modifier.

Modifier names may consist of Latin letters, digits, dashes and underscores.
A modifier class name is formed by taking the name of the element class and adding two dashes plus a name of the modifier. When an element has a modifier, it must have both the element class and modifier class.
For example: "blockinput blockinput--dashed".

In the next example, you can see an example of the BEM methodology.

Group-18--1-

The above image shows a block which has the class "form". It consists of an input field and a submit button.

Group-17

Now, you have identified the elements within the block. Those elements are "input" and "submit". The "submit" element has an appearance modifier which makes the button wider.

According to all of this information, our stylesheet will be written as:

.form { }
.form__input { }
.form__submit { }
.form__submit--wide { }
Enter fullscreen mode Exit fullscreen mode

The HTML file will look like this:

<form class="form">
  <input class="form__input" placeholder="your email address" />
  <input type="submit" class="form__submit form__submit--wide" />
</form>
Enter fullscreen mode Exit fullscreen mode

I hope this article helped you understand the basics of RSCSS and BEM, as well as the class naming conventions.

Be sure to check other detailed articles related to CSS properties such as this one: CSS Positions, SASS and LESS Nesting, CSS Columns.

This article is originally published on Kolosek Blog.

Top comments (1)

Collapse
 
windo profile image
Herwindo Artono

Hi Nesha, thanks for your explanation in those two methods. Do you have suggestion when we should use one? especially when the project is using bootstrap.

I want to add some more in RSCSS methodology, that we suggested to using ">" or child selector whenever possible to prevent bleeding (rscss.io/elements.html). So in the example above we better to write:

.signup-form {
   > .inputfield {...}
   > .submitbtn {...}
}

Again, Thanks !👍🏼