存在class、属性和标签的样式时,依次排序,同类型或同权重(class和属性同权重)的样式,靠后的样式覆盖之前的样式(以类型为准,不以名称为准),最终排位第一者为最终呈现效果。
注意:
1.嵌套、叠加、>、 +等方式,不会影响最终效果。
2.:nth-child、:first-child、:last-child等伪类高于class和属性
四、!important
!important为样式中的特例,它的权重为最高,高于id、class、属性、标签以及style属性
<body class="body" style="background: red"></body>
.body { background: green !important; }
页面呈现效果为green。但是当对样式设置进行排序时,仍然是同类型样式下,以另一类型权重高者为最终效果。例如
body.body { background: blue !important; } .body { background: green !important; }
相同class及!important下,前一种样式设置存在body标签,后一种则没有,所以最终效果呈现blue
说明
1.尽量避免使用!important。因为!important权重最高,会对节点的该属性做强制性设置,在使用时要慎重
2.使用场景
1.变通
!important在很多时候是不建议使用的,在stylelint中有一项规则即禁止使用!important。有一种变通的方式,可以在多数情况下实现类似!important`的效果
html <body class="body"> <p class="p"> <span class="span">一段文本</span> </p> </body>
css .body .p .span { color: red; } .span.span.span.span.span {/** 自身样式叠加 **/ color: green; }
在不考虑行内样式和id的情况下,对自身样式进行重复叠加多次使用,可以增加class权重,对样式进行复写。
使用前提:
1.没有行内样式style属性
2.没有id样式
3.自身样式叠加次数多余嵌套个数
好处:不用考虑DOM层级关系,减少层级嵌套
五、总结
综合以上说明,权重的计算基本遵从以下规则:
1.按类型比对,类型权重高者显示;
2.同类型,按数量比对,多者显示;
3.同数量,按先后顺序比对,后者显示
嵌套的使用建议
样式嵌套使用,除了增加权重外,也体现了DOM的某种结构关系。但嵌套并不是在任何情况下都需要的。
嵌套的使用并不是越多越好。嵌套越多,权重越大,但同时对页面的性能消耗也越大。建议使用继承和样式叠加。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。