如何在Vue3单文件组件中引入局部CSS_使用style标签的scoped属性

阿静吖_4009

阿静吖_4009

2026-06-02

270人浏览

原创

通过编译时为元素添加唯一属性(如data-v-f3f42f0a)并重写css选择器实现样式隔离;第三方组件、v-html内容不自动带该属性;需用:deep()穿透子组件、:global()声明全局样式、:slotted()作用于插槽内容。

如何在vue3单文件组件中引入局部css_使用style标签的scoped属性

Vue3 SFC 中 <style scoped></style> 的作用机制

它不是简单地给元素加个 class 前缀,而是通过 Vue 编译器在构建时为模板中每个元素自动添加一个唯一属性(如 data-v-f3f42f0a),同时把 CSS 选择器也加上对应属性,实现样式隔离。这意味着:只有当前组件的根节点和子节点会被打上该属性,第三方组件或 v-html 插入的内容不会自动带上。

哪些选择器能生效,哪些会意外失效

scoped 对深层嵌套、动态类名、插槽内容的处理容易出问题,不是所有写法都如预期工作:

  • .btn { color: red; } ✅ 正常作用于本组件内带 class="btn" 的元素
  • div .btn ✅ 可以匹配子元素,但前提是 div 和 .btn 都在当前组件模板内
  • ::v-deep(.el-input) ✅ 必须用这个伪类穿透作用于子组件(如 Element Plus 组件)内部,注意 Vue 3 中推荐写法是 :deep(.el-input)
  • :global(.reset-style) ✅ 用于声明全局样式,不参与 scoped 处理
  • .parent /deep/ .child ❌ 已废弃,不推荐,且在 Vite + Vue 3 中可能完全无效

Vite 环境下 <style scoped></style> 的常见坑

开发时看着正常,打包后样式错乱?多半是构建阶段的处理差异导致:

vue-composition-api-best-practices
vue-composition-api-best-practices

Vue 3 组合式 API 与

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 2.5万人学习

Vue3.x 核心篇--十天技能课堂
Vue3.x 核心篇--十天技能课堂

共30课时 | 2.4万人学习

Vue3.x新特性篇--十天基础课堂
Vue3.x新特性篇--十天基础课堂

共20课时 | 1.7万人学习