Container-Abfragen stehen immer ganz oben auf der Liste der gewünschten Verbesserungen für CSS. Die allgemeine Meinung ist, dass wir, wenn wir Container-Abfragen hätten, nicht mehr so viele globale Media-Abfragen basierend auf der Seitengröße schreiben müssten. Das liegt daran, dass wir *eigentlich* einen stärker eingegrenzten Container steuern wollen und Media-Abfragen dafür nur deshalb verwenden, weil es das beste Werkzeug ist, das wir in CSS haben. Das glaube ich absolut.
Es gibt auch eine andere Meinung, die gelegentlich auftaucht, und zwar etwas in der Art von: „Ihr Entwickler denkt, ihr braucht Container-Abfragen, aber das tut ihr wirklich nicht.“ Das gefällt mir gar nicht. Es scheint offensichtlich, dass wir damit gute Dinge tun könnten, wenn sie verfügbar wären, nicht zuletzt, indem wir saubereren, portableren und verständlicheren Code schreiben. Alle scheinen sich einig zu sein, dass der Aufbau von UIs aus Komponenten heutzutage der richtige Weg ist, was die Notwendigkeit von Container-Abfragen noch offensichtlicher macht.
Es ist wunderbar, dass es moderne JavaScript-Ideen gibt, die uns heute dabei helfen, sie zu nutzen – aber das bedeutet nicht, dass die Technologie dort bleiben muss. Es macht in CSS viel mehr Sinn.
Hier ist mein Senf von Ende 2019 zum Thema
- Philip Waltons „Responsive Components: a Solution to the Container Queries Problem“ ist ein großartiger Überblick über die Verwendung von JavaScripts
ResizeObserverals eine Möglichkeit, das Problem heute zu lösen. Es funktioniert hervorragend und überall. Die Demo-Seite ist die beste, die es gibt, weil sie die Notwendigkeit responsiver Komponenten hervorhebt (obwohl es auch andere dokumentierte Anwendungsfälle gibt). Philip sagt sogar, dass eine reine CSS-Lösung idealer wäre. - CSS-Verschachtelung hat vor etwa einem Jahr einiges an Begeisterung erfahren. Die Diskussion lässt darauf schließen, dass Verschachtelung plausibel ist. Ich befürworte dies als langjähriger Fan von sinnvoller Sass-Verschachtelung. Es lässt mich fragen, ob die Syntax für Container-Abfragen denselben Ansatz nutzen könnte. Vielleicht sind verschachtelte Abfragen auf den übergeordneten Selektor beschränkt? Oder man stellt dem Media-Statement ein kaufmännisches Und voran, wie es die aktuelle Spezifikation für Nachfahrenselektoren tut?
- Andere vorgeschlagene Syntaxen beinhalten im Allgemeinen die Verwendung eines Doppelpunkts, wie z. B.
.container:media(max-width: 400px) { }. Das gefällt mir auch. Ein-Doppelpunkt-Selektoren (Pseudo-Selektoren) sind philosophisch gesehen „wähle das Element unter diesen Bedingungen aus“ – wie:hover,:nth-childusw. – daher ist ein Media-Scope sinnvoll. - Ich glaube nicht, dass die Syntax der größte Feind dieses Features ist; es ist die Leistung seiner Implementierung. Soweit ich weiß, ist es nicht einmal die Leistung, sondern vielmehr, dass es den gesamten Rendering-Ablauf der Browser stört. Das scheint eine massive Hürde zu sein. Ich möchte es aber trotzdem nicht vergessen. Es gibt viel Innovation im Web, und nur weil heute nicht klar ist, wie es implementiert werden kann, heißt das nicht, dass nicht jemand morgen einen praktischen Weg nach vorne findet.
Ich denke, dafür werden die Leute CSS mit JavaScript-basierten Observern wie Resize Observer sowie Mutation Observer und Intersection Observer synergetisch nutzen, um Breakpoints auf natürliche Weise als benutzerdefinierte Eigenschaften von Elementen zu definieren, und einen JavaScript-Code zu haben, der die Seite beobachtet und es den Elementen ermöglicht, in ihren verschiedenen Breakpoint-Zuständen angesprochen zu werden.
Es gibt bereits eine spezifische Demo, die ich beim Schreiben im Kopf habe und die darauf wartet, der Welt gezeigt zu werden, aber ich denke, es fehlen keine Teile, wenn wir CSS und JavaScript auf diese Weise zusammen nutzen wollen. „Element Queries“ und „Container Queries“ sind vielleicht keine CSS-Funktion, sondern eine CSS-Technik oder eine bestimmte Art, CSS und JavaScript natürlich zusammen zu nutzen. Halten Sie Ausschau nach Möglichkeiten, JS-basierte Observer und CSS wie Freunde zusammen zu nutzen!
Wenn ein bestimmtes Muster in der realen Welt oft genug wiederholt wird, wird es irgendwann nativ hinzugefügt. Web Components, CSS-Variablen, JavaScript-„Klassen“, querySelector, sogar abgerundete Ecken wurden alle nativisiert, weil das „Hineindrängen“ so üblich war; normalerweise durch eine andere Technologie.
Container-Abfragen sind ein etwas sonderbarer Fall, da die endgültige Lösung einen so hohen Konsens hat, dass nur wenige Projekte einen Polyfill implementieren wollen. Dieser mangelnde Einsatz wird von einem oberflächlichen Beobachter fälschlicherweise als mangelndes Interesse missverstanden.
Wir als Gemeinschaft müssen zuerst eine JS-Lösung annehmen. Wenn diese weit genug verbreitet ist, um als Quasi-Standard zu gelten, werden wir unsere CSS-Lösung bekommen.
Sehr gut ausgedrückt. Ich denke, es muss eine Art inoffizielle, aber eng verbundene Entwicklergemeinschaft geben, die an verschiedenen Bibliotheken und Polyfills für inoffizielle Funktionen arbeitet, die gut genug funktionieren, um in Produktion genommen zu werden, aber mit der Idee, dass, wenn genügend Leute sie verwenden, Browserhersteller darauf aufmerksam werden und eine native Version implementieren. Es gibt keinen Grund, darauf zu warten. Diese Polyfill-Gemeinschaft könnte auch sehr lockere Regeln für die Aufnahme haben: Der Prüfstein, dem diese Funktionen unterzogen würden, wäre, ob sie jemals populär werden, also ist es demokratischer und weniger bürokratisch.
Ich spreche einmal pro Woche darüber, entweder mit meinen Teamkollegen, wenn wir frustriert über ein veraltetes Grid-System sind, oder mit Designern, die frustriert sind, dass wir ihr schönes Grid-System nicht gut implementieren können.
Dies ist absolut mein am meisten gewünschtes CSS-Feature, über Subgrid oder was auch immer sie noch entwickeln. Elemente, die sich visuell an die Größe des Raumes anpassen können, in dem sie platziert werden? Bin dabei.
Ich würde mir wünschen, dass es eine Möglichkeit gäbe, den Entscheidungsträgern mitzuteilen, was wir am meisten wollen. Wenn wir die „fast perfekten“ CSS-Teile katalogisieren und priorisieren könnten, vielleicht könnten wir mehr Licht darauf werfen? Es fühlt sich an, als ob diese Dinge nicht von Leuten entworfen werden, die sie tatsächlich benutzen. Einige von uns schreiben viel CSS – und wenn wir einen Einstiegspunkt hätten, um diese Entscheidungen zu testen, könnten wir einige hilfreiche Randfälle entwickeln.
Das klingt, als ob Sie die CSS Working Group nicht kennen. Schauen Sie sich Rachel Andrews Artikel an und beteiligen Sie sich dann :)
https://rachelandrew.co.uk/archives/2019/05/07/getting-involved-with-the-web-platform/
Die GitHub-Seite der Arbeitsgruppe finden Sie hier
https://github.com/w3c/csswg-drafts/issues