现在遇到一个项目,uniapp开发的微信小程序,之前的所有页面都没有使用scope将css样式私有化,导致css属性全局污染了,现在要开发后续的功能,如何在后续的开发中避免之前css的样式污染?
之前开发的内容不能使用scope将css私有化,因为一旦私有化可能会对某些页面造成影响,现在的情况就是之前的内容不能动,在此基础上开发。
目前想到的办法是在后续开发的功能中,所有的css类名名全部使用当前文件名+类名,这样尽可能的来避免样式重名,在这里想问一下各位有什么好的办法来实现?
现在遇到一个项目,uniapp开发的微信小程序,之前的所有页面都没有使用scope将css样式私有化,导致css属性全局污染了,现在要开发后续的功能,如何在后续的开发中避免之前css的样式污染?
之前开发的内容不能使用scope将css私有化,因为一旦私有化可能会对某些页面造成影响,现在的情况就是之前的内容不能动,在此基础上开发。
目前想到的办法是在后续开发的功能中,所有的css类名名全部使用当前文件名+类名,这样尽可能的来避免样式重名,在这里想问一下各位有什么好的办法来实现?
要避免CSS全局污染,尤其是在不能修改现有代码库的情况下,你可以采取一些策略来确保新开发的样式不会影响到旧的样式,同时也不会被旧的样式所影响。以下是一些建议:
MyComponent
的组件,在my-component.vue
文件中,你可以使用类名如my-component__header
、my-component__content
等。scope
,但新开发的组件可以考虑使用CSS模块。这样,每个组件的样式都会有一个唯一的命名空间,从而避免样式冲突。App.vue
)的顶部使用CSS Reset来消除浏览器默认样式的影响。这有助于确保你的样式有一个更一致的起点,并减少潜在的样式冲突。shadow DOM
或scoped slots
等特性来实现CSS隔离。这些方法可以将一个组件的样式完全封装在其内部,不会影响到其他组件。最后,请注意,虽然这些策略可以帮助你减少CSS全局污染的风险,但完全避免它可能是非常困难的。因此,建议在进行任何重大更改之前都要进行充分的测试和评估,以确保不会对现有功能造成负面影响。
如果暂时不想要处理历史页面的话,新开发的页面严格按照 BEM
的命名规则就好了。
或者你额外使用 CSS Modules
给新开发的业务模块增加样式的hash后缀。
人为规定各种规则来控制css变量冲突事实证明是徒劳的,只要代码还在不断的增长,就有人会写出冲突的css名称,建议尝试使用tailwindcss这样的css原子化来解决日益膨胀的css代码,但是不知道uniapp使用这样的css框架难度。
BEM只是基本的命名规范,不是防止css污染的办法。
可以使用个性前缀,像我们AXUI前端框架的v3版本便是使用_
来作为css前缀的,所有的css变量也都使用_
作为前缀,这样子基本上可以杜绝全局污染。
最终展示效果是:class="_btn _color-red"
。看上去丑陋了些,但是还是蛮实用的。
当然你可以使用其他前缀符号,例如@
,%
等。
6 回答2.9k 阅读✓ 已解决
8 回答4.7k 阅读✓ 已解决
6 回答3.4k 阅读✓ 已解决
5 回答2.8k 阅读✓ 已解决
6 回答2.3k 阅读
5 回答6.3k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
你的想法是可以的,按照你说的,既然之前的样式不能动,那就只能写好之后的。严格控制选择器,一是通过人为控制命名,二是使用scope,建议两者结合使用。
如果没有那么麻烦,后面项目内容还有很多工作要做,也可以花点时间把之前的代码整整,这样后面写起来也舒心