BEM架构

devtools/2024/10/19 6:16:59/

视频

总结:

  1. BEM架构:一个命名类的规范而已,说白了就是如何给类起名字
  2. 使用sass的目的:在<style>中模块化的使用类名,同时减少代码数量

1、 BEM架构

(通义灵码查询结果)
BEM (Block Element Modifier) 架构是一种广泛使用的 CSS 命名方法论,它帮助开发者组织和编写可维护的 CSS 代码。下面是 BEM 的几个关键概念:

1. Block (块)

表示页面上的独立组件或区域,具有自己的 HTML 结构、样式和行为。
Block 名称通常只包含小写字母和数字,并且用连字符 - 分隔多个单词。
示例: .header, .navigation-menu

2. Element (元素)

是 Block 内部的一部分,直接与 Block 关联。
Element 名称以 Block 名称作为前缀,并通过两个连字符 __ 与 Block 名称相连。
示例: .header__logo, .navigation-menu__item

3. Modifier (修饰符)

用于改变 Block 或 Element 的外观或行为。
Modifier 名称以 Block 或 Element 名称作为前缀,并通过一个连字符 – 与 Block 或 Element 名称相连。
示例: .header–fixed, .navigation-menu__item–active

4. 使用示例

假设有一个简单的导航菜单,我们可以这样使用 BEM:

<div class="navigation-menu"><ul class="navigation-menu__list"><li class="navigation-menu__item navigation-menu__item--active"><a href="#">Home</a></li><li class="navigation-menu__item"><a href="#">About</a></li><li class="navigation-menu__item"><a href="#">Contact</a></li></ul>
</div>

对应的 CSS 如下所示:

.navigation-menu {/* 基础样式 */
}.navigation-menu__list {/* 列表样式 */
}.navigation-menu__item {/* 列表项基础样式 */
}.navigation-menu__item--active {/* 当列表项处于激活状态时的样式 */
}

5. 优点

  • 可维护性: BEM 提供了一种清晰的方式来组织 CSS 选择器,使得代码更容易理解和维护。
  • 可复用性: Block 和 Element 的命名方式使得样式易于复用。
  • 可扩展性: Modifier 允许在不更改 HTML 结构的情况下改变样式。

2 在 Vue 中的应用

在 Vue 项目中,你可以利用 BEM 方法来组织组件的样式。例如,在 Vue 单文件组件 (SFC) 中,你可以将样式写在 <style> 标签内,并使用 BEM 命名约定。

为什么使用sass?
通过sass语法可以简单的实现选择器的拼接

  • 在src文件夹中创建sass文件
