首先是选择器特殊性,每个选择器都有一个特殊性值,这个值用于判断优先级。特殊性值可以按照以下规则进行计算:
1. 每个id选择器数量为a,特殊性值为a*100。 2. 每个类、伪类、属性选择器、伪元素选择器数量为b,特殊性值为b*10。 3. 每个元素选择器和伪类选择器数量为c,特殊性值为c*1。 4. 通配符、子选择器、相邻选择器等的特殊性值为0。 5. 内联样式的特殊性值最高,为1000。 举个例子,如果样式中包含一个id选择器、两个类选择器和一个元素选择器,那么它的特殊性值为101。
其次是样式来源,样式来源可以分为四种类型:
1. 浏览器默认样式,特殊性值为0. 2. 用户代理样式,特殊性值为1。 3. 外部样式表,特殊性值为10。 4. 内部样式表和内联样式,特殊性值为100。 如果存在相同特殊性值的样式,会优先选用靠后的样式。
综上所述,计算优先级的具体算法可以概括为:将选择器特殊性值和样式来源值相加,得出总的优先级值,值越大的样式,优先级越高。