Vue中使用原生js创建元素样式不生效解决办法

编程入门 行业动态 更新时间:2024-10-24 10:20:20

Vue中使用原生js创建元素样式不生效<a href=https://www.elefans.com/category/jswz/34/1767401.html style=解决办法"/>

Vue中使用原生js创建元素样式不生效解决办法

在Vue项目中也会遇到需要动态创建DOM的情况,但是采用指定className的方式给创建的DOM元素指定样式不起作用,在调试界面能看到类名被解析,但是样式未加载,三天里尝试了N种方法,终于填了这个大坑,有需要的可以参考一下:

measureTooltipElement = document.createElement('div')
measureTooltipElement.className = "ol-tooltip ol-tooltip-measure"

样式:

.ol-tooltip {position: relative;background: rgba(0, 0, 0, 0.5);border-radius: 4px;color: white;padding: 4px 14px 4px 8px;opacity: 0.7;white-space: nowrap;font-size: 12px;
}.ol-tooltip-measure {opacity: 1;font-weight: bold;
}

但是在页面渲染时却不生效:

 参考了网上众多方法,有以下几种可能:

  1. Vue组件中样式Style中scoped导致样式局部生效,因为采用scoped每个类渲染后会有一个单独的data-v-xxxx编码格式,防止样式污染,去除即可。(这里测试无效)
  2. 使用样式穿透,跳过scoped,这样就不用去除scoped造成全局样式污染。Vue2使用/deep/ className,Vue3使用:deep(className),此外还有>>>(可以尝试一下,我这里没有效果)。
    // Vue3
    :deep(.ol-tooltip) {position: relative;background: rgba(0, 0, 0, 0.5);border-radius: 4px;color: white;padding: 4px 14px 4px 8px;opacity: 0.7;white-space: nowrap;font-size: 12px;
    }:deep(.ol-tooltip-measure) {opacity: 1;font-weight: bold;
    }
    // Vue2
    /deep/ .ol-tooltip {position: relative;background: rgba(0, 0, 0, 0.5);border-radius: 4px;color: white;padding: 4px 14px 4px 8px;opacity: 0.7;white-space: nowrap;font-size: 12px;
    }/deep/ .ol-tooltip-measure {opacity: 1;font-weight: bold;
    }
  3. 可能是类的优先级,在子类前加上父类,这里时动态创建的类,所以使用了也没效果。
  4. 我解决的办法:重新创建一个CSS/SCSS样式文件,然后在Vue组件中引用该文件即可,将不生效的样式都放在该样式文件中,不需要再去除scoped和deep。

更多推荐

Vue中使用原生js创建元素样式不生效解决办法

本文发布于:2024-02-06 11:17:37,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1748434.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:解决办法   样式   元素   Vue   js

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!