解决vue3中设置的v-html的代码样式不生效的问题

100 篇文章 6 订阅
16 篇文章 0 订阅

最近在做一个需求,遇到这样一个问题,接口返回的一段html字符串,在list.vue这个组件中使用v-html渲染到页面的时候,发现在list.vue中设置的对于v-html内容的样式没有生效,这是什么情况?

经过查询发现:

在单文件组件里,scoped 的样式不会应用在 v-html 内部,因为那部分 HTML 没有被Vue 的模板编译器处理。如果你希望针对v-html 的内容设置带作用域的 CSS,你可以替换为 CSS Modules 或用一个额外的全局

在单文件组件里,scoped 的样式不会应用在 v-html 内部,因为那部分 HTML 没有被Vue 的模板编译器处理
这句话非常清楚地表明了没有生效的原因。
那我们怎么设置让它生效呢?
直接使用:deep()
对于针对v-html的样式的,我们用:deep()处理一下

代码如下:

:deep(.all-tables) {
        table {
            background-color: #fff;
            td {
                font-size: 12px;
                color: #666;
            }
        }
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
v-htmlVue.js的一个指令,用于在页面渲染一段纯HTML代码。然而,使用v-html会导致所有样式失效。为了解决这个问题,有两种方法可以应用样式到v-html元素上。 第一种方法是使用scoped样式,在style标签添加 scoped 属性,并使用适当的选择器和样式来定义v-html元素的样式。例如,可以使用以下方式来定义表格的样式: ```html <style scoped lang="less"> .content-html{ /* table 样式 */ table { border-top: 1px solid #ccc; border-left: 1px solid #ccc; } table td, table th { border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; padding: 3px 5px; } table th { border-bottom: 2px solid #ccc; text-align: center; } } </style> ``` 然而,这种方式在v-html应用样式时会失效。因此,我们可以使用第二种方法,即使用/deep/关键字或>>>操作符(在Vue 2.2.0之前)来穿透父级样式,实现对v-html元素的样式应用。例如: ```html <style scoped lang="less"> .content-html{ /* table 样式 */ /deep/ table { border-top: 1px solid #ccc; border-left: 1px solid #ccc; } /deep/ table td, table th { border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; padding: 3px 5px; } /deep/ table th { border-bottom: 2px solid #ccc; text-align: center; } } </style> ``` 这样,样式就可以正确地应用到v-html元素上了。 但是需要注意的是,使用v-html加载的富文本相当于直接写在元素上的style,这会导致样式优先级的问题。如果遇到文字大小的样式没有生效问题,可以使用!important来提高样式的优先级,或者使用transform: scale()来调整样式。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【vue】关于v-html内容css样式失效解决办法](https://blog.csdn.net/coralime/article/details/114288686)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [1.使用v-html加载富文本,css样式不起作用](https://blog.csdn.net/qq_35491739/article/details/122475649)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值