::v‐deep - daniel-qa/Vue GitHub Wiki
::v-deep 是 Vue 特有的一个深度选择器,它允许你穿透 Vue 单文件组件(SFC)的样式封装,修改子组件或外部库(如 Element UI)中的嵌套元素样式。
-
为什么需要 ::v-deep?
在 Vue 单文件组件(SFC)中,CSS 默认是 scoped 的,意味着它只作用于当前组件内的 DOM 元素,避免了全局样式污染。
当你使用第三方组件库(如 Element UI)时,这些库的样式通常不会受到当前组件的 scoped 样式影响,导致你无法直接修改它们的样式。
::v-deep 使你能够“穿透”这个样式封装,选择并修改嵌套的子组件的样式。
例如,当你想调整 el-radio(Element UI)组件的内嵌样式时,::v-deep 可以帮助你做到这一点。
-
语法和使用
::v-deep 是一个 Vue 特有的深度选择器,通常用在 <style scoped> 标签中,来修改子组件或者外部组件库的样式。 它的作用是可以选择到嵌套在组件内部的子元素或外部库中的元素,打破样式的封装。
-
示例:修改 Element UI 单选框样式
假设你使用了 Element UI 库,并想要调整其中的 el-radio 元素,修改它的字体大小、选中状态的颜色等。你可以通过 ::v-deep 来实现。
<template>
<div>
<el-card class="card">
<template #header>
<span>選擇發送類型</span>
</template>
<el-radio-group v-model="firstCardSelection" class="radio-group">
<el-radio label="option1">端外通知</el-radio>
<el-radio label="option2">Email</el-radio>
<el-radio label="option3">簡訊</el-radio>
</el-radio-group>
</el-card>
</div>
</template>
<script>
export default {
name: 'MyComponent',
data() {
return {
firstCardSelection: 'option1',
};
},
};
</script>
<style scoped>
/* 使用 ::v-deep 修改 el-radio 样式 */
::v-deep .el-radio-group {
font-size: 18px; /* 调整整个单选框组的字体大小 */
}
::v-deep .el-radio {
font-size: 20px; /* 调整单个 el-radio 组件的字体大小 */
}
::v-deep .el-radio__input {
width: 18px; /* 调整单选框按钮的大小 */
height: 18px;
}
::v-deep .el-radio__inner {
border-width: 2px; /* 修改单选框内圆的边框宽度 */
border-color: #409EFF; /* 修改圆的边框颜色 */
}
::v-deep .el-radio__label {
font-size: 18px; /* 增大标签文本字体 */
color: #333; /* 修改文本颜色 */
}
::v-deep .el-radio.is-checked .el-radio__inner {
background-color: #409EFF; /* 修改选中时的背景颜色 */
border-color: #409EFF; /* 修改选中时的边框颜色 */
}
::v-deep .el-radio.is-checked .el-radio__label {
color: #409EFF; /* 修改选中时的标签文本颜色 */
}
</style>
直接用全域修改
/* global.css 或在 scoped 样式外部 */
<style>
.el-radio__label {
font-size: 18px;
}
</style>
-
SFC ; Single File Component(单文件组件)
SFC 是 Vue.js 提供的一种组织代码的方式,用于在一个文件中包含 HTML 模板、JavaScript 逻辑 和 CSS 样式。这种结构使得 Vue 组件更易于管理和维护,同时也使得开发者可以清晰地把各部分内容集中在一个文件中,增强了开发体验。
-
Vue SFC 结构
Vue 单文件组件(SFC)包含三个主要部分:
模板(Template):定义了组件的 HTML 结构。
脚本(Script):包含组件的 JavaScript 逻辑,如数据、方法、生命周期钩子等。
样式(Style):为组件添加 CSS 样式,通常是 scoped(局部作用域)样式,只作用于当前组件。