BEM:css命名规范

news2025/1/12 18:08:58

BEM

BEM(Block-Element-Modifier),块、元素、修饰符,是一种CSS命名规范,旨在前端开发中创建可重用组件和代码共享的方法,使样式易于扩展,易于维护,易于理解

规范:

1、块(Block): 页面上独立的组件,具有明确的语义和功能。每个块都有自己的命名空间(如element的命名空间为 el,),单词之间以连字符(-)分隔。例如:element的input组件 el-input

2、元素(Element): 组成块的不同元素,不能独立存在,依赖于块的上下文,元素名称以块名称为前缀,用双下划线分隔(__)。以element的select组件为例,左侧看成输入框 el-radio__input,右侧文字el-radio__label

3、修饰符(Modifier): 修饰符用于改变元素的外观、状态或行为等。它们是可选的,修饰符名称以块/元素名称为前缀,用双连字符(–)分隔。以element的按钮为例

//快
block
name-block

//块 + 元素
block__element
name-block__element

//块 + 元素 + 修饰符
block--modifier
name-block--modifier
block__element--modifier
name-block__element--modifier

示例:使用Sass实现BEM

在vite项目中,使用Sass实现一个简单的BEM规范

新建bem.scss文件

$namespace: 'xx' !default;
$block-sel: '-' !default;
$element-sel: '__' !default;
$modifier-sel: '--' !default;

@mixin b($block) {
  $blockName: $namespace + $block-sel + $block;
  .#{$blockName} {    //插值语法  #{}
    @content;  //内容替换
  }
}

@mixin e($element) {
  $selector:&;
  @at-root {		//样式文件根层级上,而不是嵌套在其父选择器
      #{$selector + $element-sel + $element} {
          @content;
      }
  }
}

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

项目配置文件

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";`
      }
    }
  }
})

实现:

<template>  
  <div class="xx-main">
    <div class="xx-main__txt">
      Hello word
      <span class="xx-main__txt--red">状态</span>
    </div>
  </div>

</template>

<script setup lang="ts">

</script>

<style lang="scss" scoped>
  @include b("main") {
    width: 200px;
    height: 200px;
    border: 1px solid #000;

    @include e("txt") {
      color: blue;

      @include m("red") {
        color: red;
      }
    }
  }
</style>

效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1170406.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python|Pyppeteer获取威科先行文章链接(21)

前言 本文是该专栏的第21篇,结合优质项目案例持续分享Pyppeteer的干货知识,记得关注。 本文以“威科先行”的信息库为例,笔者将详细介绍使用pyppeteer“自动滑动页面并翻页”获取威科先行的文章链接。如果对pyppeteer的使用以及知识点不太熟悉的同学,可往前查看本专栏前面…

(参考写法)Transformer-Based Visual Segmentation:A Survey

基于Transformer的视觉分割综述 南洋理工大学NTU、上海人工智能实验室AI Lab整理300+论文 论文地址:https://arxiv.org/pdf/2304.09854.pdf 代码地址:https://github.com/lxtGH/Awesome-Segmentation-With-Transformer 前言 SAM (Segment Anything )作为一个视觉的分割…

python创建一个简单的flask应用

下面用python在本地和服务器上分别创建一个简单的flask应用&#xff1a; 1.在pc本地 1&#xff09;pip flask后创建一个简单的脚本flask_demo.py from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return Hello, World!winR进入命令行&#xff0c;…

https网站加载http资源问题

https网站加载http资源问题 前言&#xff1a;最近项目对接了一个第三方的平台、我们需要展示第三方平台返回来的图片资源、由于我们的服务器设置为了https、但是第三方平台返回的图片链接是 http 资源。所以就出现了图片无法加载出来的问题&#xff0c;在此记录一下问题的解决…

数据结构与算法(Java版) | 排序算法的介绍与分类

各位朋友&#xff0c;现在我们即将要进入数据结构与算法&#xff08;Java版&#xff09;这一系列教程中的排序算法这一章节内容的学习中了&#xff0c;所以还请大家系好安全带&#xff0c;跟随我准备出发吧&#xff01; 相信诸位应该都知道排序算法有很多种吧&#xff01;就算没…

旋转链表(C++解法)

题目 给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3]示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k 4 输出&#xff1a;[…

服务号可以转订阅号吗

服务号和订阅号有什么区别&#xff1f;服务号转为订阅号有哪些作用&#xff1f;首先我们要看一下服务号和订阅号的主要区别。1、服务号推送的消息没有折叠&#xff0c;消息出现在聊天列表中&#xff0c;会像收到消息一样有提醒。而订阅号推送的消息是折叠的&#xff0c;“订阅号…

