vue3学习记录-单文件组件 CSS 功能

news2024/11/4 20:13:19

vue3学习记录-单文件组件 CSS 功能

  • 1.组件作用域 CSS
    • 1.1为什么要用到样式穿透(:deep())
    • 1.2 插槽选择器:slotted(div)
    • 1.3 全局选择器:global
  • 2.CSS Modules
    • 2.1 基本用法
    • 2.2 自定义注入名称
    • 2.3 与组合式 API 一同使用
  • 3.CSS 中的 v-bind()

1.组件作用域 CSS

1.1为什么要用到样式穿透(:deep())

在用一些ui框架,例如elementui的时候,再加上style加了scoped属性导致,正常的写法是改变不了其中的一些css,为什么呢?因为scoped,

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

例如,当前的App.vue文件

<script setup>
</script>

<template>
  <div>
    <p>{{ $hello('Vue') }}</p>
    <input type="text" v-focus>
    <el-select v-model="bb">
      <el-option label="选项1" value="1"></el-option>
      <el-option label="选项2" :value="2"></el-option>
    </el-select>
    <global-component></global-component>
    <button @click="showMessage">显示消息</button>
  </div>
</template>
<style scoped lang="scss">
.el-select{
  width: 200px;
  .el-select__wrapper{
    background-color: aqua;
  }
}
</style>

当前template里的html渲染出来都会带上一个不重复的data属性
在这里插入图片描述
而且el-select组件下面的标签是没有带不重复的data属性的。而且当前的.el-select[data-v-7a7a37b1]也是class名加上data属性去命中对应的class名。但是为什么写的 .el-select__wrapper{background-color: aqua;}样式没生效呢,而且原有的样式
在这里插入图片描述
也没有我自己写的.el-select{.el-select__wrapper{ }}权重高吧,但是就是没生效。我们看看浏览器中的class文件
在这里插入图片描述
可以看到el-select的样式现在在scoped的作用下是根据.select加data属性来命中css的,这个是有的。但是.el-select__wrapper的样式是.el-select .el-select__wrapper[data-v-7a7a37b1] ,第一个.el-select就对应不上的,所以写的el-select__wrapper自然也对应不上。所以用到了样式穿透。vue3使用的是:deep()

<style scoped lang="scss">
.el-select{
  width: 200px;
  :deep(.el-select__wrapper){
    background-color: aqua;
  }
}
</style>

效果:
在这里插入图片描述
:deep()帮我们把原有的.el-select .el-select__wrapper[data-v-7a7a37b1] 变成了.el-select[data-v-7a7a37b1] .el-select__wrapper。所以样式能对应上

1.2 插槽选择器:slotted(div)

//父组件
<template>
  <A>
    <div class="demo">aaa</div>
  </A>
</template>

<style scoped>
.demo{
  color: red;
}
</style>
//子组件

<template>
  <div class="container">
    <slot></slot>
  </div>
</template>

<script setup>

</script>
<style lang='scss' scoped>
.container {
  width: 200px;
  height: 200px;
  background-color: lightcoral;
  margin-bottom: 10px;

  :slotted(.demo) {
    color: lightblue;
  }
}
</style>

这里渲染出来的结果是以带了子组件的color为重,
在这里插入图片描述

但是如果把:slotted去掉的话,color就是以父组件的为主了.container 样式去掉的话,

<style lang='scss' scoped>
  :slotted(.demo) {
    color: lightblue;
  }
</style>

在这里插入图片描述

却是以父组件的样式为主。
感觉:slotted的作用是能让子组件的插槽有一些默认的css样式,当然权重的就是另外的结果。

1.3 全局选择器:global

顾名思义,就是在当前组件创建一个其他组件也能访问到的css样式

//父
<script setup>
import A from './components/A.vue';
import B from './components/B.vue';
</script>

<template>
  <A></A>
</template>

<style scoped>

:global(.demo) {
    color: red;
}
</style>
//子
<template>
  <div class="container">
    <a href="" class="demo">试一试全局的css</a>
    <slot></slot>
  </div>
</template>

子组件的字体是红色的。

2.CSS Modules

2.1 基本用法

一个

<template>
  <p :class="$style.red">This should be red</p>
</template>

<style module>
.red {
  color: red;
}
</style>

得出的 class 将被哈希化以避免冲突,实现了同样的将 CSS 仅作用于当前组件的效果。
在这里插入图片描述

2.2 自定义注入名称

你可以通过给 module attribute 一个值来自定义注入 class 对象的属性名:

<template>
  <p :class="classes.red">red</p>
</template>

<style module="classes">
.red {
  color: red;
}
</style>

2.3 与组合式 API 一同使用

import { useCssModule } from 'vue'

// 在 setup() 作用域中...
// 默认情况下,返回 <style module> 的 class
useCssModule()

// 具名情况下,返回 <style module="classes"> 的 class
useCssModule('classes')

