Vue使用v-html渲染数据时修改样式

时间:2025-01-22 12:28:23

通过在网上查阅资料主要有三种解决方法:

1. 定义一个class在<style>标签中使用深度选择器 >>>指向想要改变样式的元素,这里以改变图片样式为例,测试可用。(也可以尝试使用 width:100% !important)

  1. <div class="content" v-html=""></div>
  2. <style scoped>
  3. .content >>> img {
  4. width: 100%;
  5. }
  6. </style>

2. 使用 updated() 生命周期钩子函数,js动态配置样式,代码如下:

  1. update() {
  2. // 主要是通过操作DOM和使用Vue生命周期钩子函数实现
  3. let obj = document.getElementById('content');
  4. let imgs = obj.getElementsByTagName('img');
  5. for (let i =0; i < imgs.length; i++) {
  6. imgs[i].style.width = '100%';
  7. imgs[i].style.height = '100%';
  8. }
  9. }

3. 去掉 style中的scoped

       在vue组件中,我们写style时,为了防止页面样式冲突,在每个组件中会加上scoped属性。经测试,去掉该属性即可渲染样式成功。但是在组件过多或者项目过大时,经常会出现页面样式冲突,因此该方法不建议使用

       tips: scoped属性导致css仅对当前组件生效,而html绑定渲染出的内容可以理解为是子组件的内容,一般情况下子组件不会被加上对应的属性,所以不会应用带有scoped的css。