软文成功三大要素,媒介盒子分享

今天媒介盒子来和大家分享&#xff1a;软文成功的三大要素。 许多企业在进行软文推广时经常会很困惑&#xff0c;明明软文写了也发了&#xff0c;怎么就是没效果&#xff0c;其实是忽略了这三点&#xff1a; 一、 创意性 创意可以是文案的语言风格、看问题的视角、排版等等&…

服务器开设新账户,创建账号并设置密码

实验室又进新同学了&#xff0c;服务器开设新账号搞起来 1、创建用户&#xff1a; 在root权限下&#xff0c;输入命令useradd -m 用户名&#xff0c;如下 sudo useradd -m yonghuming 2、设置密码&#xff1a; 输入命令passwd 用户名 回车&#xff0c;接着输入密码操作&…

SPSS两独立样本的非参数检验

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…

Yolov8改进CoTAttention注意力机制,效果秒杀CBAM、SE

1.CoTAttention 论文地址&#xff1a;2107.12292.pdf (arxiv.org) CoTAttention网络是一种用于多模态场景下的视觉问答&#xff08;Visual Question Answering&#xff0c;VQA&#xff09;任务的神经网络模型。它是在经典的注意力机制&#xff08;Attention Mechanism&#xf…

C++ 算法:区间和的个数

涉及知识点 归并排序 题目 给你一个整数数组 nums 以及两个整数 lower 和 upper 。求数组中&#xff0c;值位于范围 [lower, upper] &#xff08;包含 lower 和 upper&#xff09;之内的 区间和的个数 。 区间和 S(i, j) 表示在 nums 中&#xff0c;位置从 i 到 j 的元素之和…

多技术融合提升环境、生态、水文、土地、农业、大气等领域科研技术水平

专题一、空间数据获取与制图 1.1 软件安装与应用讲解 1.2 空间数据介绍 1.3海量空间数据下载 1.4 ArcGIS软件快速入门 1.5 Geodatabase地理数据库 点击查看原文链接https://mp.weixin.qq.com/s?__bizMzg2NDYxNjMyNA&mid2247546998&idx6&sn39342c376b158eff1…

基于SSM的购物商城网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

多测师肖sir_高级金牌讲师__adb命令

adb指令整理&#xff1a; ADB常用的指令&#xff1a; 查看当前连接设备 &#xff1a; adb devices 进入到shell &#xff1a; adb shell 查看日志 &#xff1a; adb logcat 安装apk文件 &#xff1a; adb install xxx.apk 卸载APP &#xff1a; adb uninstall 包名 查看包名 &…

Cadence Virtuoso如何保存spectre仿真在cell view里

Launch ADE L 可以选择 Load State 加载上次仿真状态&#xff0c;但是我想保存在cell view和schematic在一起可以直接打开&#xff0c;可以选择Save State旁的Cellview 可以在Library Manager中看到保存成功了

YOLOv5项目实战(2)— 手把手教你租借云服务器去训练模型

前言:Hello大家好,我是小哥谈。近期由于出差在外(在新疆吐鲁番出差呢~),一直远程使用公司服务器进行算法模型训练,但是由于这几天公司VPN故障,导致无法远程训练模型,所以就想着租借服务器来进行训练。近期我研发的算法模型是工业场景烟雾明火检测,本节课就以此为例教大…

AI 引擎系列 4 - 首次运行 AI 引擎编译器和 x86simulator(2022.1 更新)

AI 引擎系列 4 - 首次运行 AI 引擎编译器和 x86simulator&#xff08;2022.1 更新&#xff09; 简介 在 AI 引擎系列的前 3 篇博文中&#xff0c;我们探讨了 AI 引擎应用所需的不同文件。在本篇中&#xff0c;我们将为 X86 目标运行 AI 引擎编译器&#xff0c;观察它生成的不…

YOLO目标检测——昏暗车辆检测数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;智能交通监控系统、驾驶辅助系统、城市安全监控、自动驾驶系统以及路况分析与规划等数据集说明&#xff1a;昏暗车辆检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;含有图片汽车、卡车、公共汽车标签说明&#…

C++23:多维视图(std::mdspan)

C23&#xff1a;多维视图&#xff08;std::mdspan&#xff09; 介绍 在 C23 中&#xff0c;std::mdspan 是一个非拥有的多维视图&#xff0c;用于表示连续对象序列。这个连续对象序列可以是一个简单的 C 数组、带有大小的指针、std::array、std::vector 或 std::string。 这…