首页 > 其他分享 >vue style 原理

vue style 原理

时间:2023-10-14 23:55:23浏览次数:29  
标签:style vue 选择器 7a7a37b1 world 原理 data hello

vue style 的实现主要通过css 的属性选择器

什么是属性选择器?

答:用于判断标签属性的一种选择器

<style>
  .a[self_attribute]{
    ...
  }
</style>

<!-- 生效 -->
<div self_attribute class="a"></div>
<!-- 不生效 -->
<div class="a"></div>

组件定义scoped class

编译完成后,为了防止class 与其他组件的样式产生覆盖,vue生成随机名使用属性选择器来区分

<template>
    <p class="app">app</p>
</template>
<style scoped>
.app {
    font-size: 20px;
}
</style>
------------------------------------------
编译结果
<p data-v-7a7a37b1 class="app">app</p>
.app[data-v-7a7a37b1] {
    font-size: 20px;
}

组件定义没有scoped 的 class

这个比较简单,全局使用的话,编译后的class 不加任何属性选择器就行了

深度css呢

可见当使用深度css,编译结果有一条[data-v-7a7a37b1] .hello_world [data-v-7a7a37b1]是App.vue的标记,p作为HelloWorld.vue的根标签,也被绑定了[data-v-7a7a37b1],在[data-v-7a7a37b1]下的全部.hello_world都会生效,值得注意的是[data-v-7a7a37b1] .hello_world使用的是后代选择器,作为根标签的p本身并不会受深度css的影响,只对非根标签影响。

=== App.vue

<template>
    <p class="app">app</p>
    <HelloWorld class="hello_world"></HelloWorld>
</template>

<style scoped>
::v-deep(.hello_world) {
    font-size: 40px;
}
</style>

=== HelloWorld.vue
<template>
    <p class="hello_world">hello_world</p>
</template>
------------------------------------------
编译结果

<p data-v-e17ea971="" data-v-7a7a37b1="" class="hello_world">hello_world</p>

[data-v-7a7a37b1] .hello_world {
    font-size: 40px;
}

标签:style,vue,选择器,7a7a37b1,world,原理,data,hello
From: https://www.cnblogs.com/adamr/p/17764938.html

相关文章

  • 23-Vue组件化编程-非单文件组件和单文件组件
    非单文件组件一个文件中包含有n个组件 Vue中使用组件的三大步骤1.定义组件(也就是创建组件)2.注册组件(这里有局部注册和全局注册)3.使用组件(编写组件标签) 注册组件(局部注册)靠newVue的时候传入components选项<!DOCTYPEhtml><htmllang="en"><head><meta......
  • Javascript、axios、vue基础命令快速学习
    1.js:JavaScript基础学习JavaScript基础学习简单案例1.点击img1,则展示img1图片默认,点击img2则展示img2图片2.输入框鼠标聚焦onfocus后,显示小写toLowerCase(),失去焦点onblur后显示大写toUpperCase()3.点击全选按钮,所有复选框为被选中状态,点击反选则取消勾选状态JavaScrip......
  • 计算机组成原理5
    八、中断中断向量:提供中断服务程序的入口地址中断向量表:所有中断服务的入口地址中断响应时间:从发出中断请求到进入中断服务程序保存现场继续执行主程序  九、输入输出(IO)控制方式9.1、程序查询方式  9.2、中断驱动方式   9.3、DMA方式DMA......
  • arraylist扩容原理
    ArrayList是Java中的动态数组,其扩容原理是在元素数量超过当前数组容量时,创建一个更大容量的新数组,并将所有元素从旧数组复制到新数组。下面是ArrayList扩容的基本原理:初始容量:当你创建一个ArrayList对象时,它会有一个初始容量,通常为10。这个容量可以根据需要进行调整。元素添加:当你......
  • 系统调用实现原理(Printf函数为例)
    系统调用实现(Printf函数为例)调用程序时,会检查当前段的CPL(位于CS中),与目标段的DPL(位于gdt中),如果权限不够无法执行,所以我们无法以用户态直接访问某些指令并执行。而通过系统调用可以从用户态转变为内核态,执行相关程序。实现的方法为0x80中断,改变CS中的CPL为0。、以printf函数为例,其......
  • Vue3 + Quasar系列-代码配置以及报错汇总记录(不断更新中)
    1.Vue3+Quasar系列-代码配置打包去掉hash后缀去掉hashhttps://quasar.dev/quasar-cli-vite/developing-pwa/configuring-pwa2.Vue3+Quasar改变主题背景quasar的样式和其他的框架修改不太一样,需要我们使用动态的方式来进行变更,一般来说有两种方案进行主题修改方案一:......
  • Vue3| Pinia 持久化插件
    对vuex或Pinia里面的内容做本地持久化1.安装插件:npmipinia-plugin-persistedstate2.将插件添加到pinia实例上①main.js里导入持久化插件:importpiniaPluginPersistedstatefrom'pinia-plugin-persistedstate'② app.use(pinia.use(piniaPluginPersistedstate))......
  • 手撕Vue-提取元素到内存
    接着上一篇文章,我们已经实现了构建Vue实例的过程,接下来我们要实现的是提取元素到内存。主要是通过文档碎片来实现,文档碎片是一个轻量级的文档,可以包含和控制节点,但是不会像真实的DOM那样占用内存,所以我们可以通过文档碎片来提高性能。大致的思路是这样的:创建一个空的文档碎片......
  • Vue3| Pinia 的 action 异步写法
    import{defineStore}from'pinia'import{ref}from'vue'importaxiosfrom'axios'exportconstuseChannelStore=defineStore('channel',()=>{  constchannelList=ref([])  constgetList=()=>......
  • Vue3| Pinia 的语法
    Pinia是Vue的最新状态管理工具,是Vuex的替代品Pinia的优势:1.提供更简单的API(去掉了mutation)2.提供符合组合式风格的API(和Vue3新语法统一)3.去掉了modules的概念,每一个store都是一个独立的模块4.配合TypeScript更加友好,提供可靠的类型推断 Pinia基本......