Nested CSS (verschachteltes CSS)

In diesem Forum gibt es Starthilfe zum neuen Extension-System von phpBB 3.1/3.2. Fragen zur Entwicklung von Extensions und zur Konvertierung von phpBB 3.0.x MODs sind ebenfalls willkommen.
Antworten
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2962
Registriert: 15.12.2014 10:19
Kontaktdaten:

Nested CSS (verschachteltes CSS)

Beitrag von LukeWCS »

Hallo Kolleginnen und Kollegen

1. Vorwort und allgemeine Info

CSS hat ja allgemein mächtig zugelegt und in den letzten Jahren sind weitere Eigenschaften dazugekommen, die mir teilweise schon sehr lange (Jahrzehnte) gefehlt haben. Zum Beispiel ist die Pseudo-Klasse :is() ein probates Mittel um die elendigen redundanten Selektoren mal ein wenig eindämmen (reduzieren) zu können. Mir persönlich geht das aber noch nicht weit genug und speziell auf dem Gebiet wäre Nested CSS eine willkommene Lösung.

Wem das jetzt aus dem Stand erstmal nichts sagt, hier ein Beispiel. Ich habe mir dazu bewusst die Kirk-Toggles ausgesucht, weil diese von mehreren Entwicklern hier auf .de eingesetzt werden und in mindestens 31 Erweiterungen integriert wurden. Somit hat das schon einige Verbreitung und ist gut geeignet als Anschauungsobjekt.

Klassische Notation:

Code: Alles auswählen

.toggle {
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;
	width: 38px;
	height: 17px;
	position: relative;
	border-radius: 50px;
	cursor: pointer;
	font-family: FontAwesome;
	transition: background-color 0.2s;
}

.toggle:before {
	position: absolute;
	width: 14px;
	height: 13px;
	background-color: #ffffff;
	top: 2px;
	border-radius: 50%;
	display: flex;
	justify-content: center;
	align-items: center;
	left: 22px;
	content: "\f00d";
	transition: 0.2s;
}

.toggle,
.toggle:hover,
.toggle:focus {
	background-color: #cccccc;
	border: none;
	color: #000000;
}

.toggle:checked {
	background-color: #3b87ab;
}

.toggle:checked:before {
	left: 2px;
	content: "\f00c";
}
Verschachtelte Notation:

Code: Alles auswählen

.toggle {
	-webkit-appearance: none;
	-moz-appearance: none;
	appearance: none;
	width: 38px;
	height: 17px;
	position: relative;
	border-radius: 50px;
	cursor: pointer;
	font-family: FontAwesome;
	transition: background-color 0.2s;

	&,
	&:hover,
	&:focus {
		background-color: #cccccc;
		border: none;
		color: #000000;
	}

	&:before {
		position: absolute;
		width: 14px;
		height: 13px;
		background-color: #ffffff;
		top: 2px;
		border-radius: 50%;
		display: flex;
		justify-content: center;
		align-items: center;
		left: 22px;
		content: "\f00d";
		transition: 0.2s;
	}

	&:checked {
		background-color: #3b87ab;

		&:before {
			left: 2px;
			content: "\f00c";
		}
	}
}
Die Code Box ist natürlich nicht so der Hit wenn es um einen direkten Code Vergleich geht, aber wenn man beide Boxen mal bis ans Ende blättert, kann man schon gut die Stärke von Nested CSS erkennen. Kleines Detail am Rande: beide Varianten haben - inklusive Leerzeilen - exakt die gleiche Anzahl Zeilen. In dem Fall 44.

Die wohl wichtigste und direkt sichtbare neue Eigenschaft bei der verschachtelten Variante: keine redundanten Selektoren mehr. Es gibt nur noch einen primären Selektor, auf dessen Basis alle weiteren Selektoren durch das Symbol & abgeleitet werden. Das hat auch den Vorteil, dass bei einer individuellen Integration in eigene Projekte der Klassen-Name nicht an zig Stellen geändert werden muss, sondern nur noch an einer. Bei den Kirk-Toggles ist das also nur 1 Selektor der geändert werden muss, keine 7 mehr.

