css样式生效顺序总结

在写一个项目的时候,发现自己的css样式总是不起作用,或者抢不到优先级,现在对css的生效顺序以及优先级做一个总结

首先要明白对一个元素可以有多个样式style同时生效(实际上也经常这么做),即一个span标签可以被外层div控制,也可以直接被span控制,一个span标签本身也可以使用多个class。(class=“class1 class2”)

  • 在多个内容渲染的情况下,元素最终效果=各个属性融合,如body定义了span的字体,span的父级div定义了子span的样式,他们最终会呈现两个效果的融合显示
  • 在同一个class名,被重复写的情况下,元素最终=各个属性融合,并且按照就近原则进行相同属性的优先级比较。并且可以用!important来抢优先级,这可以用在和一些不可变的样式来抢优先级。

本篇考虑的是相同的属性情况下,优先级的问题,即如果我同时在很多地方定义了该span的color,它会怎么显示的问题。

法则1:就近原则

在精确性相同的情况下,根据css距离要改变的元素越近的优先级越高,书上一般都会写内联式>嵌入式>外部式,这是基本常识就不举例子了。但是如果同时内敛/嵌入/外部的有多个该怎么办呢?

假如现在有两个class,spanclass1和spanclass2,并且都在span中引用了

  • 一个外部式css文件同时写了这两个样式,则最靠近css文件末端的优先级高
  • 两个外部式css文件各写了这两个样式,则后link引入的优先级高
  • 嵌入式写的和一个外部式分别写这两个样式,则哪个放后面哪个高

即,越靠近待渲染元素的样式优先级越高

但是可以通过加入!important来改变这一优先级,即如果其中一个样式的color写成color: red !important;那么会优先显示红色

法则2:越精确越优先

id选择器>.class选择器>元素本身

如#top a>.top a >a

但是可以通过加入!important来改变这一优先级,即如果span的color写成color: red !important;那么会优先显示红色

精确性和就近性同时存在

目前的测试结果来看,大部分都是精确的优先级更高,即不管我样式引用写在哪里(内联除外)都是越精确的优先级越高

但是如果写成内联式,那么内联式拥有更高优先级

神奇的一点是,如果内敛式和外部css的important一起出现,important更优先

总结

!important>内敛>精确性>距离

虽然这样总结有交叉的部分,但是好记,也都是经过测试得到的结果

补充:常见的一些css选择器

https://www.w3school.com.cn/cssref/css_selectors.ASP

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注