CSS Naming: BEM, scoped CSS, CSS modules and CSS-in-JS explained

CSS Naming: BEM, scoped CSS, CSS modules and CSS-in-JS explained

The scope of css is global. As the project gets bigger and bigger and more people come to it, naming becomes a problem. Here are some solutions to the naming problem.

1. BEM

The name is in the form of .block__element--modifier. The name has meaning. Block can be regarded as a module and has a certain scope.

Examples

.dropdown-menu__item--active

2. Scoped CSS

Reference: vue-loader.vuejs.org/zh/guide/sc…

Goal: The current component style will not affect other components

Add a unique attribute to the component's DOM node and convert the CSS in the style tag to match the attribute, making the CSS scope limited

Examples

<style scoped>
.example {
  color: red;
}
</style>
 
<template>
  <div class="example">hi</div>
</template>

Conversion results:

<style>
.example[data-v-f3f3eg9] {
  color: red;
}
</style>
 
<template>
  <div class="example" data-v-f3f3eg9>hi</div>
</template>

3. CSS modules

Reference: vue-loader.vuejs.org/zh/guide/cs…

Convert the CSS selector into a unique string and apply it to the DOM. It is named by algorithm, recording the mapping table from human naming to algorithm naming

Examples

<style module>
.red {
  color: red;
}
</style>
<template>
  <p :class="$style.red">
    This should be red
  </p>
</template>

Conversion results:

<style module>
._1yZGjg0pYkMbaHPr4wT6P__1 {
  color: red;
}
</style>
<template>
  <p class="_1yZGjg0pYkMbaHPr4wT6P__1">
    This should be red
  </p>
</template>

4. CSS-in-JS

Reference: github.com/styled-comp…

Express the css content with a unique selector. Same as CSS modules, named using an algorithm. Treat CSS as a string of JS, giving CSS more capabilities

Examples

<template>
  <css-in-js></css-in-js>
</template>
 
<script>
  import styled from 'vue-styled-components';
  export default {
    components:
      cssInJs: styled.div `
                color: red;
            `
    }
  }
</script>

Conversion results:

<template>
    <div class="gXTzCp"></div>
</template>
<style>
.gXTzCp {
    color: red;
}
</style>

V. Conclusion

  1. BEM makes naming regular and meaningful. Blocks can be considered as modules and have a certain scope.
  2. scoped css limits the scope of CSS, regardless of naming. Unable to adapt to multiple themes
  3. CSS modules use algorithmic naming, which eliminates naming conflicts and limits the scope of CSS. Unable to adapt to multiple themes
  4. CSS-in-JS uses algorithmic naming and has the advantages of CSS modules. At the same time, css is regarded as a string of js, giving css more capabilities

This is the end of this article about CSS naming: BEM, scoped CSS, CSS modules and CSS-in-JS. For more relevant CSS naming content, please search 123WORDPRESS.COM’s previous articles or continue to browse the following related articles. I hope everyone will support 123WORDPRESS.COM in the future!

<<:  9 super practical CSS tips to help designers and developers

>>:  js handles account logout when closing the browser

Recommend

Detailed explanation of adding dotted lines to Vue element tree controls

Table of contents 1. Achieve results 2. Implement...

Solution to the problem of failure to insert emoji expressions into MySQL

Preface I always thought that UTF-8 was a univers...

Example of Vue uploading files using formData format type

In Vue, we generally have front-end and back-end ...

Summary of MySQL database and table sharding

During project development, our database data is ...

Implementing a simple calculator with javascript

This article example shares the specific code of ...

The whole process of upgrading Angular single project to multiple projects

Table of contents Preface Development Environment...

How to clear default styles and set common styles in CSS

CSS Clear Default Styles The usual clear default ...

An example of how to implement an adaptive square using CSS

The traditional method is to write a square in a ...

The implementation process of ECharts multi-chart linkage function

When there is a lot of data to be displayed, the ...

CSS3 frosted glass effect

If the frosted glass effect is done well, it can ...

Ubuntu boot auto-start service settings

How to create a service and auto-start it in Ubun...

How to implement scheduled backup of CentOS MySQL database

The following script is used for scheduled backup...

MySQL variable declaration and stored procedure analysis

Declaring variables Setting Global Variables set ...

Development details of Vue3 components

Table of contents 1. Introduction 2. Component De...