Vue---scoped,deep,CSS Modules

scoped

scoped是Vue组件标签中的一个特性,作用是限制CSS 只作用于当前组件,防止影响全局或其他组件。

作用原理

Vue 通过 自动添加属性选择器(如 data-v-xxxx)来作用于当前组件的元素,从而实现 CSS 作用域隔离。

xml 复制代码
<template>
  <div class="container">
    Scoped 样式示例
  </div>
</template>

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

编译后

css 复制代码
<div class="container" data-v-abc123>Scoped 样式示例</div>
.container[data-v-abc123] {
  color: red;
}

deep

/deep/(或 ::v-deep)在 Vue 中用于穿透 scoped 样式 ,作用是让样式作用于子组件的深层次元素 ,即使它们位于 scoped 作用域内。

实际开发应用

  • 修改第三方库(Element UI,Ant等)组件样式
  • 直接作用子组件深层次的元素

使用方式

vue2(/deep/或者>>>)
xml 复制代码
<style scoped>
/deep/ .child-element {
  color: red;
}

/* 或者使用 >>>,它是 `/deep/` 的别名 */
>>> .child-element {
  color: red;
}
</style>
vue3(::v-deep() 或者:deep())
xml 复制代码
<style scoped>
::v-deep(.child-element) {
  color: red;
}
</style>
<style scoped>
:deep(.child-element) {
  color: red;
}
</style>

CSS Modules

优点

  • 避免全局样式冲突:每个组件的样式都是局部的,不会影响其他组件。
  • 支持动态绑定 :可以用 :class 绑定动态样式。
  • 适用于 Vue 组件化开发,特别是在大型项目中更容易管理。

基本使用

xml 复制代码
<template>
  <div :class="$style.title">Hello CSS Modules</div>
</template>

<style module>
.title {
  color: red;
  font-size: 20px;
}
</style>

作用原理

1.title类名会被自动转换成一个唯一的名称

css 复制代码
.title___3ghj2 { color: red; font-size: 20px; }

2.组件中的 :class="$style.title" 会被转换成这个唯一类名

父组件传递 CSS Modules

父组件:

xml 复制代码
<template>
  <Child :styles="$style" />
</template>

<style module>
.parentTitle {
  font-size: 18px;
  color: green;
}
</style>

子组件

xml 复制代码
<template>
  <div :class="styles.parentTitle">我是子组件</div>
</template>

<script setup>
defineProps(["styles"]);
</script>

Vue 组件外部使用 CSS Modules

xml 复制代码
<script setup>
import styles from "./style.module.css";
</script>

<template>
  <div :class="styles.box">外部 CSS Modules</div>
</template>

style.module.css

css 复制代码
.box {
  background-color: yellow;
  padding: 10px;
}

相关推荐
一 乐4 小时前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
科技D人生4 小时前
Vue.js 学习总结(20)—— Vue-Office 实战:word、pdf、excel、ppt 多种文档的在线预览
vue.js·word·vue-pdf·stylesheet·docx-preview·vue-office
vx1_Biye_Design5 小时前
基于Spring Boot+Vue的学生管理系统设计与实现-计算机毕业设计源码46223
java·vue.js·spring boot·spring·eclipse·tomcat·maven
vx_Biye_Design5 小时前
基于Spring Boot+vue的湖北旅游景点门票预约平台的设计--毕设附源码29593
java·vue.js·spring boot·spring cloud·servlet·eclipse·课程设计
hedley(●'◡'●)5 小时前
基于cesium和vue的大疆司空模仿程序
前端·javascript·vue.js·python·typescript·无人机
qq5_8115175155 小时前
web城乡居民基本医疗信息管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
百思可瑞教育5 小时前
构建自己的Vue UI组件库:从设计到发布
前端·javascript·vue.js·ui·百思可瑞教育·北京百思教育
百锦再5 小时前
Vue高阶知识:利用 defineModel 特性开发搜索组件组合
前端·vue.js·学习·flutter·typescript·前端框架
hdsoft_huge5 小时前
1panel面板中部署SpringBoot和Vue前后端分离系统 【图文教程】
vue.js·spring boot·后端
这儿有一堆花5 小时前
Vue 是什么:一套为「真实业务」而生的前端框架
前端·vue.js·前端框架