vue使用原生js创建元素样式不生效问题及解决

 更新时间:2023年06月02日 10:34:27   作者:大白菜飞船  
这篇文章主要介绍了vue使用原生js创建元素样式不生效问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

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中创建的dom样式失效

原因:less,sass,scss 设置了scoped

关闭scoped即可解决

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • vue3删除过滤器的原因

    vue3删除过滤器的原因

    去年,vue3出来了。增加了很多新功能,但是也删掉了一些功能。比如删掉了vue2中的过滤器filter功能。与此同时,官方建议:用方法调用或计算属性替换过滤器。本文将分析vue3删除过滤器的原因及如何用其他方法实现过滤器的功能
    2021-05-05
  • vue-cropper插件实现图片截取上传组件封装

    vue-cropper插件实现图片截取上传组件封装

    这篇文章主要为大家详细介绍了vue-cropper插件实现图片截取上传组件封装,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • vue 使用el-table循环生成表格的过程

    vue 使用el-table循环生成表格的过程

    这篇文章主要介绍了vue 使用el-table循环生成表格的过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vant的Loading加载动画组件的使用(通过接口拿数据时显示加载状态)

    vant的Loading加载动画组件的使用(通过接口拿数据时显示加载状态)

    这篇文章主要介绍了vant的Loading加载动画组件的使用,通过接口拿数据时显示加载状态,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-01-01
  • vue安装vue-router出错问题及解决

    vue安装vue-router出错问题及解决

    这篇文章主要介绍了vue安装vue-router出错问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-03-03
  • Vue2子组件绑定 v-model,实现父子组件通信方式

    Vue2子组件绑定 v-model,实现父子组件通信方式

    这篇文章主要介绍了Vue2子组件绑定 v-model,实现父子组件通信方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • vue中字符串如何拼接路由path路径

    vue中字符串如何拼接路由path路径

    这篇文章主要介绍了vue中字符串如何拼接路由path路径方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • vue3+ts如何通过lodash实现防抖节流详解

    vue3+ts如何通过lodash实现防抖节流详解

    loadsh是一个工具库,我们通常使用loadsh的debounce函数处理防抖,下面这篇文章主要给大家介绍了关于vue3+ts如何通过lodash实现防抖节流的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • vue实现滚动条下滑时隐藏导航栏,上滑时显示导航栏功能

    vue实现滚动条下滑时隐藏导航栏,上滑时显示导航栏功能

    这篇文章主要介绍了vue实现滚动条下滑时隐藏导航栏,上滑时显示导航栏,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-07-07
  • Pinia介绍及工作原理解析

    Pinia介绍及工作原理解析

    这篇文章主要为大家介绍了Pinia介绍及工作原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论