//测试
<script setup>
import { useCssModule } from 'vue'

const classes = useCssModule('classes')
console.log(classes)
console.log(classes.red)

</script>

<style module="classes">
.red {
  color: red;
}

.green {
  color: green;

  .aa {
    color: yellow;

  }
}
</style>

结果:
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/85abe9e7c905436785247c1fa5a4d77e.png
返回当前type modules里面定义的class的原class名和渲染在浏览器的对应css名的映射对象。如果你想再进行后续的操作,例如在某些情况下,你可能需要将你的 Vue 组件与一些第三方 JavaScript 库或框架集成。这些库可能需要你提供元素的类名来进行操作。此时,你可以使用 useCssModule 提供的映射类名来确保正确地引用到对应的元素。

3.CSS 中的 v-bind()

单文件组件的

<template>
  <div class="text">hello</div>
</template>

<script>
export default {
  data() {
    return {
      color: 'red'
    }
  }
}
</script>

<style>
.text {
  color: v-bind(color);
}
</style>

这个语法同样也适用于

<script setup>
import { ref } from 'vue'
const theme = ref({
    color: 'red',
})
</script>

<template>
  <p>hello</p>
  <button @click="theme.color = 'blue'">改变颜色</button>
</template>

<style scoped>
p {
  color: v-bind('theme.color');
}
</style>

实际的值会被编译成哈希化的 CSS 自定义属性,因此 CSS 本身仍然是静态的。感觉是在中间找了个中间变量。自定义属性会通过内联样式的方式应用到组件的根元素上,并且在源值变更的时候响应式地更新。
在这里插入图片描述
在这里插入图片描述
点击,确实中间变量属性名对应的值也改变了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3.1 快速启动Flink集群

文章目录 1. 环境配置2. 本地启动3. 集群启动4. 向集群提交作业4.1 提交作业概述4.2 添加打包插件4.3 将项目打包4.4 在Web UI上提交作业4.5 命令行提交作业 在本实战中&#xff0c;我们将快速启动Apache Flink 1.13.0集群&#xff0c;并在Hadoop集群环境中提交作业。首先&…

贪心算法---java---黑马

贪心算法 1)Greedy algorithm 称之为贪心算法或者贪婪算法&#xff0c;核心思想是 将寻找最优解的问题分为若干个步骤每一步骤都采用贪心原则&#xff0c;选取当前最优解因为未考虑所有可能&#xff0c;局部最优的堆叠不一定得到最终解最优 贪心算法例子 Dijkstra while …

产品宣传册如何分享到微信朋友圈

在这个互联网高速发展的时代&#xff0c;微信已经成为我们日常生活中不可或缺的社交工具。作为商家或个人&#xff0c;如何将产品宣传册分享到微信朋友圈&#xff0c;提高产品知名度和影响力&#xff0c;成为了一项至关重要的技能。 那要怎么操作呢&#xff1f; 1. 实用工具&a…

轻松入门WordPress:在Ubuntu上搭建本地网站并配置公网访问地址

文章目录 前言1. 安装WordPress2. 创建WordPress数据库3. 安装相对URL插件4. 安装内网穿透发布网站4.1 命令行方式&#xff1a;4.2. 配置wordpress公网地址 5. 配置WordPress固定公网地址 前言 本文主要介绍如何在Linux Ubuntu系统上使用WordPress搭建一个本地网站&#xff0c…

ubuntu编译内核安装启动

下载源码 apt update apt install linux-source # /usr/src/linux-source-5.4.0/linux-source-5.4.0.tar.bz2 下载源码 tar -jxvf linux-source-5.4.0.tar.bz2 # /usr/src/linux-source-5.4.0 解压源码 安装依赖 sudo apt -y install build-essential sudo apt -y i…

多个锚点定位时的锚点优选方法(附公式和MATLAB代码讲解)

在多锚点定位系统中,锚点的选择对定位精度有重要影响。以下是几种常见的锚点选优方法,配合相应的公式和MATLAB代码示例进行详细分析。 文章目录 基于几何分布的选择基于距离最小化的选择加权优化选择总结基于几何分布的选择 方法描述: 锚点的几何分布影响定位的可辨识性。选…

DICOM标准:US超声模块属性详解——超声医学的DICOM标准解析

引言 数字成像和通信在医学领域中的应用极为广泛&#xff0c;其中DICOM&#xff08;数字成像和通信医学&#xff09;标准对于确保不同设备和系统之间的兼容性和互操作性至关重要。本文将详细介绍DICOM标准中关于超声医学&#xff08;Ultrasound, US&#xff09;的部分&#xff…

华为鲲鹏一体机 安装笔记

安装驱动 在这个链接 社区版-固件与驱动-昇腾社区 1 下载NPU固件 需要注册登录&#xff0c;否则报错&#xff1a; ERR_NO:0x0091;ERR_DES:HwHiAiUser not exists! Please add HwHi AiUser 准备软件包-软件安装-CANN…