Des Weiteren ist diese Notation deutlich Objekt-orientierter, weil zusammengehörige Regeln auch wie ein Objekt wahrgenommen werden können. Das kann gerade bei grossen CSS Dateien eine Verbesserung in Sachen Übersicht bewirken. Für mich (als Programmierer) ist die verschachtelte Variante jedenfalls sehr ansprechend. Passt ausserdem gut zu meinem Drang, alles strukturieren zu wollen. ^^

Wenn man sein bestehendes CSS zum ersten Mal auf Nested umstellt, ist das auch mental eine gehörige Umstellung. :wink: Man muss sich erst an diese Darstellung/Notation gewöhnen.

2. Einführung und Unterstützung

Eingeführt wurde das 2023 und wurde Ende 2023 bereits von den wichtigsten Browsern unterstützt. 2024 kam noch die Eigenschaft dazu, dass man den Verschachtelungsoperator & teilweise auch weglassen kann und die noch fehlenden Browser zogen ebenfalls nach, was Unterstützung allgemein angeht. Laut "Can I use" sieht die Situation bezüglich Unterstützung aktuell so aus:

https://caniuse.com/css-nesting

Die Browser die da hinterherhinken, sind laut meiner Recherche chinesische Smartphone Web Browser.

3. Lagerfeuer

Jetzt zu meinem eigentlichen Anliegen: Setzt das jemand schon bei einem Style oder Ext ein? Erfahrungen? Meinungen?
Möge das Backup mit dir sein. Immer.
Kein Support via PN! Siehe den Punkt "Private Nachrichten" im phpBB.de-Knigge.
Erweiterungen - Infos zur artgerechten Haltung / phpBB Ext Check - Analyse von Erweiterungen bezüglich Vorgaben und Kompatibilität
Benutzeravatar
Talk19zehn
Ehemaliges Teammitglied
Beiträge: 5014
Registriert: 08.06.2009 12:03

Re: Nested CSS (verschachteltes CSS)

Beitrag von Talk19zehn »

Hello,
LukeWCS hat geschrieben: 27.03.2025 23:36 CSS hat ja allgemein mächtig zugelegt und in den letzten Jahren sind weitere Eigenschaften dazugekommen, die mir teilweise schon sehr lange (Jahrzehnte) gefehlt haben. Zum Beispiel ist die Pseudo-Klasse :is() ein probates Mittel um die elendigen redundanten Selektoren mal ein wenig eindämmen (reduzieren) zu können. Mir persönlich geht das aber noch nicht weit genug und speziell auf dem Gebiet wäre nested CSS eine willkommene Lösung.
Ja, ein mächtiges CSS und die Nachkommen

https://www.w3schools.com/cssref/tryit. ... ting_after

ebenso.

Solang phpBB nicht "mitzieht" wird es salopp gedacht "schwierig" in Sachen Vererbungslehren (wahre-Child-Styles, Extensions) etc. ...

Selbst gesehen habe ich bislang nur vorsichtig ausgedrückt "Vorgänger" wie -
https://www.w3schools.com/cssref/tryit. ... ing_before
, die jedoch mit deinem Anliegen m. E. gar nichts zu tun haben und selbst dann besteht die Überlegung, wie man dies phpBB beibringt. Obgleich ich denke, dies ist momentan vielfach unterwegs und auch fehlerfrei angewendet (eigene Erfahrungen) und umgesetzt wird.

Dein simples Beispiel (gut gemeint) ist modern, das stimmt. Die Frage, die sich stellt, ob die phpBB-Entwickler mitgehen und im Gegenzug Styles, wahre Childs und Extensionen "automatisch" greifen, ohne fehlerhafte Ausgaben (Backend vs. Frontend) zu erzeugen.

Zur Zeit denke ich, phpBB befindet sich Umbruch und was schlussendlich dabei herauskäme für die Style-Entwickler und EXT-Entwickler, steht momentan offen. Ich denke, auch diese existierenden CSS-Erneuerungen (ggf. phpBB-Problematiken) reichen in der Programmierung weiter, als wir denken, gar gedanklich annehmen.

Grüße
Adventereigniskalender für phpBB 3.3.x,
Meine persönliche Meinung im Jahr 2024: Im Zenit seiner Popularität wirkt KI zunächst wie eine Blaupause und lässt sich aufgrund der Vielschichtigkeit nicht auf eine einzige Botschaft reduzieren. Präteritum, Perfekt, Präsens, Futur & Plusquamperfekt werden nicht fehlerfrei genutzt, gar missverstanden.
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2962
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: Nested CSS (verschachteltes CSS)

