vue 3 第二十六章:样式(scoped及样式穿透)

这篇具有很好参考价值的文章主要介绍了vue 3 第二十六章:样式(scoped及样式穿透)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 介绍

在 Vue 中,我们可以使用 scoped 特性来给组件的样式添加作用域。通过为组件的 <style> 标签添加 scoped 特性,我们可以确保组件的样式仅应用于该组件的模板中,而不会影响其他组件或全局样式。

2. 基本使用

<template>
  <div class="example">
    <h1>Scoped Styles</h1>
  </div>
</template>

<style scoped>
.example {
  color: red;
}
</style>

在上面的例子中,.example 类的样式只会应用于该组件的模板中,而不会影响其他组件或全局样式。

3. scoped原理

  • 给当前元素及子元素都加上data-v-开头的一串随机 hash 值
    vue 3 第二十六章:样式(scoped及样式穿透)
  • css中通过属性选择器选择这个 hash ,这样就确保了唯一性,避免样式污染
    vue 3 第二十六章:样式(scoped及样式穿透)

4. 深度选择器

  • :bind()

我们用vue开发过程中,总是会用到各种组件库,如:ElmentUI/andt design等等,或者我们自己封装的组件,这些组件库提供的组件样式有时并不满足实际需求,这时候就需要使用深度选择器来修改样式。

下面是一个使用深度选择器的例子:
vue 3 第二十六章:样式(scoped及样式穿透)
此时我们在自己的组件中修改 btn 组件的样式,发现并没有效果
vue 3 第二十六章:样式(scoped及样式穿透)
vue提供了:deep()选择器:

<template>
  <div class="example">
    <btn>Scoped Styles</btn>
  </div>
</template>

<style lang="scss" scoped>
.example {
  :deep(.content) {
    color: red;
  }
}
</style>

vue 3 第二十六章:样式(scoped及样式穿透)
当然了在 sass 中我们还可以使用 ::v-deep (在 less 中使用 /deep/ )来修改样式,也是可以实现的。

5. 插槽选择器

  • :slotted()

默认情况下,作用域样式不会影响到<slot/>渲染出来的内容,因为它们被认为是父组件所持有并传递进来的。使用 :slotted伪类以明确地将插槽内容作为选择器的目标:
vue 3 第二十六章:样式(scoped及样式穿透)
渲染效果如下:
vue 3 第二十六章:样式(scoped及样式穿透)

  • 代码如下:
<template>
  <div class="example">
    <button class="content">
      <slot></slot>
      <slot name="title"></slot>
    </button>
  </div>
</template>

<script setup lang="ts"></script>

<style lang="scss" scoped>
/* 直接修改插槽元素的样式,不生效 */
.example {
   .unname-class {
     color: red;
   }
}

/* 使用:slotted()插槽选择器可以修改插槽内元素的样式 */
.example {
  :slotted(.unname-class) {
    color: red;
  }
  :slotted(.name-class) {
    color: orange;
  }
}
</style>

</style>

6. 全局选择器

  • :global()

在实际开发中我们可能会封装比较多的公共样式文件,但在某个组件中我们想去修改某个公共样式,那这个时候比起另外创建一个<style></style>标签来说,更推荐使用:global()选择器:

<style scoped lang="scss">
:global(.global-color) {
  color: red;
}
</style>

vue 3 第二十六章:样式(scoped及样式穿透)
修改前文字颜色为橙色,修改后文字颜色已经发生改变,效果如下:
vue 3 第二十六章:样式(scoped及样式穿透)

7. 混合使用局部与全局样式

  • 可以在同一个.vue文件里使用 scoped 和非scoped
<style>
// ......
</style>

<style scoped lang="scss">
// ......
</style>

8. CSS Modules

  • 除了scoped之外,我们也同样可以使用module实现样式的私有化
  • scoped是通过生成一串data-v开头,随机的自定义属性,通过属性选择器实现的样式私有
  • module是通过生成一个随机的类名,实现样式私有
  • module将生成的 CSS class 作为$style对象暴露给组件

先看效果:
vue 3 第二十六章:样式(scoped及样式穿透)
示例代码:

<template>
  <div class="example">
    <header :class="$style.header">头部</header>
    <main :class="$style.main">内容</main>
    <footer :class="$style.footer">底部</footer>
  </div>
</template>

<style module lang="scss">
.header,
.main,
.footer {
  height: 100px;
  width: 500px;
  border: 1px solid #000;
  font-size: 18px;
  font-weight: bold;
}
.header {
  margin-bottom: 20px;
  color: palevioletred;
}
.main {
  margin-bottom: 20px;
  color: green;
}
.footer {
  color: blue;
}
</style>

9. 自定义注入名称

  • module除了以上用法之外,还提供自定义名称的功能
  • 效果和$style是一样的
<template>
  <div class="example">
    <header :class="myStyle.header">头部</header>
    <main :class="myStyle.main">内容</main>
    <footer :class="myStyle.footer">底部</footer>
  </div>
</template>

<style module="myStyle" lang="scss">
.header,
.main,
.footer {
  height: 100px;
  width: 500px;
  border: 1px solid #000;
  font-size: 18px;
  font-weight: bold;
}
.header {
  margin-bottom: 20px;
  color: palevioletred;
}
.main {
  margin-bottom: 20px;
  color: green;
}
.footer {
  color: blue;
}
</style>