STM32H750 USBCDC配置与使用

STM32H750 USBCDC配置与使用 &#x1f4cd;相关参考文章&#xff1a;《STM32 USB CDC VPC》 STM32H750VB有2个USB OTG接口&#xff08;1FS&#xff0c;1HS/FS&#xff09;无晶振型解决方案&#xff0c;带有LPM和BCD。 &#x1f516;本次使用USB-PTG-FS作为测试 &#x1f33f;…

引领数字时代:万码优才如何变革IT人才招聘新体验(这里有更精准的推荐)

目录 引领数字时代&#xff1a;万码优才如何变革IT人才招聘新体验引领未来科技&#xff0c;精准链接IT精英精准匹配&#xff0c;高效对接海量资源&#xff0c;覆盖广泛优化体验&#xff0c;简化流程 全面升级&#xff1a;AI赋能数字人才职业成长AI模拟面试职场千问智能简历评估…

网络安全法详细介绍——爬虫教程

目录 [TOC](目录)一、网络安全法详细介绍1. 网络安全法的主要条款与作用2. 网络安全法与爬虫的关系3. 合法使用爬虫的指南 二、爬虫的详细教程1. 准备环境与安装工具2. 使用requests库发送请求3. 解析HTML内容4. 使用robots.txt规范爬虫行为5. 设置请求间隔6. 数据清洗与存储 三…

vscode插件-08 Golang

文章目录 Go安装其他必须软件 Go Go语言环境&#xff0c;只需安装这一个插件。然后通过vscode命令下载安装其他go环境需要的内容。 程序调试&#xff0c;需要创建.vscode文件夹并编写launch.json文件。 安装其他必须软件 ctrlshiftp&#xff0c;调出命令面板&#xff0c;输入…

ConnectX-7 25/50/100/200/400G NIC

ConnectX-7 25/50/100/200/400G NIC ConnectX-7提供了广泛的软件定义、硬件加速的网络、存储和安全功能&#xff0c;使组织能够现代化和保护他们的IT基础设施。此外&#xff0c;ConnectX-7还支持从边缘到核心数据中心到云的敏捷和高性能解决方案&#xff0c;同时增强网络安全性…

windows在两台机器上测试 MySQL 集群实现实时备份

在两台机器上测试 MySQL 集群实现实时备份的基本步骤&#xff1a; 一、环境准备 机器配置 确保两台机器&#xff08;假设为服务器 A 和服务器 B&#xff09;能够互相通信&#xff0c;例如它们在同一个局域网内&#xff0c;并且开放了 MySQL 通信所需的端口&#xff08;默认是 …

uniapp实现中间平滑凸起tabbar

uniapp实现中间平滑凸起tabbar 背景实现思路代码实现尾巴 背景 在移动端开发中&#xff0c;tabar是一个使用频率很高的组件&#xff0c;几乎是每个APP都会用到。今天给大家分享一个中间平滑凸起的tabbar组件&#xff0c;有需要的可以做下参考。先上图镇楼&#xff1a; 实现思…

java版询价采购系统 招投标询价竞标投标系统 招投标公告系统源码

在数字化时代&#xff0c;企业需要借助先进的数字化技术来提高工程管理效率和质量。招投标管理系统作为企业内部业务项目管理的重要应用平台&#xff0c;涵盖了门户管理、立项管理、采购项目管理、采购公告管理、考核管理、报表管理、评审管理、企业管理、采购管理和系统管理等…

YOLOV8目标检测C++推理问题总结

背景 数据集有限&#xff0c;使用paddleOCR直接识别准确率无法达到99%&#xff0c;这里尝试用目标检测对识别得分比较低的图片进行二次处理&#xff1b; 类别数目&#xff1a;数字&#xff08;10&#xff09;字母&#xff08;26&#xff09;字符&#xff08;2&#xff09; 38 …

Python毕业设计选题:基于Hadoop的租房数据分析系统的设计与实现

开发语言&#xff1a;Python框架&#xff1a;flaskPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统首页 房屋信息详情 个人中心 管理员登录界面 管理员功能界面 用户管理界面 房屋信…

CSRF与SSRF

csrf(跨站请求伪造)的原理: csrf全称是跨站请求伪造(cross-site request forgery)&#xff0c;也被称为one-click attack 或者 session riding scrf攻击利用网站对于用户网页浏览器的信任&#xff0c;劫持用户当前已登录的web应用程序&#xff0c;去执行分用户本意的操作。 利…

Rust 力扣 - 1984. 学生分数的最小差值

文章目录 题目描述题解思路题解代码题目链接 题目描述 题解思路 原数组 nums 排序&#xff0c;遍历nums中下标为[0, nums.len() - k]的学生分数 假设当前遍历的下标为i则&#xff0c;以 i 下标为最小值的学生分数的最小差值为nums[i k - 1] - nums[i] 取最小差值的最小值即…