BEM规范

BEM 规范

BEM(Block、Element、Modifier)是一种 CSS 类名命名规范。该规范的核心思想是将页面分解成独立的块(Blocks)、元素(Elements)以及修饰器(Modifiers),以提高开发的效率和质量。这些概念有助于团队协作,简化代码管理和维护,并减少CSS特异性的问题,从而降低样式冲突的风险。

三个部分的具体含义为:

  • Block :页面中的大区域,表示最顶级的划分,例如:轮播图(banner)、布局(layout)、文章(article)等等。
  • element :区域中的组成部分,例如:轮播图中的横幅图片(banner__img)、轮播图中的容器(banner__container)、布局中的头部(layout__header)、文章中的标题(article_title)。
  • modifier :可选。通常表示状态,例如:处于展开状态的布局左边栏(layout__left_expand)、处于选中状态的轮播图小圆点(banner__dot_selected)。

在某些大型工程中,如果使用BEM命名法,还可能会增加一个前缀,来表示类名的用途,常见的前缀有:

  • l: layout,表示这个样式是用于布局的
  • c: component,表示这个样式是一个组件,即一个功能区域
  • u: util,表示这个样式是一个通用的、工具性质的样式
  • j: javascript,表示这个样式没有实际意义,是专门提供给js获取元素使用的

结构:namespace-block__element--Modifier

BEM 规范结合 sass

bem.scss

scss 复制代码
$namespace: 'xz' !default; 
$block-sel: '-' !default;
$element-sel: '__' !default;
$modifier-sel: '--' !default;

@mixin b($b){
    .#{ $namespace + $block-sel + $b}{
        @content;
    }
};

@mixin e($e){
    $parent: &;
    @at-root{
        #{ & + $element-sel + $e}{
            @content;
        }
    }
};

@mixin m($m){
    $parent: &;
    @at-root{
        #{ & + $modifier-sel + $m}{
            @content;
        }
    }
}

vite.config.ts

ts 复制代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
    plugins: [vue()],
    css:{
        preprocessorOptions: {
            scss: {
                additionalData: '@import "./src/bem.scss";'
            }
        }
    }
})

App.vue

vue 复制代码
<template>
<div class="xz-test">
    xz
    <div class="xz-test__div">
        DZ
        <div class="xz-test__div--success">
            xxz
    	</div>
    </div>
</div>
</template>

<script setup lang='ts'>

</script>

<style scoped lang="scss">
    @include b(test) {
        color: red;
        @include e(div){
            color: blue;
            @include m(success){
                color: yellow;
            }
        }
    }
</style>
相关推荐
清风ai明月3 分钟前
在vue3中Promise是什么
vue.js
疯狂踩坑人12 分钟前
【React 19 尝鲜】第一篇:use和useActionState
前端·react.js
毕设源码-邱学长15 分钟前
【开题答辩全过程】以 基于VUE的打车系统的设计与实现为例,包含答辩的问题和答案
前端·javascript·vue.js
用户390513321928818 分钟前
JS判断空值只知道“||”?不如来试试这个操作符
前端·javascript
海云前端118 分钟前
前端面试必问 asyncawait 到底要不要加 trycatch 90% 人踩坑 求职加分技巧揭秘
前端
麦麦大数据42 分钟前
J009 美食推荐可视化大数据系统vue+springboot
vue.js·spring boot·mysql·推荐算法·美食·可视化分析·沙箱支付
rfidunion1 小时前
springboot+VUE+部署(1。新建项目)
java·vue.js·spring boot
wuk9981 小时前
梁非线性动力学方程MATLAB编程实现
前端·javascript·matlab
Irene19911 小时前
在 Vue 中使用 TypeScript 的几种方式
vue.js·typescript
XiaoYu20021 小时前
第11章 LangChain
前端·javascript·langchain