scss 预处理器自定义ui框架(bem架构)

BEM架构

bem架构

它是一种css架构 oocss 实现的一种 (面向对象css) ,BEM实际上是block、element、modifier的缩写,分别为块层、元素层、修饰符层,element UI 也使用的是这种架构

BEM 命名约定的模式是:

.block {}.block__element {}.block--modifier {}

scss 预处理器自定义ui框架

  1. 在项目中安装sass依赖
  2. 新建bem.scss文件(内容如下)
// 定义值和连接符 
$namespace:'xm' !default;
$block-sel:'-' !default;
$elem-sel:'__' !default;
$mod-sel:'--' !default;// 可以写混入
// <div class = 'xm-block'/>
@mixin b($block){//  $ —— 定义拼接好的类名$B:#{$namespace+$block-sel+$block};// #{} —— 使用动态类名或名称.#{$B}{@content; // 内容替换}
};
// <div class = 'xm-block__inner'/>
@mixin e($el){//  $ —— 定义父级的类名 (& —— 父级的类名)$selector: &; // 跳出嵌套 —— @at-root{}@at-root{#{$selector+$elem-sel+$el}{@content};}
}
// <div class = 'xm-block--xxx'/>
@mixin m($m){//  $ —— 定义父级的类名 (& —— 父级的类名)$selector: &; // 跳出嵌套 —— @at-root{}@at-root{#{$selector+$mod-sel+$m}{@content};}
}
  1. 在vite.config.ts进行配置
    在这里插入图片描述
css:{preprocessorOptions:{scss:{additionalData: `@import './src/bem.scss';`,}}}
  1. 在页面中进行使用
    效果图:
    在这里插入图片描述
<template><div class="xm-test">自定义scss预处理器-Box<div class="xm-test__elem">自定义scss预处理器-content</div><div class="xm-test--nice">自定义scss预处理器-style</div></div>
</template>
<style scoped lang="scss">
// xm-test为父级box — b
@include b('test') {color: red;font-size: 20px;//xm-test__elem 为里面的内容  __e@include e('elem') {color: blue;font-size: 20px;}//xm-test--nice 为内容的样式 --m@include m('nice') {color: green;font-size: 20px;}
}
</style>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

介绍AI绘画课,让智能工具助力创作 释放无限想象力 助你成为绘画大师

演示地址&#xff1a; www.runruncode.com/portal/article/index/id/19458/cid/81.html 画画是一项有趣的活动&#xff0c;它让人充满无限可能。对许多人来说&#xff0c;画画既是一种放松的方式&#xff0c;也是一种与创意、文化和艺术联系的途径。如果你是一个初学者&#x…

06_HDMI 显示器驱动设计与验证

06_HDMI 显示器驱动设计与验证 1. HDMI 接口及引脚定义1.1 HDMI A Type 接口引脚图1.2 HDMI A Type 接口引脚定义 2. HDMI 原理2.1 HDMI 显示原理2.2 TMDS 传输原理 3. 实验目标4. 程序框图4.1 顶层模块4.2 时钟生成模块4.3 HDMI 驱动控制模块4.3.1 第一个步骤4.3.2 编码模块参…

巩固一下NodeJs

1、初始化(确保当前电脑有node环境) npm init 2、安装express npm i expressnpm i ws文件结构 3、编写相关代码启动node服务(server.js) //导入下列模块&#xff0c;express搭建服务器&#xff0c;fs用来操作文件、ws用来实现webscoket const express require("expr…

vgg16-pytorch

基于pytorch实现VGG16模型 刚听完土哥的入门pytorch&#xff0c;试着写一个不完善的vgg16 VGG16具体的架构: VGG16模型构建&#xff1a; 卷积池化后尺寸计算公式&#xff1a; 引入库&#xff1a; from torch import nn from torch.nn.modules.flatten import Flattendil…

Redis解决Session共享问题

文章目录 一、集群Session共享问题二、Redis存储验证码和对象三、解决状态登录刷新问题 一、集群Session共享问题 session共享问题&#xff1a;多台Tomcat并不共享session存储空间&#xff0c;当请求切换到不同tomcat服务器时导致数据丢失的问题 tomcat可以进行多台tomcat进行…

嵌入式内核及驱动开发高级

一、起源 仅devfs&#xff0c;导致开发不方便以及一些功能难以支持&#xff1a; 热插拔 不支持一些针对所有设备的统一操作&#xff08;如电源管理&#xff09; 不能自动mknod 用户查看不了设备信息 设备信息硬编码&#xff0c;导致驱动代码通用性差&#xff0c;即没有分离…

算法与数据结构(二)--【2】链表进阶

一.循环链表 1.单循环链表/循环链表 【1】概念&#xff1a;在单链表中&#xff0c;将终端结点的指针域NULL改为指向第一个结点&#xff0c;就使整个链表形成一个环&#xff0c;这种首尾详解的链表成为循环链表。 【2】特点&#xff1a;从表中任一结点出发均可找到表中其他结点…

某网站提交登陆信息加密JS逆向实战分析

1. 写在前面 对于爬虫开发者来说&#xff0c;职业生涯中可能或多或少会遇到各种各样的网站&#xff0c;其中有些必要要求登陆才能浏览。那么模拟登陆的时候发现提交的登陆信息&#xff08;用户名、密码&#xff09;都是经过加密后的&#xff0c;如何处理&#xff1f;这里找到了…

手把手教你如何发布体验

发布工具集&#xff1a;体验中心 体验中心 (Experience Hub) 是发布流程的起点&#xff0c;也是其他工具的可扩展永久中心。从这里你们可以验证每个步骤&#xff0c;以便发布你们的体验&#xff1a; 具有当前状态的可视化任务列表 工具摘要按钮 发布/取消发布按钮 - 自动批…

【雕爷学编程】Arduino动手做(161)---16路PWM舵机驱动板2

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

【刷题】在二叉树中分配硬币

在二叉树中分配硬币 https://leetcode.cn/problems/distribute-coins-in-binary-tree/description/ 描述 给定一个有 N 个结点的二叉树的根结点 root&#xff0c;树中的每个结点上都对应有 node.val 枚硬币&#xff0c;并且总共有 N 枚硬币。 在一次移动中&#xff0c;我们…

Unity DOTS纯ECS实现虚拟摇杆Joystick控制角色移动

上篇已经实现了ECS框架下的IBeginDragHandler、IDragHandler、IEndDragHandler这几个拖动事件&#xff0c;使得可以任意给ECS框架下的UI(2D entity)响应拖动事件。本篇分享下在前篇实现的功能的基础上再实现一个常用的摇杆控制角色移动的功能。 需要注意的一点&#xff0c;目前…