浅谈VUE中的样式污染问题

在使用VUE做项目的时候,随着页面的增加,重复调用同一种组件,造成的样式污染问题不容小视。
查找了相关的资料和结合实际项目,我遇到的样式污染问题主要由以下两个原因造成:

  1. 使用了同一种组件,却在CSS中对该组件设置了不同的样式;
  2. 子元素的根元素会继承父元素的 ScopeId;

目前可以的解决方案是:
1.在写每一个.Vue页面时,一开始就将style设置为scoped(注意scoped原理就是在css以及html上加一个唯一标识,然后根据权重来实现目的。scoped的作用是使得.Vue中的样式不影响其他的.Vue组件,而不是使Vue组件样式不受外界影响)。但是scoped要慎用,在需要修改公共组建(第三方库或者项目中定制的组件)的样式时,scoped会造成很多麻烦。这种情况可以使用两个style样式,将修改公共组建的样式放在< style>中,其余的样式放在< style scoped>中,具体原因可以参考这篇文章.vue文件加scoped 样式不起作用的解决方法

2.为每一个组件的根元素提供一个特殊的样式名,当一个组件被重复使用的时候,样式很容易重叠,所以每次被使用的时候写一个特殊的class样式名,结合我自身的项目,在同一个.Vue中需要展示三张表格,但是表格的颜色样式互不相同,如果我给这三个表格都设置class=“table”,那么即使在style中设置不同的样式,最终显示还是一样,但是根据特殊的命名方法,分别把class设为sosdatatable,aisdatatable,emergencytasktable,再分别设置样式,就不会相互干扰了。这种特殊的命名方式适合区分重复调用的element-ui自带的组件。例如我使用element-ui自身的分页控件。

对于sos表格,在template中设置分页的div,对于element-ui自带的el-pagination控件,设置一个特殊的class=“page-sosdatatable-cyt”
在这里插入图片描述
然后再css样式中直接用class名(.page-sosdatatable-cyt)+属性名称(.el-pager li)设置分页的背景颜色为#272e38在这里插入图片描述
对于emergencytask表格,也是在template中对el-pagination控件设置一个不同于其他表格分页的class=“page-emergencytasktable-cyt”
在这里插入图片描述
在CSS样式中用.page-emergencytasktable-cyt .el-pager li设置背景颜色为#172d37在这里插入图片描述
对两张表格的分页控件设置了不同的class,在样式中直接用class名+属性名称来设置不同的背景颜色,这样就避免了样式的重叠和干扰,效果如下:
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue项目样式污染是指当页面增加时,重复调用同一种组件会造成样式冲突的问题。这个问题主要有两个原因导致。首先,使用了同一种组件,但在CSS对该组件设置了不同的样式。其次,子元素的根元素会继承父元素的ScopeId。为了解决这个问题,有几种方法可以尝试。 一种解决方案是在每个Vue页面的style标签添加scoped属性。scoped的原理是给CSS和HTML添加一个唯一标识,并根据权重来实现目的。scoped的作用是使得Vue组件样式不会影响其他Vue组件,但不是让Vue组件样式不受外界影响。然而,scoped需要谨慎使用。在需要修改公共组件(第三方库或项目定制的组件)的样式时,scoped会导致一些麻烦。针对这种情况,可以在style标签使用两个样式,将修改公共组件的样式放在一个style标签,而将其他样式放在另一个带有scoped属性的style标签。 另一种解决方案是使用不同的class来区分不同的表格分页控件。比如,对于sos表格,可以在template设置一个特殊的class,然后在CSS样式使用该class名和属性名称来设置分页的背景颜色。对于emergencytask表格,可以在template设置一个不同于其他表格分页的class,然后在CSS样式使用该class名和属性名称来设置分页的背景颜色。这样,可以避免样式的重叠和干扰。 综上所述,为了解决Vue项目样式污染问题,可以使用scoped属性来限制组件样式的影响范围,同时要注意scoped的使用场景。另外,可以使用不同的class来区分不同的表格分页控件,以避免样式的冲突。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [浅谈VUE样式污染问题](https://blog.csdn.net/qq_33204193/article/details/87886269)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值