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>
相关推荐
打小就很皮...20 分钟前
HBuilder 发行Android(apk包)全流程指南
前端·javascript·微信小程序
集成显卡1 小时前
PlayWright | 初识微软出品的 WEB 应用自动化测试框架
前端·chrome·测试工具·microsoft·自动化·edge浏览器
前端小趴菜052 小时前
React - 组件通信
前端·react.js·前端框架
Amy_cx2 小时前
在表单输入框按回车页面刷新的问题
前端·elementui
dancing9993 小时前
cocos3.X的oops框架oops-plugin-excel-to-json改进兼容多表单导出功能
前端·javascript·typescript·游戏程序
后海 0_o3 小时前
2025前端微服务 - 无界 的实战应用
前端·微服务·架构
Scabbards_3 小时前
CPT304-2425-S2-Software Engineering II
前端
小满zs3 小时前
Zustand 第二章(状态处理)
前端·react.js
程序猿小D3 小时前
第16节 Node.js 文件系统
linux·服务器·前端·node.js·编辑器·vim
萌萌哒草头将军3 小时前
🚀🚀🚀Prisma 发布无 Rust 引擎预览版,安装和使用更轻量;支持任何 ORM 连接引擎;支持自动备份...
前端·javascript·vue.js