我必须为具有float:left / right的规则解析html文档集的css。

我已经弄清楚了当存在一组嵌套的DOM元素(每个元素最多具有一个类)时,一切工作如何。规则的特异性基于计算出的选择器编号,首先是id,然后是class,然后是tag elem。如果是平局,请选择最后的规则。

因此,特异性的思想是,在匹配DOM标签元素时,最多基于选择器的特异性来选择一条规则。

当存在多个类时,不仅在最深的DOM子级,还在父级,该怎么办?简单形式的多个类选择并应用多个规则。但是我无法弄清楚确定特异性如何与之相互作用的完整指南。例如。通常特异性选择一个规则,最高特异性。但是,在终端DOM元素中有多个类的情况下,在互联网上演示的简单情况下,由多个类选择的多个规则具有相同的特异性。但是我可以看到更复杂的场景,并且不知道如何选择规则。

这是一个例子:

p.cls1 {
}
div#id1 p.cls2 {
}
.cls3 {
}


HTML:

<div id="id1"><p class="cls1 cls2 cls3">...


即使所有3个类别具有不同的特异性编号,也会选择所有3个类别。但是,我可以通过给外部div多个类来使问题更严重。尽管有特殊性,但在css 2.1规范中找不到任何说明应该发生的信息以及多个类如何选择多个规则的信息。

安迪

最佳答案

确定您在这里实际要问的问题有点困难。一个具体的例子会有所帮助。

但通常,样式优先级从最高到最低的顺序为:


内联样式
包含的样式(同一文档)
外部引用的样式


在所有这些样式中,假设特异性相同,则最后列出的样式具有更高的优先级。但是,具有较高优先级的样式(例如内联样式)将始终覆盖其他样式,无论其特异性如何。因此,元素上的内联样式将始终覆盖所包含样式表中的样式。

这里是更多信息,您可能已经了解了特异性... http://www.htmldog.com/guides/cssadvanced/specificity/


  一组的实际特异性
  嵌套选择器需要一些
  计算。基本上,你给
  id选择器(“ #whatever”)的值为
  100,每个类选择器
  (“ .whatever”)的值是10
  HTML选择器(“无论如何”)的值为
  1.然后将它们全部加起来,嘿,请记住,您具有特殊性
  值。


所有这些都已经说过了,!important在适用相同规则的另一层上进行了添加,只是!important优先于所有非!important样式。

更新:
您的示例有点好奇,我认为您对特定性有误解。特殊性并不意味着与另一个类应用于同一元素的类会完全覆盖它。相反,它的意思是“如果样式属性相同,则具有较高特异性的样式属性将覆盖其他样式属性。”

在您的示例中,cls2上与其他任何类样式匹配的属性将覆盖它们。但是,如果没有样式冲突,那就没有问题!它会采用所有样式。

可能会像在任何旧对象上分配变量一样将其想到。引用变量有多种方法,但是您的特异性定义了您的执行顺序。最后设置变量的赋值是实际渲染对象时的赋值。

09-17 16:59