首页 > 其他分享 >关于vue的 scoped

关于vue的 scoped

时间:2023-09-11 15:57:21浏览次数:44  
标签:vue element 关于 scoped 组件 import 选择器 block

前沿

关于在vite中使用 less | sass
npm install less  -D

npm install sass -D
在style标签注明:
<style lang="less"></style>
<style lang="scss"></style>

scoped

scoped实现组件的私有化,让当前的style只属于当前模块 在DOM结构中可以看到,vue通过在DOM结构以及css样式上添加唯一标记: data-v-hash的方式(这个工作是由 PostCSS 转译实现的),来实现组件样式私有化,不污染全局的作用

scoped的渲染原则

  1. 给HTML的DOM节点加上一个不重复的data属性(形如data-v-7ba5bd90)来表示他的唯一性
  1. 在每句css选择器的末尾(编译后生成的css语句)加上一个当前组件的data属性选择器来私有化样式
  1. 如果组件内包含其他组件,只会给其他组件的最外层标签上加上当前组件的data属性

大的

案例演示-样式穿透:deep()

修改Element-ui里的input样式,发现无法生效

<template>
  <div><el-input class="ipt"></el-input></div>
</template>

<script setup lang="ts">
import { ref, reactive } from "vue";
</script>

<style scoped lang="scss">
.ipt {
  width: 200px;
  margin: 100px 400px;
  input {
        // 修改input框的背景色
    background-color: red;
  }
}
</style>

 

这是因为我们写了scoped,它在进行PostCss转化的时候,把元素选择器默认放在了最后

 

 所以Vue提供了样式穿透:deep(),它的作用就是用来改变属性选择器的位置

<style scoped lang="scss">
.ipt {
  width: 200px;
  margin: 100px 400px;
  :deep(input) {
    background-color: red;
  }
}
</style>

这样就可以修改框架上的CSS了

 

 

BEM架构

BEMBlockElementModifier的首字母缩写,分为块层、元素层、修饰符层,它是一种css命名规范。element-ui也是使用的这种架构。

命名约定的模式如下:
.block{} // 块
.block_element{} // 元素
.block--modifier{} // 修饰符

 

block代表更高级别的抽象或组件 block_element代表.block的后代,用于形成一个完整的.block整体 block--modifier代表.block的不同状态或不同版本

复刻一个bem架构

$block-sel: "-" !default
$element-sel: "__" !default
$modifier-sel: "--" !default
$namespace: "xc" !default

// 混入
@mixin b($block) {
  $B: $namespace + $block-sel + $block // 变量
  #{$B} { //插值语法"#{}"
    @content;// 内容替换,相当于占位符
  }
}

@mixin e($element) {
  $selector:&; // 获取父元素的命名
  @at-root{ // 跳出嵌套,将父级选择器改成根选择器
    #{$selector + $element-sel + $element} {
      @content;
    }
  }
}

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


@mixin bfc {
    height: 100%;
  overflow: hidden;
}

@mixin flex {
    display: flex;
}

全局扩充sass

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="xc-box">
    <div><Menu></Menu></div>
    <div class="xc-box__right">
      <Header></Header>
      <Content></Content>
    </div>
  </div>
</template>

<script setup lang="ts">
import { ref, reactive } from "vue";
import Menu from "./Menu/index.vue";
import Header from "./Header/index.vue";
import Content from "./Content/index.vue";
</script>
<style scoped lang="scss">
@include b(box) {
  @include bfc;
  display: flex;

  @include e(right) {
    display: flex;
    flex-direction: column;
    flex: 1;
  }
}
</style>

 

 

标签:vue,element,关于,scoped,组件,import,选择器,block
From: https://www.cnblogs.com/yf-html/p/17693730.html

相关文章

  • 创建vue3的项目和目录结构讲解
    本节目标了解Vue3项目的结构学习Vue3项目的基本开发知识Vue3和Vue2的开发区别全局安装vue-clinpmi-g@vue/clivuecreatevue3-json-schema-form自定义vue3配置自定义配置:选择[自定义],通过方向键上下移动,空格选中,Enter确定,自定义配置中,您将会看到这些配置......
  • 【JAVA日常】关于jeecgBoot @Dict注解的使用不生效问题
    项目中后端使用jeecgBoot开发,最近正好遇到一些关于改造和使用@dict字典注解的问题,正好记录一下,以防忘记。1、注解不生效问题1今天公司同事问,说这个注解加上了怎么还不起作用呢。我们就检查了代码中的使用。注解的添加以及使用都正常,然后排查发现接口调用时未执行字典的切面,那么......
  • vue可以使用this.$set()来进行强制更新,进而解决问题
    可以使用this.$set()来进行强制更新,进而解决问题对象操作:三个参数:this.$set("改变的对象","改变的对象属性","值")数组操作: 三个参数:this.$set("数组","下标","值")......
  • 以程序员视角讲述关于api数据接口的应用
    作为一名程序员,API数据接口是我们日常工作中不可或缺的一部分。API,即ApplicationProgrammingInterface,应用程序编程接口,是一种用于访问特定软件包或服务的预定义函数和过程。通过API,我们可以从各种数据源获取数据,并将其用于构建应用程序、网站或其他数字工具。下面,我将以一个程序......
  • Lnton羚通视频分析算法开发平台关于AI智能识别操作行为流程规范识别算法分析展示
    Lnton羚通的算法算力云平台是一款优秀的解决方案,具有突出的特点。它提供高性能、高可靠性、高可扩展性和低成本的特性,使用户能够高效地执行复杂计算任务。此外,平台还提供丰富的算法库和工具,并支持用户上传和部署自定义算法,提升了平台的灵活性和个性化能力。AI工人操作行为流程规范......
  • 【源码】Vue.js 官方脚手架 create-vue 是怎么实现的?
    Vue.js官方脚手架create-vue是怎么实现的?摘要本文共分为四个部分,系统解析了vue.js官方脚手架create-vue的实现细节。第一部分主要是一些准备工作,如源码下载、项目组织结构分析、依赖分析、功能点分析等;第二部分分析了create-vue脚手架是如何执行的,执行文件的生成细节......
  • vue 页面导出为pdf与word
    vue页面导出为pdf与word一.导出为word 基于 docxtemplater 来导出word文档的方法1.安装引用依赖//安装docxtemplaternpminstalldocxtemplaterpizzip--save//安装jszip-utilsnpminstalljszip-utils--save//安装jszipnpminstalljszip--save//安装......
  • 使用Github Action在Github Pages上部署vue页面
    GithubAction部分:name:NodeJSon:push:branches:["master"]#SetspermissionsoftheGITHUB_TOKENtoallowdeploymenttoGitHubPagespermissions:contents:write#Allowonlyoneconcurrentdeployment,skippingrunsqueuedbetwee......
  • Vue2x的自定义指令
    在某些情况下,我们需要对底层DOM进行操作,而内置的指令不能满足需求,就需要自定义指令。一个自定义指令由一个包含类似组件的生命周期的钩子的对象来定义,钩子函数会接收到指令所绑定的元素作为参数。定义指令常用两种方式进行自定义指令,一种是全局定义,另一种在当前组件中定义//局......
  • 关于spring的注解作用(springboot相较于spring 的不同)
      springboot的@Bean注解作用在方法上,它会将这个方法返回的类型实例注入spring容器。  <bean>标签代表一个实例(或对象),而不是一个类型。在Spring中,<bean>标签用于声明和配置一个bean实例。当我们在XML配置文件中使用<bean>标签时,我们定义的是一个具体的b......