Perché la pseudo classe link collega infrange le regole di specificità CSS previste?
-
05-07-2019 - |
Domanda
Per quanto mi risulta, le Regole di specificità CSS indicano che un la pseudo classe ha lo stesso peso di un selettore di tag. Quindi un selettore come " div p a " sarebbe più specifico di "a: link".
Ma come dimostra il seguente caso di prova, non sembra essere il caso. Perché il link è rosso?
<!DOCTYPE HTML>
<html>
<head>
<title></title>
<meta charset="UTF-8">
<style type="text/css" media="screen">
a:link { color: red; }
div p a { color: green; }
div.foobar p a { color: green; }
</style>
</head>
<body>
<div>
<p>
<a href="http://somecrazyurlwierdthing.com">A link... why is it red?</a>
</p>
</div>
<div class="foobar">
<p>
<a href="http://somecrazyurlwierdthing.com">But it turns green when you add a class selector.</a>
</p>
</div>
</body>
</html>
Modificato l'esempio per includere il " div.foobar p a " selettore.
Soluzione
La specifica a cui si collega indica che una pseudo-classe (: link
in questo caso) ha una specificità superiore rispetto al nome di un elemento. Per essere precisi, usando il formato a-b-c-d, i tre selettori vengono visualizzati come:
a-b-c-d
0 0 1 1
0 0 0 3
0 0 1 3
La tua confusione possibile deriva dall'uso del termine "pseudo-selettore" che non riconosce la distinzione tra pseudo-classi come : link
e pseudo-elementi come : first-line
.
Altri suggerimenti
La cosa è : link
non è uno pseudo-elemento come : first-line
, è una pseudo-classe e quindi conta come una classe per la specificità.
Specificità per ciascuno:
a: link 0,0,1,1
div p a 0,0,0,3
a: il link vince.