样式 v-html Vue 3

Posted

技术标签:

【中文标题】样式 v-html Vue 3【英文标题】:Style v-html Vue 3 【发布时间】:2021-10-03 19:21:15 【问题描述】:

由于某种原因,这在 Vue 3 中有效,它说在所有其他 SO 答案中都已弃用:

.description >>> p 
  color: red;
  margin-bottom: 1rem;

但我已经尝试了 ::v-deep 的所有排列,但似乎无法使其工作:

::v-deep .description 
  p 
    color: red;
    margin-bottom: 1rem;
  


.description 
  ::v-deep p 
    margin-bottom: 1rem;
  

我将如何使用“vanilla”Vue 3 做到这一点?

<div class="description text-sm">
  <div v-html="item.description"></div>
</div>

我想做什么:

<style scoped>
.description p 
  margin-bottom: 1rem;

</style>

【问题讨论】:

为什么简单的.description p 不起作用? 因为我想要一个范围样式 哦,我试过了,只是在作用域 css 块中的 .description p 不起作用。我不知道为什么...... 好的,但是没有作用域语法它可以工作吗?浏览器当然不能拒绝为元素着色。p 标签肯定存在于输出中?您能否添加一个示例 item.description 只是为了完整?或者完全把它变成一个 sn-p? 啊,关键是我不想要全局样式,我想要这个组件的范围样式。是的,这会起作用,但它也会用我不想做的全局样式弄脏我的工作表 【参考方案1】:

看了vue-loader上的例子,回想起来答案就很明显了

问题是我认为嵌套是必需的,或者它必须在目标选择器之前。

实际上,它与此相同:

.description >>> p 
    margin: 1rem 0;

...除了&gt;&gt;&gt;::v-deep替换,需要删除空格,因为它是一个伪类,就像普通的css一样

这将起作用:

.description::v-deep p 
    margin: 1rem 0;

【讨论】:

【参考方案2】:

您可以使用scoped 属性来设置组件的样式。 所有选择器都将自动添加前缀,以便样式仅适用于该组件。从您的示例代码中不清楚是否有,所以让我们举个例子:

<style lang="scss" scoped>
.description 
  p 
    color: red;
    margin-bottom: 1rem;
  

</style>

::v-deep 还需要这种方式吗? v-deep 不会使其范围更广。 你能检查生成的 CSS 编译成什么吗?

你能用你的代码创建一个完整的 sn-p 来在这里测试吗?

【讨论】:

我用我的作用域 css 添加了一条评论。有没有办法在没有scss的情况下实现它?我把我试过的东西放在上面 我明白了。您是否尝试过 lang="scss" 只是为了测试?这可能会根据您的配置更改样式的处理。您应该创建一个可执行代码 sn -p 来查找错误。

以上是关于样式 v-html Vue 3的主要内容,如果未能解决你的问题,请参考以下文章

样式 v-html Vue 3

vue从后台获取的数据有html标签通过v-html渲染到页面,然后怎么给这里面的html添加样式?

给v-html下的标签设置样式

Vue教程v-html 指令

5. Vue v-text、v-html、v-bind的使用

vue 给富文本标签添加样式