我在我对特异性的理解和针对一个元素之间运行循环。我了解特异性的基本概念,并阅读了大量关于如何使用 a、b、c、d 计算特异性的文章,其中 d 是最低特异性,a 是最高特异性。

我正在失去具体实现的范围。在下面的片段中,即使某些特异性规则比其他规则“更高”,也会应用较低的特异性,例如

/* 0001 */

span {
  color: red;
}


/* 0001 */

p {
  color: blue;
}


/* 0010 */

.main {
  color: orange;
}


/* 0100 */

#h4-id {
  color: limegreen;
}


/* 0002 */

div h4 {
  color: purple;
}
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>

<body class='main'>
  <h3>this should be orange</h3>

  <div id='h4-id'>
    <h4>ID Selector</h4>
  </div>

  <p>
    text inside paragraph
    <span>hello world</span>
  </p>
</body>

</html>


有一个 ID 为 divh4-id 。该规则将所有文本设置为浅绿色。

还有另一个具有较低特异性的选择器 div h4 ,此规则“获胜”并应用该规则中的声明。

我相信原因是它是 "direct" target

这是另一个例子:

  /* 0002 */

p span {
  /*     font-size: 200px; */
  text-decoration: underline dotted red;
  font-style: normal;
  color: teal;
  background-color: yellow;
}

/* 0001 */

span {
 background-color: teal;

}


/* 0010 */

.main {
  font-family: monospace;
  color: blue;
  font-size: 22px;
  background-color: lightgrey;
}


/*  0001 */

p {
  font-family: cursive;
  color: indigo;
  font-size: 100px;
  background-color: limegreen;
  font-style: italic;
  text-decoration: underline;
<p class='main'>
  Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do <span>eiusmod tempor incididunt</span> ut Tristique magna sit amet purus gravida quis blandit turpis. Tellus elementum sagittis vitae et. Faucibus pulvinar <span>elementum integer enim neque</span>  volutpat ac tincidunt vitae. At tempor commodo ullamcorper a.
</p>https://stackoverflow.com/questions/ask#


在这个例子中,低特异性再次获胜,但这些是“直接目标”(我相信),这就是他们获胜的原因。类“main”没有比后代选择器 p span 更高的优先级。
  • .main 类的分数是 10,它里面的所有文本都应该应用规则集,除非有一个 ID
  • p span 选择器是 2,它获胜的原因是它是直接针对的(即使特异性分数较低?这就是我的困惑所在)。

  • 这是我一直在阅读 solidify my knowledge of specificity 的多种类型的文章和引用资料之一

    是否正确地说,在应用特异性规则和计算特异性之前,如果元素是直接定位的,则不适用特异性规则并且直接目标始终优先(如我发布的示例)?如果是这种情况,就我自己的心智模型而言,我更喜欢使用 CSS 图来计算特异性:
    false, 0, 0, 0, 0(false 表示它不是直接目标,也可以始终为 1 或 0)。这是有效的推理吗?

    最佳答案



    当两个或更多竞争选择器将样式应用于相同的元素时,特异性很重要 - 具有更高特异性的规则获胜。

    在评估应用于不同元素的样式时,特异性并不重要,即使该样式是从祖先继承的。



    不,我会说这是不正确的。我不会被“直接定位”这句话所包围……从某种意义上说,所有 CSS 选择器都直接定位一组元素,但该规则集的某些属性可以级联到后代,例如 color 。继承的样式也不会继承它们源自的规则集的特殊性;否则,要更改子元素的颜色,您必须每次都匹配或击败特定性。

    例如,以下代码段中的文本是红色的,因为 #main(选择器)比 div(选择器)具有更高的特异性,并且样式应用于相同的元素:

    #main {
      color: red;
    }
    
    div {
      color: blue;
    }
    <div id="main">text</div>


    但是,在下一个示例中,p 获胜,因为选择器影响了不同的元素:

    #main {
      color: red;
    }
    
    p {
      color: blue;
    }
    <div id="main">
      <p>text</p>
    </div>


    现在,以最后一个例子为例,添加一个新的、更具体的选择器,将颜色应用于 p :

    #main {
      color: red;
    }
    
    p {
      color: blue;
    }
    
    #main p {
      color: green;
    }
    <div id="main">
      <p>text</p>
    </div>


    文本现在是绿色的,因为选择器 #main p (0,1,0,1) 高于选择器 p (0,0,0,1) 并且两个选择器影响相同的元素。

    关于css - 特异性和直接靶向,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52081960/

    10-09 14:35