v-html 指令元素中标签样式不生效
v-html 指令生成的元素中标签的 class 样式不生效。
📎 问题描述
在某些场景需要使用 v-html 插入 HTML 内容时,会发现绑定的 class 样式不生效。
📎 问题原因
使用 官网 一段说明:
在单文件组件,scoped 样式将不会作用于 v-html 里的内容,因为 HTML 内容不会被 Vue 的模板编译器解析。 如果你想让 v-html 的内容也支持 scoped CSS,你可以使用 CSS modules 或使用一个额外的全局 <style> 元素。
📎 解决方案
可以使用全局样式,或者当前组件使用额外的全局 <style> 元素:
vue
<style lang="scss" scoped>
// ...
</style>
<style lang="scss">
</style>在 scoped 样式中,使用深度选择器:
vue
<style lang="scss" scoped>
.parent:deep(.child) {
// ...
}
</style>Tips:
>>>:vue的style使用的是css;/deep/、::v-deep: 使用scss预处理器;:deep():vue3一律采用:deep()这种方式用来深度访问组件样式;