Beitrag von LukeWCS »

Okay ja, man muss unterscheiden. Als Style Designer hat man noch "Vorgaben" an die ein Ext Entwickler nicht unbedingt gebunden ist. Es ist wenig sinnvoll bei Drittpartei-Styles moderne Features einzusetzen, wenn bei prosilver selbst noch veraltete Strukturen bestehen. Alleine weil das bei Style Updates den Abgleich mit dem Original erschweren würde. Da hatte Kirk auch ein gutes Argument in einem anderen Thema:
Kirk hat geschrieben: 26.09.2024 18:34
LukeWCS hat geschrieben: 26.09.2024 13:23 Lediglich als Erweiterungen Entwickler und Style Designer kann und sollte man sein Werk XHTML-frei machen.
Gerade bei Styles sehe ich dies etwas anders. Wenn man seinen Style XHTML-frei macht und bei einem phpBB Update die Code Changes abarbeitet, kann es sein das der zu änderte Code XHTML beinhaltet. Da aber sein eigener Style aber XHTML-frei ist, würde es etwas schwieriger bzw. länger dauern bis die korrekte Stelle gefunden wurde.
Bei Styles haben wir so einige "Altlasten", wie z.B.:
  • Die veraltete phpBB Template Syntax die als Kommentar <!-- ... --> notiert wird. Diese Syntax existiert schon seit 3.1.0 nicht mehr und wird seitdem quasi nur noch "mitgeschleift", weil prosilver selber noch massiv davon Gebrauch macht.
  • XHTML
Allerdings können Ext Entwickler hier anders agieren. Diese müssen sich z.B. auch nicht an die PHP Voraussetzungen halten, denn dann müssten wir ja z.B: noch immer mit PHP 7.2 Code arbeiten und das würde die Verwendung von "modernerem" Code auf lange Sicht massiv ausbremsen bzw. behindern. Gleiches bei Templates, denn wir schaffen ja i.d.R. eigene Templates und können deshalb hier auch problemlos moderne Techniken einsetzen, da es hier keine direkten Abhängigkeiten davon gibt.
Talk19zehn hat geschrieben: 30.03.2025 16:04 Dein simples Beispiel (gut gemeint) ist modern, das stimmt.
Nicht das wir uns da falsch verstehen, das war von mir nicht "gut gemeint", sondern soll einfach als Beispiel für diejenigen dienen, die mit "Nested CSS" nicht direkt was anfangen können.
Talk19zehn hat geschrieben: 30.03.2025 16:04 Zur Zeit denke ich, phpBB befindet sich Umbruch und was schlussendlich dabei herauskäme für die Style-Entwickler und EXT-Entwickler, steht momentan offen.
Ja, da ist Umbruch zugange und das was ursprünglich mal für 4.0 vorgesehen war, hat sich ja auch schon wieder erledigt, wenn ich das richtig verstanden habe. Stattdessen gibt es jetzt wohl einen neuen Ansatz.

Aber diese Dinge sind für mich zumindest als Ext Entwickler eher sekundär und betreffen mich aktuell nicht. Nested CSS wäre eine Technik die Ext Coder sehr wohl jetzt schon einsetzen können, denn da geht es ja nicht um eine radikale Änderung der Style Mechanik, sondern schlicht um eine alternative Notation die unterm Strich (technisch) exakt das gleiche macht wie klassische Notation.
Möge das Backup mit dir sein. Immer.
Kein Support via PN! Siehe den Punkt "Private Nachrichten" im phpBB.de-Knigge.
Erweiterungen - Infos zur artgerechten Haltung / phpBB Ext Check - Analyse von Erweiterungen bezüglich Vorgaben und Kompatibilität
Benutzeravatar
Talk19zehn
Ehemaliges Teammitglied
Beiträge: 5014
Registriert: 08.06.2009 12:03

Re: Nested CSS (verschachteltes CSS)

Beitrag von Talk19zehn »

Wenn ich das Thema auf der Mutterseite korrekt verstehe, dürfen Wünsche vorgetragen werden:
The future of prosilver (phpBB 4)
https://www.phpbb.com/community/viewtopic.php?t=2658577

