Hier ist eine weitere Idee, die es Ihnen erlaubt, andere Elemente zu beeinflussen, ohne einen bestimmten Selektor zu berücksichtigen und nur den :hover
-Zustand des Hauptelements zu verwenden.
Dafür werde ich auf die Verwendung von benutzerdefinierten Eigenschaften (CSS-Variablen) zurückgreifen. Wie wir in der Spezifikation lesen können:
Benutzerdefinierte Eigenschaften sind normale Eigenschaften, daher können sie auf jedem Element deklariert werden, werden mit normaler Vererbung und Cascade-Regeln aufgelöst...
Die Idee ist, benutzerdefinierte Eigenschaften im Hauptelement zu definieren und sie zu verwenden, um untergeordnete Elemente zu gestalten. Da diese Eigenschaften vererbt werden, müssen wir sie nur im Hauptelement bei hover ändern.
Hier ist ein Beispiel:
#container {
width: 200px;
height: 30px;
border: 1px solid var(--c);
--c:red;
}
#container:hover {
--c:blue;
}
#container > div {
width: 30px;
height: 100%;
background-color: var(--c);
}
Warum kann dies besser sein als die Verwendung eines spezifischen Selektors in Kombination mit :hover?
Ich kann mindestens 2 Gründe nennen, die diese Methode zu einer guten machen, die in Betracht gezogen werden sollte:
- Wenn wir viele verschachtelte Elemente haben, die dieselben Stile teilen, wird dies vermeiden, dass wir einen komplexen Selektor verwenden müssen, um alle beim Hovern zu zielen. Mit benutzerdefinierten Eigenschaften ändern wir einfach den Wert beim Überfahren des Elternelements.
- Ein benutzerdefinierte Eigenschaft kann einen Wert von jeder Eigenschaft und auch einen Teilwert davon ersetzen. Zum Beispiel können wir eine benutzerdefinierte Eigenschaft für eine Farbe definieren und sie in einem
border
, linear-gradient
, background-color
, box-shadow
usw. verwenden. Dies erspart es uns, all diese Eigenschaften beim Hover zurückzusetzen.
Hier ist ein komplexeres Beispiel:
.container {
--c:red;
width:400px;
display:flex;
border:1px solid var(--c);
justify-content:space-between;
padding:5px;
background:linear-gradient(var(--c),var(--c)) 0 50%/100% 3px no-repeat;
}
.box {
width:30%;
background:var(--c);
box-shadow:0px 0px 5px var(--c);
position:relative;
}
.box:before {
content:"A";
display:block;
width:15px;
margin:0 auto;
height:100%;
color:var(--c);
background:#fff;
}
/*Hover*/
.container:hover {
--c:blue;
}
Wie wir oben sehen können, benötigen wir nur eine CSS-Deklaration, um viele Eigenschaften verschiedener Elemente zu ändern.