10. CSS 中的 v-bind()

  • 单文件组件的<style>标签支持使用v-bind CSS 函数将 CSS 的值链接到动态的组件状态
  • 简单来说就是可以在css中通过v-bind()函数动态绑定js中的变量
  • 实际的值会被编译成哈希化的 CSS 自定义属性,并且在源值变更的时候响应式地更新

渲染效果:
vue 3 第二十六章:样式(scoped及样式穿透)

代码示例:文章来源地址https://www.toymoban.com/news/detail-459591.html

<template>
  <div class="example">
    <div class="example-text">css中v-bind绑定变量</div>
  </div>
</template>

<script setup lang="ts">
import { ref } from "vue";
const color = ref("red");
</script>

<style scoped lang="scss">
.example-text {
  color: v-bind(color);
}
</style>

到了这里,关于vue 3 第二十六章:样式(scoped及样式穿透)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 详解源码vue3的样式穿透scope

    vue3在打包之后只有一个html文件,为了避免样式污染可以为style标签引入scope属性,它的原理十分简单,它会为每一个dom元素都添加一个data属性,这个属性是不重复的,然后会在当前组件的选择器的末尾,追加一个属性选择器,当两者匹配上时,会把样式命中到dom上 scope渲染规

    2024年02月03日
    浏览(38)
  • vue 3 第二十七章:样式(动态class、动态style)

    在 Vue 中,我们可以使用动态绑定语法来动态地添加类名或样式。本章将介绍 Vue 3 中如何使用动态绑定语法来动态地添加类名或样式。 在 Vue 中,我们可以使用 :class 或 v-bind:class 指令来动态地添加类名。例如,下面的例子中,我们可以根据 isActive 的值动态地为元素添加 act

    2024年02月07日
    浏览(46)
  • CSS样式穿透技巧:利用scoped与deep实现前端组件样式隔离与穿透

    一、什么是scoped 在vue文件中的style标签上,有一个特殊的属性:scoped。 当一个style标签拥有scoped属性时,它的CSS样式就只能作用于当前的组件,通过该属性,可以使得组件之间的样式不互相污染。 二、scoped的原理 为组件实例生成一个唯一标识,给组件中的每个标签对应的d

    2024年04月10日
    浏览(53)
  • 带你玩转 ui 框架 ——scoped及样式穿透问题详解

    前言 在我们前端的开发中经常会使用到各种 ui 框架 下面这两个是比较火的,也是我常用的两个ui框架。 问题描述 但是在使用框架的时候难免会遇到需要改变组件中的一些样式,当然如果我们所有页面的组件样式都是统一的话,我们可以进行全局设置样式,但是如果我们仅仅

    2023年04月21日
    浏览(46)
  • VRRP技术和浮动路由(第二十六课)

    一、浮动路由 1、浮动路由概述 1)浮动路由是什么 -浮动路由又称为路由备份,由两条或多条链路组成浮动路由 -浮动路由指配置两条静态路由,这两条静态路由的目的地址相同,但是下一跳地址不同两条静态路由 -给这两条静态路由设置不同的优先级,优先级高的那条静态路

    2024年02月15日
    浏览(72)
  • 学C的第二十六天【指针的进阶(二)】

    ========================================================================= 相关代码gitee自取 :C语言学习日记: 加油努力 (gitee.com)  ========================================================================= 接上期 : 学C的第二十五天【指针的进阶(一)】_高高的胖子的博客-CSDN博客  ================================

    2024年02月13日
    浏览(74)
  • 服务(第二十六篇)redis的主从复制、哨兵、集群

    主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(Master),后者称为从节点(Slave);数据的复制是单向的,只能由主节点到从节点。 原理: 主从关系确定好后,开启从节点时,会发送一个sync的同步命令给主节点,主节点接收到后会把redis内存

    2024年02月06日
    浏览(84)
  • 第十六章 脚手架文件介绍

    react项目脚手架文件目录 public/index.html public/index.html 文件是 React 应用程序的入口点,负责提供 HTML 文档的基本结构,并包含一个 id 为 root 的 div 元素,这是 React 应用程序将呈现的地方。 src/index.js src/index.js 文件是React应用程序的主要入口点,负责将应用程序呈现到 DOM 中。

    2023年04月09日
    浏览(40)
  • C语言第二十六弹---字符串函数(下)

    ✨ 个人主页:   熬夜学编程的小林 💗 系列专栏:   【C语言详解】   【数据结构详解】 目录 1、strncat 函数的使用 2、strncmp 函数的使用 3、strstr 函数的使用和模拟实现 4、strtok 函数的使用 5、strerror 函数的使用 6、perror 函数的使用 总结 • Appends the first num characters of sourc

    2024年02月20日
    浏览(72)
  • 嵌入式学习第二十六天!(网络传输:TCP编程)

            socket   -  connect  -  send  -  recv   -  close         socket   -  bind   -  listen   -  accept   - recv   -  send   -  close         1. connect:               功能: 发送链接请求               参数:                   sockfd: 套接字文件描述符                  

    2024年03月09日
    浏览(81)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包