====
Edit: 30. Mär 2025, 18:23
@LukeWCS,
ich kenne den Beitrag - das Thema bzw. den Link (Hinweis seitens Kirk).
Es steht dir doch demnach frei, deine Ext´s moderner aufzubereiten und die neuartige CSS-Kompatibilität in phpBB zu verwenden, wie du sagst.

Das Ergebnis kann insofern doch in jeweiligen Browsern in Sachen phpBB gesehen, geprüft, getestet werden. Ich erkenne dein Problem der Umsetzung nun leider nicht in Bezug deines Startbeitrags. Auch nicht bezogen auf etwaige Styles.
Nicht jede EXT ist m. E. mit neuartigen Styles kompatibel (nur am Rande erwähnt). Jedenfalls ist das mein derzeitiger Erfahrungswert.

LG
Adventereigniskalender für phpBB 3.3.x,
Meine persönliche Meinung im Jahr 2024: Im Zenit seiner Popularität wirkt KI zunächst wie eine Blaupause und lässt sich aufgrund der Vielschichtigkeit nicht auf eine einzige Botschaft reduzieren. Präteritum, Perfekt, Präsens, Futur & Plusquamperfekt werden nicht fehlerfrei genutzt, gar missverstanden.
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2962
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: Nested CSS (verschachteltes CSS)

Beitrag von LukeWCS »

Mir ist das verlinkte Thema bekannt. Aber bevor wir uns hier weiter in Missverständnissen verzetteln: Es geht hier nicht um die Style Zukunft von phpBB, sondern um das hier und jetzt (2025) der Ext Entwicklung. Wäre es um den phpBB Style an sich gegangen, hätte ich nicht in "Extension Bastelstube" ein Thema gestartet, sondern eher in "phpBB Diskussion". Und auch dort wäre ein solches Style-Zukunft-Thema sinnlos/unproduktiv gewesen, denn offiziell wird das Style Thema auf .com diskutiert und auch nur dort werden diesbezüglich Entscheidungen getroffen.

Nur am Rande: das Thema Nested CSS wurde dort im Thema auch bereits angesprochen:

https://www.phpbb.com/community/viewtop ... #p16041862

Das ist hier jedoch nicht relevant.

Zu deinem Edit: Im Startbeitrag unter Punkt 3 hatte ich doch klar kommentiert, was ich beabsichtige: herausfinden ob das jemand schon einsetzt und wenn ja, mit welchen Erfahrungen.
Möge das Backup mit dir sein. Immer.
Kein Support via PN! Siehe den Punkt "Private Nachrichten" im phpBB.de-Knigge.
Erweiterungen - Infos zur artgerechten Haltung / phpBB Ext Check - Analyse von Erweiterungen bezüglich Vorgaben und Kompatibilität
Benutzeravatar
Kirk
Supporter
Supporter
Beiträge: 8134
Registriert: 24.05.2010 08:31
Kontaktdaten:

Re: Nested CSS (verschachteltes CSS)

Beitrag von Kirk »

In Sachen CSS Nesting hab ich mich aus Zeitmangel noch nicht so richtig befasst. Gerade für Extensionen ist dies aber ein großer Vorteil.
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2962
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: Nested CSS (verschachteltes CSS)

Beitrag von LukeWCS »

Das erste Mal habe ich mich letztes Jahr während EMP 3.0 Beta damit beschäftigt. Als ich mitbekommen hatte, dass das jetzt endlich geht, war sofort klar für mich, dass ich das als erstes mit den Toggles probiere und das umstelle. Denn das hat genau die Art von Struktur, die ich bei EMP mehrfach habe. Die Umstellung war auch ruckzuck erledigt, nur bei folgendem Block bin ich kurz ins Grübeln gekommen:

Code: Alles auswählen