// $:定义变量
$namespace: "xm" !default; //default:如果namespcae没有赋值,则默认值为xm
$block-sel: "-" !default;
$element-sel: "__" !default;
$modifier-sel: "--" !default;// 作用:生成<div class="xm-block">里面的“xm-block”字符串
// @mixin:混入,类似于function(){}
@mixin b($b) {// $B:变量$B: #{$namespace + $block-sel + $b};// #{}:插值语法,用于选择器或者属性名// .#{$B}  ---->  .xm-block.#{$B} {@content // 内容块;;}
}// 作用:生成<div class="xm-block__el">里面的“xm-block__el”字符串
@mixin e($el) {$selector: &; // &: 父选择器,此处变量$selector的值等于父选择器名// @at-root:其中的内容从文档的根部,不使用正常的选择器嵌套/* 示例:如果不添加@at-root,则生成:.xm-block .xm-block__el{...}这里只需要:.xm-block__el{...} */@at-root {#{$selector + $element-sel + $el} {@content;}}
}// 作用:生成<div class="xm-block--m">里面的“xm-block--m”字符串
@mixin m($m) {$selector: &; @at-root {#{$selector + $modifier-sel + $m} {@content;}}}

3 scss文件引入为全局样式

  • 在vite.config.js文件中添加以下配置
        // 配置css相关的的选项css:{// 指定预处理器的选项preprocessorOptions:{// sass预处理器的配置scss:{// 在所有的scss文件开头自动导入该文件additionalData: `@import "@/bem.scss";`}}}

4 在Vue组件中使用

<template><div class="xm-block"><div class="xm-block__element"><div class="xm-block--modifier"></div></div></div>
</template><script setup></script>
<style lang="scss">
@include b("block") {width: 200px;height: 200px;background-color: red;@include e("element") {width: 100px;height: 100px;background-color: blue;};@include m("modifier") {width: 50px;height: 50px;background-color: green;}}
</style>
  • 结果
    在这里插入图片描述

5 scss代码编译后的源码

在这里插入图片描述

6 组件中如何区分b、e、m

  1. 在组件中最外层的是block
  2. 组件中的元素就是element(元素包括子组件)
  3. 类名的作用只是用于修饰,就是个modifier
  4. 子组件,递归参考第一条

http://www.ppmy.cn/devtools/97033.html

相关文章

人工智能和机器学习 3(复旦大学计算机科学与技术实践工作站)python机器学习、Pytorch库入门、d2l学习+<机器学习、神经网络————原理、理论>

前言 安装 — 动手学深度学习 2.0.0 documentation (d2l.ai)https://zh.d2l.ai/chapter_installation/index.html 安装 我们需要配置一个环境来运行 Python、Jupyter Notebook、相关库以及运行本书所需的代码&#xff0c;以快速入门并获得动手学习经验。 安装 Miniconda 最…

深入探讨C语言中的高级指针操作

目录 指针与内存管理的高级技巧 1. 动态数组的重新分配 2. 内存碎片化的处理 3. 内存对齐 函数指针数组与回调函数的高级用法 1. 基本函数指针用法 2. 函数指针数组 3. 回调函数的使用 指针与数据结构的结合 1. 自定义链表 C语言以其强大的底层操作能力和高效的性能著…

YOLOv8改进方法

YOLOv8改进方法 为解决复杂环境下番茄生长点花蕾检测的难题,本研究针对目标尺度多样、外观相似、遮挡严重等问题,从骨干网络(Backbone)、颈部结构(Neck)和检测头(Head)三个方面系统改进了YOLOv8的网络结构和损失函数,旨在提高其对弱小目标的检测精度和环境适应性。 3.1 YOLOv…

C语言:链表添加

链表的添加的具体方法如下&#xff1a; 先判断链表是否有节点&#xff0c; 若没有&#xff0c; 头指针指向新来的节点&#xff0c;尾指针指向新来的节点。 若有&#xff0c; 尾节点的下一个指向新来的节点&#xff0c;尾指针指向新来的节点。 #include<stdio.h&…

逐级删除空目录 如果目录非空则停止删除操作 os.removedirs(path)

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 逐级删除空目录 如果目录非空 则停止删除操作 os.removedirs(path) [太阳]选择题 下列关于代码和os.removedirs(path)函数说法正确的是&#xff1f; import os os.makedirs("D:/test1…

Java面试--框架--Spring MVC

Spring MVC 目录 Spring MVC1.spring mvc简介2.spring mvc实现原理2.1核心组件2.2工作流程 3.RESTful 风格4.Cookie&#xff0c;Session4.1 会话4.2 保存会话的两种技术 5.拦截器5.1过滤器、监听器、拦截器的对比5.2 过滤器的实现5.3 拦截器基本概念5.4 拦截器的实现 1.spring …

爱心动画代码HTML5

这段代码是一个HTML5 Canvas动画&#xff0c;它通过JavaScript创建了一个动态的爱心效果。页面初始化时&#xff0c;首先定义了一些基本设置&#xff0c;如粒子数量、持续时间、速度等。然后&#xff0c;定义了Point和Particle类&#xff0c;用于处理粒子的位置和运动。接着&am…

七天入门LLM大模型 | 第一天:魔搭社区和LLM大模型基础知识

七天入门LLM大模型学习课程 。 #01 魔搭LLM大模型开源生态图 近一年来&#xff0c;大语言模型&#xff08;LLM&#xff09;成为为全球科技与社会关注的焦点&#xff0c;公众对这类模型所蕴含的先进技术及其广泛应用有了更为深入的认知。关于LLMs是否应采取开源策略的话题引发…