首页 > 其他分享 >BEM架构

BEM架构

时间:2024-08-21 16:22:55浏览次数:6  
标签:__ 架构 xm BEM block 组件 Block

视频

总结:

  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. 子组件,递归参考第一条

标签:__,架构,xm,BEM,block,组件,Block
From: https://blog.csdn.net/YUELEI118/article/details/141296821

相关文章

  • Django 后端架构开发:文件云存储,从本地存储到腾讯COS桶集成
    ⭐Django后端架构开发:文件云存储,从本地存储到腾讯COS桶集成目录☁️文件云存储-项目使用云存储......
  • Django 后端架构开发:JWT 项目实践与Drf版本控制
    ......
  • 中电金信 :企业架构驱动数字化转型 开辟价值创造新路径
    ​成功的数字化转型不仅要能为金融机构创造价值,更在于长期综合价值的创造。以银行为例,不同银行在不同阶段追求的价值目标各异,通常由银行的战略愿景及目标决定,确保转型目标与企业价值主张一致。 为此,中电金信以行业洞察和项目实践为基础,融合企业架构思维,通过对传统的数字化转型......
  • 上门家政预约app之软件架构分析和功能介绍
    随着科技的不断发展,移动互联网已经成为人们生活中不可或缺的一部分。家政服务行业作为传统服务领域之一,也在逐渐向数字化、智能化转型。传统的家政服务模式存在信息不对称、服务质量参差不齐、预约流程繁琐等问题,无法满足消费者日益多样化的需求。(软件开发:tieniu6636)本项目分为......
  • 淘客返利机器人的智能化实现:架构与算法
    淘客返利机器人的智能化实现:架构与算法大家好,我是阿可,微赚淘客系统及省赚客APP创始人,是个冬天不穿秋裤,天冷也要风度的程序猿!在电商领域,淘客返利机器人作为一种高效的营销工具,其智能化实现对于提升用户体验和增加用户粘性具有重要意义。本文将深入探讨淘客返利机器人的架构......
  • RabbitMQ 基础概念与架构设计及工作机制学习总结
    什么是RabbitMQMQ全称为MessageQueue,即消息队列.它也是一个队列,遵循FIFO原则。RabbitMQ则是一个开源的消息中间件,由erlang语言开发,基于AMQP协议实现的一个软件产品,提供应用程序之间的通信方法,在分布式系统开发中广泛应用。AMQP协议AMQP,即AdvancedMessageQueuingProtocol,......
  • 深入解析CDN(内容分发网络):架构、优势与实现
    摘要内容分发网络(CDN)是一种通过在多个地理位置部署服务器节点来提高网站加载速度和数据传输效率的网络技术。随着互联网内容的日益丰富和用户对访问速度的高要求,CDN已经成为现代网站和应用不可或缺的一部分。本文将详细介绍CDN的基本概念、工作原理、优势以及如何在Web开发......
  • 配置stm32cubemx采集stm32H743IIT6,通过DMA实现多通道和多模块ADC的采集,亲测有效!
     之前写到stm32cubemx通过阻塞实现单通道和多通道的ADC的采集。本文分享通过DMA实现单模块多通道和多模块多通道的ADC采集。stm32cubemx的版本6.10.0。一、DMA采集多通道ADC数据阻塞采集是每次采集adc数据,cpu死等,直到采集完或者在设定时间超时没能采集,返回到cpu。DMA采集......
  • ssm基于BS架构的学生档案管理系统的设计与研究+jsp
    文章目录目录文章目录论文目录项目介绍开发环境系统实现论文参考论文目录目 录目 录1绪论1.1 研究背景1.2目的和意义1.3论文结构安排2 相关技术2.1SSM框架介绍2.2 B/S结构介绍2.3Mysql数据库介绍3系统分析3.1 系统可行性分析3.1......
  • B2B进销存ERP后台管理系统的逻辑架构与设计,AxureRP原型产品经理实战案例
    模块分析:进销存系统是一种用于企业管理库存、销售和采购活动的信息系统。它的主要作用包括但不限于以下几个方面:1.库存管理实时库存跟踪:准确记录每种商品的库存数量,确保数据的实时性和准确性。库存预警:当库存量低于预设的安全水平时自动发出警报,防止缺货或积压。先进先出(......