vue 中 通过js插入的dom 无法生效css

vue 中 通过js插入的dom 无法生效css

问题描述

通过js向div中动态添加dom后,事先写好的css样式对新增的dom不生效
在这里插入图片描述

在这里插入图片描述
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jiTxEElY-1649219103507)(vx_images/245342312246906.png)]

原因

通过测试,这是因为vue文件中的style标签添加了scoped的原因,而scoped的作用是为了保证这些css样式只会对当前vue文件(组件)生效,但是由于其他vue文件(组件)中也有可能会出现相同的class名相同的css样式,于是vue就采用了添加随机后缀的方式防止class名重复的样式出现样式覆盖的情况。

解决办法

把style标签的scoped干掉即可
在这里插入图片描述
在这里插入图片描述

注意点

当然这么做的前提是你得保证当前vue文件(组件)中的样式不会出现与其他组件样式class重名,否则可能会出现样式覆盖的情况,不过只是一个vue文件(组件)干掉scoped是不会出现样式覆盖的,因为其他的组件可以避免样式覆盖。

### 实现 CSS 样式重置的方法 #### 全局样式重置 为了确保整个 Vue 项目的样式一致性,可以在项目入口文件 `main.js` 或者创建一个新的全局样式文件来进行样式的初始化。使用 normalize.css 可以保持浏览器默认样式的实用性并解决跨浏览器差异。 ```javascript // main.js import './assets/css/normalize.css'; ``` 这使得所有页面加载时都会应用这些基础样式规则[^2]。 对于更彻底的样式清除,则可以考虑引入 Reset.css: ```bash npm install --save reset-css ``` 接着同样在 `main.js` 文件导入此库: ```javascript // main.js import 'reset-css'; ``` 这种方式下,所有的 HTML 元素都将被赋予统一的基础样式设置,消除了浏览器间固有的样式不一致问题[^1]。 #### 组件内部样式处理 如果仅希望影响特定组件而不改变其他地方的表现形式,在单文件组件 (SFC) 中可以直接定义 scoped 的 `<style>` 块来限定作用范围内的样式覆盖行为。 ```html <template> <!-- 组件模板 --> </template> <script setup lang="ts"> /* 组件逻辑 */ </script> <style scoped> @import url('https://unpkg.com/reset-css/reset.min.css'); /* 额外自定义样式 */ body { font-family: Arial, sans-serif; } </style> ``` 上述例子展示了如何在一个单独 SFC 内部通过链接外部资源的方式来执行局部性的样式清理工作;当然也可以选择下载本地副本再做相同操作[^3]。 需要注意的是,当采用 scoped 属性时,所声明的选择器只会应用于当前组件实例中的 DOM 结构上,从而减少了意外修改到无关区域的风险。 #### 自定义全局样式解决方案 另一种做法是在根级 App.vue 文件中加入非 scoped 的 style 标签用于放置那些应该贯穿始终生效的一般性样式调整语句。这样既不影响其它独立模块又能达到预期效果。 ```html <!-- src/App.vue --> <template> <router-view></router-view> </template> <script setup lang="ts"></script> <style> @import '~normalize.css'; /* 使用 Webpack 别名简化路径 */ *, ::before, ::after { box-sizing: border-box; /* 确保盒模型计算方式一致 */ } h1,h2,h3,p,a,ul,ol,li,... { /* 对常用标签指定通用属性 */ margin:0; padding:0; list-style:none; } </style> ``` 这种方法允许开发者灵活地组合多种策略,既能利用第三方工具带来的便利又不失对细节之处的手动把控能力。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值