当前位置: 首页 > news >正文

BEM架构

视频

总结:

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

相关文章:

BEM架构

视频 总结&#xff1a; BEM架构&#xff1a;一个命名类的规范而已&#xff0c;说白了就是如何给类起名字使用sass的目的&#xff1a;在<style>中模块化的使用类名&#xff0c;同时减少代码数量 1、 BEM架构 &#xff08;通义灵码查询结果&#xff09; BEM (Block Ele…...

物联网(IoT)详解

物联网&#xff08;IoT&#xff09;详解 1. IoT定义简介2. IoT工作原理3. IoT关键技术4. 物联网与互联网区别5. IoT使用场景6. 开源物联网平台7. 参考资料 1. IoT定义简介 首先第一个问题&#xff0c;什么是物联网&#xff08;IoT&#xff09;? 物联网&#xff08;英文&#…...

ansync/await 运行流程图

1、流程图&#xff1a; 2、await 之后的方法是何时执行&#xff0c;如何执行的&#xff1f; await 的方法在 Task 执行完成之后&#xff0c;通过调用 Finish 方法执行的。 具体的执行步骤是先将 MoveNext 方法注册到 Task 的回调里&#xff0c;然后在 Task 执行完后调用这个方法…...

生产环境docker nginx+php8.0镜像

生产环境docker nginxphp8.0镜像 自定义创建php8.0镜像&#xff0c;创建dockerfile FROM php:8.0-fpm# 安装系统依赖 RUN sed -i s|http://deb.debian.org/debian|http://mirrors.aliyun.com/debian|g /etc/apt/sources.list && \apt-get update && apt-get i…...

【Hadoop】核心组件深度剖析:HDFS、YARN与MapReduce的奥秘

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《大数据前沿&#xff1a;技术与应用并进》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Hadoop简介 2、Hadoop生态系统概览 二、Hadoo…...

Docker Swarm部署SpringCloud Alibaba微服务踩坑记录

为了方便部署和维护微服务项目&#xff0c;还是得上集群部署方案&#xff0c;决定采用Docker的swarm&#xff0c;为什么不是k8s&#xff0c;因为部署骑来又是个新的工具&#xff0c;之前就一直用的docker&#xff0c;自带了类k8s的工具&#xff0c;索性就直接使用swarm了&#…...

深入理解Spring Boot中的AOP应用:从基础组件到高级功能的实现

深入理解Spring Boot中的AOP应用&#xff1a;从基础组件到高级功能的实现 在现代Java开发中&#xff0c;Spring Boot因其简洁性和强大的功能而被广泛采用。而AOP&#xff08;面向切面编程&#xff09;作为Spring框架的核心特性之一&#xff0c;为开发者提供了在不修改业务代码的…...

《区块链与监管合规:在创新与规范之间寻求平衡》

区块链技术作为近年来最具创新性和颠覆性的技术之一&#xff0c;已经在金融、供应链、医疗、物联网等多个领域展现出巨大的潜力。然而&#xff0c;随着其应用的不断拓展&#xff0c;如何应对监管和合规性要求成为了区块链发展道路上一个至关重要的问题。 区块链的去中心化、匿…...

Nuxt3【服务器】server 详解

server 文件夹中的内容&#xff0c;会被自动注册为API和服务器处理程序。 服务器 API 对应路径 server/api server/api/hello.ts export default defineEventHandler((event) > {return {hello: world} })页面中使用 <script setup lang"ts"> const { da…...

防火墙技术原理与应用

防火墙概述 防火墙概念 防火墙:通过一种网络安全设备,控制安全区域间的通信,隔离有害通信,进而阻断网络攻击。一般安装在不同安全区域边界处,用于网络通信安全控制,由专用硬件或软件系统组成。 根据网络安全信任程度和需保护的对象,划分安全区域 公共外部网络:Inter…...

【BUU】[NewStarCTF 2023 公开赛道]Final -CP读取文件内容

漏洞检测 访问首页发现是ThinkPHP5 的站点 用工具扫描一下,发现存在ThinkPHP5.0.23 RCE漏洞 访问验证,写入shell 成功写入shell. 根目录发现flag,但是权限不足 提权获取flag 准备提权,这里一开始尝试了find,但是find权限不足 尝试采用cp命令,移动到web目录,发现访问还是…...

火绒安全:一款强大且高效的国产杀毒软件

火绒安全&#xff08;Huorong Security&#xff09;是一款国产的杀毒软件&#xff0c;以其轻量、高效和对系统资源占用低的特点受到广泛欢迎。与许多其他杀毒软件不同&#xff0c;火绒注重低调实用&#xff0c;旨在为用户提供无干扰且稳定的系统保护。 火绒安全的主要特点&…...

Oracle 的DBA有哪些权限

