Versuchen Sie das...
Diese Lösung verwendet einfache CSS2-Regeln ohne Javascript und funktioniert in allen Browsern, alt und neu. Beim Klicken aktiviert das Kind-anchor
-Tag sein active
-Pseudo-Klassenevent. Es versteckt sich dann einfach, um das active
-Event dem Eltern-li
-Tag zu überlassen, der sich dann neu gestaltet und sein Ankerkind wieder mit einem neuen Stil enthüllt. Das Kind gestaltet also den Elternteil.
Verwenden Sie Ihr Beispiel:
Dies ist ein Link
Wenden Sie diese Styles jetzt mit der active
-Pseudoklasse auf a
an, um den Eltern-li
-Tag umzustylen, wenn auf den Link geklickt wird:
a.link {
display: inline-block;
color: white;
background-color: green;
text-decoration: none;
padding: 5px;
}
li.listitem {
display: inline-block;
margin: 0;
padding: 0;
background-color: transparent;
}
/* Wenn dieses 'active'-Pseudoklassenevent unten bei Klick ausgelöst wird, versteckt es sich und löst das aktive Event erneut auf seinem Elternelement aus, das neue Styles auf sich selbst und sein Kind anwendet. */
a.link:active {
display: none;
}
.listitem:active {
background-color: blue;
}
.listitem:active a.link {
display: inline-block;
background-color: transparent;
}
Sie sollten sehen, dass der Link mit grünem Hintergrund jetzt beim Klicken zu einem blauen Hintergrund des Listenelements wechselt.
![Geben Sie eine Bildbeschreibung hier ein]()
wird zu
![Geben Sie eine Bildbeschreibung hier ein]()
beim Klicken.
7 Stimmen
Safari Tech Preview 137 hat heute die erste Implementierung des
:has()
Selectors eingeführt.4 Stimmen
Bald erhältlich: chrome!
0 Stimmen
Es wäre großartig, etwas zu haben, das auf eine Weise funktioniert, die kohärent mit JavaScript ist
el.parenteElement.parentElement...
wiea:active:parent:parent
oder sogara::active::parent::parent
, mit zwei Semikolons. Es wäre nicht nur kohärenter mit den vorhandenen Pseudoklassen, sondern auch intuitiver zu verwenden und einfacher zu verknüpfen, um bei Bedarf mehr als eine Ebene nach oben zu gelangen. Ich hoffe wirklich auf diese Art von Umsetzung, weil ich es wirklich nicht mag,:has(something)
zu verwenden: es bringt weder Logik noch intuitive noch ergonomische Benutzbarkeit mit sich. Der JavaScript-Weg ist besser, und bei weitem besser als :has().0 Stimmen
@willywonka Ich stimme zu. Ein beliebtes Tool (bin mir nicht sicher, ob ich es erwähnen darf) verwendet
:upward(x)
, wobeix
die Anzahl der DOM-Baumebenen angibt, die nach oben gehen soll. Diese Syntax ist ziemlich flexibel und funktioniert gut für diese Funktionalität.0 Stimmen
Ab heute unterstützen die meisten modernen Browser mit den neuesten Versionen wie: Chrome/Android Browser/Chrome für Android 105+, Edge 105+, Safari/Safari iOS 15.4+ und Opera 91+ es standardmäßig. Nur Firefox 103 bis 106 unterstützt es nicht standardmäßig, Sie müssen es aktivieren. Für mobile Geräte: (Opera Mini, Samsung Internet und Firefox Mobile unterstützen es noch nicht)
1 Stimmen
@Abzoozy Vielen Dank für das Update. Um deinen hilfreichen Kommentar zu verbessern, kannst du "es" definieren und auch angeben, welche Firefox-Einstellung diese Funktion aktiviert, bis sie offiziell eingeführt wird?
0 Stimmen
@RockPaperLz-MaskitorCasket Um den :has()-Selektor in den Firefox-Versionen 103 - 107 zu aktivieren: ` 1. Öffnen Sie den Firefox-Browser und geben Sie about:config ein. 2. Eine Warnseite wird angezeigt, klicken Sie auf die Schaltfläche "Risiko akzeptieren und fortfahren", um fortzufahren. 3. Ein Suchfeld mit dem Platzhalter "Nach Einstellungsname suchen" befindet sich oben, geben Sie "layout.css.has-selector.enabled" ohne doppelte Anführungszeichen ein. 4. "layout.css.has-selector.enabled" wird als falsch angezeigt, klicken Sie einfach auf die Schaltfläche rechts davon, um es auf wahr zu schalten. ` Sie können auch auf folgende Seite verweisen: support.mozilla.org/de-DE/questions/1139994
0 Stimmen
@Abzoozy Danke. Dieser Selektor wird so hilfreich sein, insbesondere für Projekte, bei denen das HTML nicht geändert werden kann.
2 Stimmen
Jetzt in Chrome 105 developer.chrome.com/blog/has-m105