Das überraschende Verhalten von !important in CSS Custom Property Werten

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Hah! Mir war nicht klar, dass CSS Custom Properties ihr eigenes Auflösungsverhalten dafür haben, wie !important in ihren Werten funktioniert. Und das, obwohl ich einen Leitfaden darüber geschrieben habe. 😬 Aber hey, er ist jetzt aktualisiert.

Stefan Judis dokumentiert es klar. Der Punkt ist, dass !important im endgültigen Wert überhaupt nicht verwendet wird. Also

div {
  --color: red !important;
  color: var(--color);
  color: yellow;
}

Es fühlt sich irgendwie so an, als sollte red gewinnen, aber weil !important letztendlich aus dem Custom Property Wert entfernt wird, gewinnt yellow. Und das liegt nicht daran, dass die color Deklaration zuletzt kommt – wenn color: red !important; die erste Deklaration gewesen wäre, dann hätte red gewonnen.

Aber es ist nicht so, dass !important einfach entfernt und ignoriert wird; es wird auf eine gelenkte Weise verwendet, die beeinflusst, welcher Custom Property Wert gewinnt. Aber dann ist !important weg, wenn dieser Wert angewendet wird. Stefans Beispiel

div {
  /*
    `!important` overrules the
    other `--color` definitions
  */
  --color: red !important;
  color: var(--color);
}

.class {
  --color: blue;
}

#id {
  --color: yellow;
}

Das fühlt sich seltsam an (für mich), da man denken würde, dass yellow, das auf #id deklariert ist, gewinnen sollte, weil es die höchste Spezifität hat. Aber das ist der Deal mit dem gelenkten Verhalten – !important lässt red gewinnen und wird dann entsprechend auf die color angewendet.

Direkter Link →