Oracle数据库的**DBA&#xff08;数据库管理员&#xff09;**拥有全部特权&#xff0c;是Oracle数据库系统最高权限的用户。DBA的权限包括但不限于&#xff1a; 1.创建和管理数据库结构&#xff1a; DBA可以创建、修改和删除数据库中的所有对象&#xff0c;如表、索引、视图等&…...

在navicat上运行sql文件

前言 本文简单介绍在navicat上运行sql文件 第一步&#xff1a; 打开navicat&#xff0c;点击连接->mysql 第二步&#xff1a; 输入连接名&#xff0c;可以随便取 然后点击确定 第三步&#xff1a; 双击连接名&#xff0c;颜色变化代表连接上了 第四步&#xff1…...

STM32裸机和RTOS中的线程安全问题及STM32cubeMX中的线程安全策略

STM32线程安全问题 术语“线程” 和“多线程” 适用于裸机和基于RTOS的应用程序&#xff0c;线程安全问题并不只存在于基于RTOS的应用程序中&#xff1b;裸机应用程序中也存在这个问题&#xff0c;在裸机应用程序中&#xff0c;中断服务程序允许调用C库函数。线程安全问题可能…...

图的遍历

一、深度优先遍历(DFS) 二、广度优先遍历&#xff08;BFS&#xff09;...

CUDA-MODE课程笔记 第8课: CUDA性能检查清单

我的课程笔记&#xff0c;欢迎关注&#xff1a;https://github.com/BBuf/how-to-optim-algorithm-in-cuda/tree/master/cuda-mode CUDA-MODE课程笔记 第8课: CUDA性能检查清单 课程笔记 这节课实际上算是CUDA-MODE 课程笔记 第一课: 如何在 PyTorch 中 profile CUDA kernels 这…...

【备战蓝桥杯青少组】第二天 奇特的砖墙

真题 第十四届省赛 编程题 第5题 工人砌了一面奇特的砖墙&#xff0c;该墙由N列砖组成&#xff08;1≤N≤1e6&#xff09;&#xff0c;且每列砖的数量为Ki&#xff08;1≤Ki≤1e4&#xff0c;相邻砖块之间无缝隙&#xff09;&#xff0c;每块砖的长宽高都为1。小蓝为了美化这面…...

图像处理 -- 仿射变换之Affine Transformation

仿射变换&#xff08;Affine Transformation&#xff09; 仿射变换是图像处理中的一种基本操作&#xff0c;通过线性变换和平移实现图像的几何变换。仿射变换包括旋转、缩放、平移、翻转、错切&#xff08;shear&#xff09;等操作。 1. 仿射变换的作用 旋转&#xff1a;将图…...

Nuxt3【项目配置】nuxt.config.ts

按环境添加配置 export default defineNuxtConfig({// 生产环境的配置$production: {routeRules: {/**: { isr: true }}},// 开发环境的配置$development: {//} })运行时的配置 runtimeConfig export default defineNuxtConfig({runtimeConfig: {// 只在服务器端可用的私有键ap…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

AI,如何重构理解、匹配与决策?

AI 时代&#xff0c;我们如何理解消费&#xff1f; 作者&#xff5c;王彬 封面&#xff5c;Unplash 人们通过信息理解世界。 曾几何时&#xff0c;PC 与移动互联网重塑了人们的购物路径&#xff1a;信息变得唾手可得&#xff0c;商品决策变得高度依赖内容。 但 AI 时代的来…...

招商蛇口 | 执笔CID,启幕低密生活新境

作为中国城市生长的力量&#xff0c;招商蛇口以“美好生活承载者”为使命&#xff0c;深耕全球111座城市&#xff0c;以央企担当匠造时代理想人居。从深圳湾的开拓基因到西安高新CID的战略落子&#xff0c;招商蛇口始终与城市发展同频共振&#xff0c;以建筑诠释对土地与生活的…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

基于Java+VUE+MariaDB实现(Web)仿小米商城

仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意&#xff1a;运行前…...

上位机开发过程中的设计模式体会(1):工厂方法模式、单例模式和生成器模式

简介 在我的 QT/C 开发工作中&#xff0c;合理运用设计模式极大地提高了代码的可维护性和可扩展性。本文将分享我在实际项目中应用的三种创造型模式&#xff1a;工厂方法模式、单例模式和生成器模式。 1. 工厂模式 (Factory Pattern) 应用场景 在我的 QT 项目中曾经有一个需…...

【深度学习新浪潮】什么是credit assignment problem?

Credit Assignment Problem(信用分配问题) 是机器学习,尤其是强化学习(RL)中的核心挑战之一,指的是如何将最终的奖励或惩罚准确地分配给导致该结果的各个中间动作或决策。在序列决策任务中,智能体执行一系列动作后获得一个最终奖励,但每个动作对最终结果的贡献程度往往…...