.toggle,
.toggle:hover,
.toggle:focus {
Mir war nicht sofort klar, wie ich die erste Zeile mit .toggle, als Nested CSS darstellen muss. Hatte da verschiedenes probiert und die tatsächliche Lösung war dann sowohl simpel als auch nachvollziehbar.
Kirk hat geschrieben: 30.03.2025 18:54Gerade für Extensionen ist dies aber ein großer Vorteil.
Ja, gerade beim Thema universelle Verwendbarkeit (Portabilität). Wir haben ja so einige Blöcke/Komponenten (Twig, JS, CSS) die wir selber in mehreren Exts brauchen und/oder von mehreren Entwicklern genutzt werden und wo die Fähigkeit zur simplen Implementierung eine hilfreiche/wichtige Eigenschaft ist. Und der Struktur/Übersicht tut so ein Objekt-orientierter Ansatz halt immens gut. Ich hatte schon bei EMP 3.0 überlegt, das ganze CSS umzustellen, wo es halt sinnvoll ist. Hab mich dann aber erstmal dagegen entschieden, weil 3.0 eh schon massive Änderungen unter der Haube hatte. Wollte erstmal darüber plauschen und Infos/Erfahrungen austauschen.
Möge das Backup mit dir sein. Immer.
Kein Support via PN! Siehe den Punkt "Private Nachrichten" im phpBB.de-Knigge.
Erweiterungen - Infos zur artgerechten Haltung / phpBB Ext Check - Analyse von Erweiterungen bezüglich Vorgaben und Kompatibilität
Benutzeravatar
Mike-on-Tour
Supporter
Supporter
Beiträge: 1274
Registriert: 13.01.2020 21:09
Kontaktdaten:

Re: Nested CSS (verschachteltes CSS)

Beitrag von Mike-on-Tour »

Bisher habe ich mich mit css nur so weit beschäftigt, dass ich für meine Ext das Aussehen so hinbekomme, wie ich das möchte, also nur mit den Eigenschaften selbst.
Dein Hinweis auf Nested CSS und :is() hat mich jetzt neugierig gemacht und ich werde anfangen, mich einzulesen und damit zu experimentieren.
Danke für den Hinweis. :thumbsup:
Benutzeravatar
LukeWCS
Supporter
Supporter
Beiträge: 2962
Registriert: 15.12.2014 10:19
Kontaktdaten:

Re: Nested CSS (verschachteltes CSS)

Beitrag von LukeWCS »

@Mike

Kein Ding, Lagerfeuer halt. Ich will ja auch wissen, ob das schon jemand einsetzt und Erfahrungen gesammelt hat.
Mike-on-Tour hat geschrieben: 01.04.2025 16:01 Bisher habe ich mich mit css nur so weit beschäftigt, dass ich für meine Ext das Aussehen so hinbekomme, wie ich das möchte, also nur mit den Eigenschaften selbst.
War und ist bei mir nicht anders. Ich verwende von CSS immer nur gerade soviel wie ich aktuell zur Lösung einer Aufgabe brauche. Aber in den letzten Jahren kam halt soviel dazu, dass das CSS immer komplexer wurde und ich deshalb auch gezielt nach Wegen gesucht habe, da mal Struktur reinzukriegen und das aus meiner Sicht vorherrschende "Chaos" bei klassischer Notation in den Griff zu bekommen. Das EMP CSS ist ja auch nicht mehr so wirklich klein. ;)

Was :is() angeht, das setze ich bereits aktiv ein, zum Beispiel EMP 3.0:

https://github.com/LukeWCS/ext-mgr-plus ... #L286-L288

Da war das aber nur einmal, bei 3.1 mache ich erheblich mehr Gebrauch davon. 2 Beispiele davon:

Code: Alles auswählen

fieldset :is(dt, dd) label {
	cursor: inherit;
}

button[type="submit"]:is([name="confirm"], [name="cancel"]),
input:is([type="submit"], [type="button"], [type="reset"])[name^="extmgrplus_"] {
	padding: 3px 4px;
}
Beim zweiten Block setze ich die Pseudoklasse noch zusätzlich bei komplexen Selektoren ein, was es erstmal erschwert zu erkennen, was hier genau selektiert wird. In klassischer Notation bräuchte ich hier 5 Selektoren, bei dieser Notation nur 2.

Die Pseudoklasse :is() eignet sich vor allem dort, wo Selektoren einen grossen statischen Teil haben, aber nur einen kleinen variablen Teil.
Möge das Backup mit dir sein. Immer.
Kein Support via PN! Siehe den Punkt "Private Nachrichten" im phpBB.de-Knigge.
Erweiterungen - Infos zur artgerechten Haltung / phpBB Ext Check - Analyse von Erweiterungen bezüglich Vorgaben und Kompatibilität
Antworten

Zurück zu „Extension Bastelstube“