Vue中的scoped属性

理解:

.vue 文件中,scoped<style> 标签的一个属性,作用是让样式只作用于当前组件 ,避免样式污染其他组件
scoped 让样式只在自己的组件内生效,不会影响到其他组件的同名元素

举例

没有 scoped 的情况(样式全局生效):
js 复制代码
<!-- ComponentA.vue -->
<style>
p {
  color: red;
}
</style>
js 复制代码
<!-- ComponentB.vue -->
<template>
  <p>我是B组件的文字</p> <!-- 这里的文字也会变成红色,因为ComponentA的样式是全局的 -->
</template>
scoped 的情况(样式仅当前组件生效):
js 复制代码
<!-- ComponentA.vue -->
<style scoped>
p {
  color: red;
}
</style>
<!-- 只有ComponentA里的<p>会变红,ComponentB的<p>不受影响 -->

原理:

Vue 会给加了 scoped 的组件内所有 DOM 元素自动添加一个唯一的属性(比如 data-v-xxxxxx),同时给样式也加上这个属性选择器,让样式只匹配当前组件的元素。

编译后大概是这样:

css 复制代码
/* 原样式 */
p { color: red; }

/* 编译后(带scoped) */
p[data-v-xxxxxx] { color: red; }

注意:

如果需要在当前组件中修改子组件的样式,scoped 可能会限制效果,这时可以用 ::v-deep 穿透:

vue 复制代码
<style scoped>
/* 穿透scoped,修改子组件的样式 */
::v-deep .child-component-class {
  margin-top: 20px;
}
</style>
相关推荐
铁皮饭盒21 分钟前
第2课:5分钟!用 Trae AI 生成你的第一个后端服务(Bunjs + Elysia)
前端·后端·全栈
之歆1 小时前
DAY13_CSS3进阶完全指南 —— 背景、边框、文本、渐变、滤镜与 Web 字体(下)
前端·css·css3
剑神一笑1 小时前
CSS 阴影生成器:从单层到多层叠加的艺术
前端·css·css3
lljss20201 小时前
1. NameServer 域名服务器---NS
linux·服务器·前端
用户6688599847662 小时前
Vue 3.0安装与使用
vue.js
anOnion2 小时前
构建无障碍组件之Tooltip Pattern
前端·html·交互设计
陈随易2 小时前
为什么今天还会有新语言?MoonBit 想解决什么问题?
前端·后端·程序员
西洼工作室2 小时前
unipp+vue3+python h5+app极验验证码集成全流程解析
前端·uni-app·全栈·极验
ZC跨境爬虫2 小时前
跟着 MDN 学 HTML day_15:(媒体缓冲、拖动与时间范围控制)
前端·笔记·ui·html·edge浏览器·媒体