样式污染css,样式污染是什么意思
深度选择器
我们使用scoped实现组件的私有化,不对全局造成样式污染,表示当前style属性只属于当前模块.但我们难免会用到一些框架如element vant等,我们想要修改其中样式时,如果使用了scoped,则需要深度选择器来进行样式的更改.
凤庆网站建设公司成都创新互联公司,凤庆网站设计制作,有大型网站制作公司丰富经验。已为凤庆千余家提供企业网站建设服务。企业网站搭建\外贸营销网站建设要多少钱,请找那个售后服务好的凤庆做网站的公司定做!
使用场景:
当我们需要覆盖element-ui中的样式时只能通过深度作用选择器
style为css时的写法如下
有些像 Sass 之类的预处理器无法正确解析 。这种情况下你可以使用 /deep/ 或 ::v-deep 操作符取而代之——两者都是 的别名,同样可以正常工作。
style使用css的预处理器(less, sass, scss)的写法如下
第一种/deep/
第二种::v-deep
建议使用第二种方式,/deep/在某些时候会报错,::v-deep更保险并且编译速度更快.
css如何避免class命名污染?
1、
语义化。
2、
class 跟 id 最大的不同就是一个元素可以有多个 class,但只能有一个 id。所以 class 应该是分散的、抽象的。比如要定义“红色按钮”和“蓝色复选框”,应该定义成“.red.button”、“.blue.checkbox”,而非“.red-button”、“.blue-checkbox”。这样一来不利于日后扩展(蓝色按钮和红色复选框);二来这相当于为每个元素单独定义了class,class 未复用。
3、
利用好 CSS 的后代选择器、兄弟选择器等等,即使同为一个 .header,在 .nav 和 .cell 下也会是不同的(当然如果你非要定义成 .nav-header 和 .cell-header 也不是不可以)
4、
如果引入了第三方样式库,为了避免和它的命名冲突,通常做法是在你自己的CSS前加前缀,比如为每一个 class 加前缀“ui-”之类的。
5、
如果引入了两个第三方样式库本身就冲突,那……
6、
多看看主流的开源样式库是如何定义的,比如 Bootstrap、jQuery UI、WeUI 等等等等,不一一列举了。但要记得“尽信书不如无书”,这些框架未必做的就是百分百对的,其实存在很多设计不合理的地方,原因是在最开始未规划好给后来挖了坑,后来发现时想改已经来不及了(因为毕竟得尽可能兼容之前的版本,大多数时加法好做减法不好做)。
React 样式污染
1、样式文件必须以[name].module.css或[name].module.scss的形式命名
2、以变量的形式导入样式文件,比如 import styles from './style.module.css';
3、className以变量引用的方式添加,比如 className={ styles.title }
CSS 关于样式穿透
前两天在项目中遇到一个问题,需要手动去修改引入的第三方组件的CSS样式,我第一想法就是直接在组件上新增一个自定义的class去覆盖原有的样式,结果当然是行不通的(不然我现在也不会在这里写这篇)。
于是我查了一下,是因为我在vue组件里面将设置成了局部样式,局部样式只在当前组件生效,对引入的其他组件是无法起作用的。然后我试了一下,把 scoped 去掉就行了。
或者在组件里面写多一份全局样式
但是如果不在style里面写 scoped ,直接写成全局样式,最后可能会面临多个组件之间样式污染的问题。如何使得局部样式可以覆盖到引入的第三方组件呢,我想到以前涉及过的一个名词 样式穿透 ,立刻实践了一下,果然就成了。
样式穿透 需要定义一个外层的style,通过 可以使得socped属性下的的样式穿透到全局, 外层 第三方组件 或者 外层 /deep/ 第三方组件 。 是 /deep/ 的别名,但是在sass之类的样式预处理器之中无法正确解析。
网站栏目:样式污染css,样式污染是什么意思
本文链接:http://ybzwz.com/article/phpepo.html