Irgendwelche Ideen?
CSS4 wäre schick, wenn es einige Hooks für das Rückwärtsgehen hinzufügt. Bis dahin ist es möglich (obwohl nicht empfehlenswert), checkbox
und/oder radio
input
s zu verwenden, um den gewöhnlichen Verbindungsweg zu unterbrechen und damit auch CSS ermöglichen, außerhalb seines normalen Bereichs zu arbeiten...
/* Dinge verstecken, die später angezeigt werden können */
.menu__checkbox__selection,
.menu__checkbox__style,
.menu__hidden {
display: none;
visibility: hidden;
opacity: 0;
filter: alpha(opacity=0); /* Alte Microsoft-Opazität */
}
/* Basistyle für Inhalt und Menüstil */
.main__content {
background-color: hellgrau;
color: schwarz;
}
.menu__hidden {
background-color: schwarz;
color: hellgrau;
/* Liste nicht so _listy_ aussehen lassen */
list-style: none;
padding-left: 5px;
}
.menu__option {
box-sizing: content-box;
display: block;
position: static;
z-index: auto;
}
/* ▼ - \u2630 - Drei Balken */
/*
.menu__trigger__selection::before {
content: '\2630';
display: inline-block;
}
*/
/* ▼ - Abwärtspfeil */
.menu__trigger__selection::after {
content: "\25BC";
display: inline-block;
transform: rotate(90deg);
}
/* Anpassen, um mehr `auswählen` zu mögen, wenn Sie möchten */
.menu__trigger__style:hover,
.menu__trigger__style:active {
cursor: Zeiger;
background-color: dunkelgrau;
color: weiß;
}
/**
* Dinge, die getan werden, wenn Checkboxen/Radios geprüft sind
*/
.menu__checkbox__selection:checked + .menu__trigger__selection::after,
.menu__checkbox__selection[checked] + .menu__trigger__selection::after {
transform: rotate(0deg);
}
/* Dieser Teil ist etwas, das Sie möglicherweise anderswo sehen */
.menu__checkbox__selection:checked ~ .menu__hidden,
.menu__checkbox__selection[checked] ~ .menu__hidden {
display: block;
visibility: visible;
opacity: 1;
filter: alpha(opacity=100); /* Microsoft!? */
}
/**
* Hacky CSS-Änderungen nur auf der Grundlage von nicht-inline Checkboxen
* ... AKA das Zeug, das Sie nach diesem nicht mehr ignorieren können...
*/
.menu__checkbox__style[id="style-default"]:checked ~ .main__content {
background-color: hellgrau;
color: schwarz;
}
.menu__checkbox__style[id="style-default"]:checked ~ .main__content .menu__trigger__style[for="style-default"] {
color: dunkelorange;
}
.menu__checkbox__style[id="style-one"]:checked ~ .main__content {
background-color: schwarz;
color: hellgrau;
}
.menu__checkbox__style[id="style-one"]:checked ~ .main__content .menu__trigger__style[for="style-one"] {
color: dunkelorange;
}
.menu__checkbox__style[id="style-two"]:checked ~ .main__content {
background-color: dunkelgrün;
color: rot;
}
.menu__checkbox__style[id="style-two"]:checked ~ .main__content .menu__trigger__style[for="style-two"] {
color: dunkelorange;
}
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
Theme
Standardstyle
Erster alternativer Stil
Zweiter alternativer Stil
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
... ziemlich ungenießbar, aber nur mit CSS und HTML ist es möglich, fast alles außer dem body
und :root
von fast überall aus mit Hilfe der Verknüpfung der id
und for
Eigenschaften von radio
/checkbox
input
s und label
Triggern zu berühren und neu zu berühren.
Ein weiterer Haken ist, dass nur ein input
einer bestimmten id
-Nummer verwendet werden kann, das erste checkbox
/radio
gewinnt einen umgelegten Zustand, mit anderen Worten... Aber mehrere Labels können alle auf dasselbe input
verweisen, obwohl dies sowohl das HTML als auch das CSS noch ungenießbarer aussehen ließe.
... Ich hoffe, dass es eine Art Workaround gibt, der nativ für CSS Level 2 existiert...
Ich bin mir nicht sicher bei den anderen Pseudoklassen, aber ich habe :checked
vor CSS 3 verwendet. Wenn ich mich richtig erinnere, war es etwas wie [checked]
, deshalb finden Sie es im obigen Code, zum Beispiel,
.menu__checkbox__selection:checked ~ .menu__hidden,
.menu__checkbox__selection[checked] ~ .menu__hidden {
/* Regeln: und-so-weiter; */
}
... aber für Dinge wie ::after
und :hover
, bin ich mir überhaupt nicht sicher, in welcher CSS-Version sie erstmals erschienen sind.
All das gesagt, bitte verwenden Sie dies niemals in der Produktion, nicht einmal aus Wut. Als Scherz okay, oder mit anderen Worten, nur weil etwas getan werden kann, bedeutet das nicht immer, dass es getan werden sollte.
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