Was wünschen Sie sich, dass CSS nativ könnte, was es jetzt nicht kann? Zuerst werfen wir einen Blick auf das letzte Mal, als wir das im Jahr 2013 getan haben.
- ❌ „Ich möchte ein Element auswählen können, basierend darauf, ob es einen anderen bestimmten Selektor enthält“
- ❌ „Ich möchte ein Element basierend auf seinem Inhalt auswählen können“
- ❌ „Ich hätte gerne mehrere Pseudo-Elemente“
- ❌ „Ich möchte Elemente/Übergänge zu
height: auto;animieren/überblenden können“ - ❌ „Ich hätte gerne Dinge von Sass, wie
@extend,@mixinund Verschachtelung“ - ❌ „Ich hätte gerne
::nth-letter,::nth-wordusw.“ - ✅ „Ich möchte, dass alle wichtigen Browser automatisch aktualisiert werden“
Autsch. Na ja. Ich bin mir nicht sicher, wie dringend all diese Dinge tatsächlich angefragt werden oder wie machbar es ist, sie überhaupt zu implementieren. Es sind lediglich Ideen, die meiner Meinung nach im Jahr 2013 nützlich gewesen wären, und wie sich herausstellt, bin ich immer noch dieser Meinung.
Dieses Mal lasse ich mir keine eigene Liste erstellen, sondern werfen wir einen Blick ins Internet auf andere Leute, die CSS-Wünsche zusammengestellt haben.
TL;DR Liste
Bei der Betrachtung verschiedener Gesprächsquellen über Dinge, die sich die Leute für CSS wünschen, scheinen dies die häufigsten Anfragen zu sein.
- Eltern-Queries. Das heißt, ein beliebiges Element auswählen und dann das Elternelement davon auswählen. Wir haben einige Beweise dafür, dass es mit
:focus-withinmöglich ist. - Container-Queries. Ein bestimmtes Element auswählen, wenn das Element selbst bestimmten Bedingungen unterliegt.
- Standardisierte Gestaltung von Formularelementen.
- Enthält/Besitzt-Selektoren.
- Übergänge zu
auto-Abmessungen. - Verbesserte Handhabung von Viewport-Einheiten.
Bemerkenswert ist, dass interessanterweise nur wenige Leute nach Stil-Scoping fragen. Es kam ein wenig zur Sprache, aber nicht viel. Es scheint ein so wichtiger Teil der CSS-in-JS-Konversation zu sein, daher bin ich überrascht, so wenig Erwähnung davon im Kontext allgemeiner „Was braucht CSS?“-Gespräche zu finden.
Jen Simmons fragte, was auf unseren Listen steht
Eine Wunschliste aller Dinge, die ich mir 2019 in der Welt von CSS wünschen würde. Was steht auf Ihrer Liste? Dinge, die Sie lernen möchten? Probleme, bei deren Lösung Sie Hilfe suchen? Neue Eigenschaften, die Sie benötigen? Design-Ideen, die Sie gerne codieren würden? Ressourcen, die Sie gerne hätten? Nennen Sie Ihren Wunsch.
— Jen Simmons (@jensimmons) 14. November 2018
Bemerkenswerte Antworten aus dem Thread
- Seitenverhältnisse (es ist kompliziert in CSS, kommt wahrscheinlich zu HTML, und vielleicht bekommen wir es eines Tages nativ in CSS mit einer Eigenschaft)
- Ausschlüsse
- Regionen
- Subgrid (es kommt!)
text-wrap: avoid-widows-and-orphans- Nesting
- Umriss mit Radius
- Animierte Hintergrundverläufe (ohne sie durch Verschieben oder andere Tricks zu fälschen)
text-overflow:ellipsisüber mehrere Zeilen / Zeilenbegrenzung- 0-zu-auto-Übergänge
- Elternselektoren
- Asynchrones
@import - Mathematische Funktionen wie
sqrt(),sin()undcos() font-min-sizeundfont-max-size- Masonry
Tab Atkins wollte wissen, welche Teile von CSS uns am meisten Probleme bereiten
Welche Teile von CSS bereiten Ihnen aufgrund von Browser-Verhaltensunterschieden die größten Probleme? Sammle einige Daten, bitte RT. (Wenn die Antwort für Mobilgeräte im Vergleich zu Desktops unterschiedlich ist, lassen Sie es mich wissen.)
— 💖Taudry Hepburn💖 (@tabatkins) 3. Oktober 2018
Bemerkenswerte Antworten aus dem Thread
- Unzählige Anfragen nach einer standardisierten Möglichkeit zur Gestaltung von Formularelementen – nicht nur aus gestalterischen Gründen, sondern auch aus Gründen der Barrierefreiheit, um zu verhindern, dass Styling mit Standards getauscht wird.
- Möglichkeit, die Browserunterstützung für mehr als nur Eigenschaften/Werte mit
@supportszu testen - Verbesserte Handhabung von Viewport-Einheiten und ihrer Beziehung zu anderen Browser-UIs
- Verbesserte Handhabung von Mehrspaltenlayouts
- Elastisches Scrollen
Tommy Hodgins machte einen CSS+JS-Adventskalender auf Twitter, der interessante Möglichkeiten dokumentiert
1. Dez: Elternelement-Selektor 🎄🎁 Obwohl CSS keinen :parent-Selektor hat, können Sie ihn mit einer kleinen JavaScript-Funktion selbst erstellen und heute einen Selektor wie [–parent] in Ihren CSS-Stylesheets verwenden!
Demo: https://#/9N1A1Un8XT
Code: https://#/NNUuvOi1zH#css #javascript pic.twitter.com/Nv8V3rl2AF— Tommy Hodgins (@innovati) 1. Dezember 2018
Tommys Liste
- Elternelement-Selektor
- Hat-Selektor
- Nächster Selektor
- Erster im Dokument (wie bei
querySelector) - Älterer Geschwister-Selektor
- Vorheriger Geschwister-Selektor
- Enthält-Selektor
- Regex-Selektor
- Berechneter Stil-Selektor
:nth-letter/:nth-word- Pseudo-Medien-Selektoren
- Nicht-leer Gültig/Ungültig-Selektor
- Element-Queries
- Attribut-Vergleichsselektoren
- Benutzerdefinierte Spezifität
- Sichtbarkeits-Selektoren
- Überlauf-Erkennungs-Selektor
- Benutzeragenten-Erkennungs-Selektor
- Speicher-Queries
- Datums-Queries
- Protokoll-Queries
- Tiefes Hover
Wir haben auch gefragt
Zusammenstellen einer Liste der gefragtesten nativen CSS-Features. Es gibt viele Ideen da draußen!
Schicken Sie mir kurze Ideen. Denken Sie nicht zu viel nach.
— CSS-Tricks (@css) 17. Dezember 2018
Bemerkenswerte Antworten aus dem Thread
- Container-Queries
- Hat-Selektor
- Regionen
- Farbanpassungsfunktionen
- Nesting
- Shader
- Übergang zu
auto-Abmessungen / Übergang vondisplay: none; - Vorheriger Geschwister-Selektor
font-size: fit;- Gestaltung von
grid-template-areas - Animation zwischen
grid-template-areas - Typen für benutzerdefinierte Eigenschaften
clip-pathakzeptiert Pfadeinline-styles: ignore;- Seitenverhältnisse
- Scoping
// einzeilige Kommentare- Eckformen
Vielleicht nicht ganz zum Thema, aber es gibt eine Sache, die ich mir bei CSS wirklich wünschen würde. Ich wünschte, es gäbe eine Möglichkeit zu sehen, welche CSS-Regeln nie verwendet werden. So etwas wie eine Protokolldatei, die ein- und ausgeschaltet werden kann und alle Selektoren auflistet, die nicht verwendet werden oder auf einer bestimmten HTML-Seite immer überschrieben werden. Ich weiß nicht, ob so etwas möglich ist, aber es wäre sehr nett, es zu haben. Nur um das CSS aufzuräumen. Ich habe so etwas noch nie gefunden oder Anfragen dafür.
Das ist nicht so mächtig, wie Ihr Kommentar suggeriert, aber haben Sie den Coverage-Tab in den Chrome Dev Tools gesehen?
Habe diesen Artikel heute gesehen
https://umaar.com/dev-tips/121-css-coverage/
Oder
https://www.vojtechruzicka.com/measuring-javascript-and-css-coverage-with-google-chrome-developer-tools/
Wie wäre es mit: Media-Queries basierend auf der Ausrichtung des Viewports (Hochformat / Querformat)
Oder ist das schon möglich?
Das ist es! Das ist seit mehr als einem halben Jahrzehnt möglich. Demo.
Das ist derzeit möglich! Mehr Infos hier.
Eine sehr nützliche Funktion!
Ich wünsche mir ein einfaches
text-align: center center;
zum horizontalen und vertikalen Zentrieren.
Im Jahr 2019 müssen wir immer noch seltsame Hacks oder unlogische div-Verschachtelungen verwenden.
Das ist ein Layout-Problem, kein Textausrichtungsproblem. Und es ist kein Einzeiler, aber Flexbox erledigt das sehr einfach.
Wenn Sie die Höhe des Containers kennen, der den Text enthält, und der Text nur eine Zeile hat, ist dies sehr einfach zu bewerkstelligen. Setzen Sie die Zeilenhöhe auf die Höhe des Elements.
Zugegebenermaßen ist das ein sehr spezifischer Anwendungsfall und deckt die meisten Fälle nicht ab. Wenn Sie die Containerhöhe nicht kennen und/oder der Text mehrzeilig ist, können Sie
position: relative; top: 50%; transform: translateY(-50%);verwenden.Siehe meine Demo, die beide Methoden zeigt. Ich stimme zu, dass
text-align: center centerschön wäre. Es würde jedoch erfordern, eine vorhandene Regel zu ändern, um sie zu einer Kurzschreibweise zu machen. Anstelle vontext-alignbräuchten wirtext-align-verticalundtext-align-horizontal, und einfachtext-alignwürde zur Kurzschreibweise werden, und wenn nur ein Wert übergeben würde, würde er auf beide angewendet? Wäretext-align: centerdasselbe wietext-align: center center? Das wäre problematisch. Denn wenn Sietext-align: leftschreiben würden, würde das versuchen, "left" auftext-align-verticalanzuwenden?Die Idee ist gut, aber ich bin mir nicht sicher, wie sie umgesetzt werden würde.
Ich denke, wenn die gleichen Dinge von vielen Leuten und seit 2013 immer wieder gewünscht werden ... vielleicht sollte sich das W3 fragen, ob „werden wir die Bedürfnisse der Entwickler erfüllen?“ und einige Meinungen überdenken...
Persönlich würde ich mir auf jeden Fall Elternelement-Selektoren und Container-Queries wünschen... vor allem.
Einige Vorschläge haben riesige Herausforderungen, nehmen Sie Container-Queries zum Beispiel, eine solche Funktion könnte leicht eine Endlosschleife von Neuzuständen auslösen, wenn zwei Elemente auf Änderungen auf eine Weise reagieren, die das andere Element zum Ändern auslöst und so weiter, wie Eltern und Kind oder zwei Geschwister.
Dann der Elternelement-Selektor, für den ich keinen offiziellen Vorschlag finden konnte, aber die meisten Artikel schlagen eine Syntax mit
<oder:parentvor. Es ist nicht einfach, so etwas einzuführen, stellen Sie sich Folgendes vor:a < img, um Anker auszuwählen, die ein Bildkind haben, aber dann schreibt jemand:a < img + spanodera < img > span, das kann wahnsinnig machen, es widerspricht sogar dem „Cascade“-Teil von CSS.Elternelement-Selektoren stehen ganz oben auf meiner Liste, etwas wie
Verläufe animieren, ohne auf
background-positionoderbackground-sizezurückzugreifen. Das haben wir seit mehr als einem halben Jahrzehnt in IE10+ und Edge, aber niemand schien es je bemerkt zu haben und jetzt wird es sowieso alles fallen gelassen.Ach ja, es ist nicht so, dass Chrome jetzt nicht etwas noch Besseres hätte – die Möglichkeit, CSS-Variablen zu animieren, was bedeutet, dass wir verschiedene Komponenten eines Verlaufs unterschiedlich animieren können.
Betrachten wir zum Beispiel den folgenden Verlauf
Hier können wir eine andere Animation (anderer Satz von Keyframes, andere Dauer, andere Timing-Funktion, andere Verzögerung) für jede CSS-Variable haben, während das Animieren des Verlaufs selbst (wie heute in Edge möglich) bedeutet, alles auf die gleiche Weise zu animieren.
Natürlich ist das alles noch hinter einem Flag (Experimental Web Platform features aus
chrome://flags), das anscheinend schwer zu finden ist, gemessen daran, wie oft mir gesagt wird, dass meine Houdini-Demos nicht funktionieren. Für alle, die mehr wissen möchten, habe ich einen Artikel darüber hier geschrieben.clip-path: path(). Es wurde bereits in Firefox implementiert. Leise, ohne ein Wort darüber zu sagen. Es benötigtlayout.css.clip-path-path.enabledauftrueinabout:config, um zu funktionieren.Meine ehrliche Meinung? Meh. Und hier ist der Grund: Der Wert in
path()ist ein Zeichenkettenwert, der, genau wie der Wert desd-Attributs eines SVG-Pfades, nur einheitenlose Werte akzeptiert. Was bedeuten diese Werte in CSS? Pixel! Die Koordinaten, die für diesen Pfad verwendet werden, sind also immer Pixelkoordinaten relativ zur oberen linken Ecke des ausgeschnittenen Elements. Hier ein Test. Muss in Firefox mit dem oben genannten Flag auftruegeöffnet werden.Möchten Sie auf diese Weise etwas Responsives? Tut mir leid, nein. Eine bessere Option ist es, ein Kind-SVG zu verwenden und dessen
daus dem CSS zu modifizieren. Funktioniert nur in Chrome und spiegelt nicht die neuesten Spezifikationsänderungen wider, aber zumindest ist es responsiv! Grundlegendes Beispiel und etwas Interessanteres.Nützliche mathematische Funktionen wie
floor(),abs(),pow(), trigonometrische Funktionen. Dies ist eine, die ich persönlich oft brauche. Aus dem Stegreif, einige AnwendungsfälleModulo. Ich habe vielleicht eine Reihe ähnlicher Elemente, die ich, sagen wir mal, auf einem Kreis positioniere (denken Sie an so etwas. Dies geschieht durch Setzen einer Index-Benutzereigenschaft
--iauf jedem von ihnen und einer weiteren Benutzereigenschaft--n, die die Gesamtzahl der Elemente auf ihrem Elternelement darstellt, und dann durch Setzen der Element-transformaufrotate(calc(var(--i)*1turn/var(--n))) translate($r). Und jetzt nehmen wir an, ich möchte jedes zweite Element schwarz machen. Derzeit kann ich das mit etwas wie:nth-child(odd) { background: black }tun, aber wenn ich Modulo verwenden könnte, könnte ich denbackground*nur einmal* (!!!) mitbackground: hsl(348, 83%, calc((var(--i)%2)*47%))setzen. Demo.abs(). Ausgehend vom gleichen Beispiel von auf einem Kreis verteilten Elementen, sagen wir, ich möchte, dass ihreopacityfür die erste Hälfte des Kreises linear ansteigt und für die zweite Hälfte linear abfällt. Mitabs()könnten wiropacity: calc(1 - abs(2*(var(--i) - .5*var(--n))/var(--n)))haben, aber jetzt müssen wir das Vorzeichen für die Hälfte der Elemente ändern und das bedeutet, die Anzahl der Elemente in einem Selektor wie:nth-of-type(-n + 6)fest zu codieren.pow(). Sagen wir, ich möchte eine sekundäre Drehung haben. Oder sagen wir, ich möchte eine kubische Erhöhung derheightvon Elementen.Trigonometrische Funktionen. Mein primärer Anwendungsfall ist die Synchronisation von Rotationswinkeln und Skalierungsfaktoren oder Translationsdistanzen, wenn ich mehrere Elemente animiere, sodass sich Ecken/Kanten während der gesamten Animation entsprechen. In dieser Demo muss ich den Rotationswinkel der hellgelben Quadrate und den Post-Skew-Skalierungsfaktor der orangen Quadrate synchronisieren. Dies wird erreicht, indem die trigonometrischen Berechnungen in JS durchgeführt und dann die Werte an die Benutzereigenschaften gesetzt werden, die in der
transformverwendet werden. Ich könnte auch versuchen, es mit verschiedenen Timing-Funktionen für Rotationswinkel und Skalierungsfaktoren oder Translationsdistanzen zu simulieren, wie ich es in dieser Demo getan habe, aber das ist nur das Festcodieren descubic-bezier()für jeden Fall.Ich denke, „Cascade“ Style Sheet hat ein großes Problem mit dem „Cascade“-Konzept.
d.h.
warum nicht auf „Cascade“ schreiben? Etwas wie
Pro
* Sie sehen die Kaskade wirklich an einem Ort.
* Es ist einfach zu ändern und zu debuggen.
* Es ist kompakter und reduziert die Dateigröße.
Das ist mit Präprozessoren wie SASS bereits möglich, aber es wäre schön, es nativ in reinem CSS zu haben.
Führend im Web, führend im Web!!! :)
Genug mit
line-height, es ist ernsthaft schrecklich.Führung würde einen vertikalen Rhythmus (wenn Sie ihn wünschen) ermöglichen und, was noch wichtiger ist, den Abgleich von Druck und Web oder Web und Druck nahtloser zu gestalten (oder das gesamte Spektrum von Druck zu Web zu Druck).
Ich habe hart daran gearbeitet, einen Weg zu finden, Führung im Web zu schaffen, aber es hätte nicht schwer sein dürfen. (https://github.com/shalanah/baseline).
Außerdem ein Lob für konsistentes White-Space-Wrapping für Text über Browser hinweg.
Ist der „vorherige Geschwister-Selektor“ das Gegenteil des „benachbarten Geschwister-Kombinators“?
Wenn ja, setze ich alle meine Münzen darauf!
CSS-Blendmodi (wie multiplizieren, Farbton und überlagern) würden, wenn sie Mainstream und unterstützt würden, die Dinge für Designer, die das visuelle Spektrum erweitern wollen, erheblich verbessern.
Seitenverhältnisse kommen wahrscheinlich auch. Es gibt zumindest einen Entwurf
https://drafts.csswg.org/css-sizing-4/#ratios
Ich hätte gerne etwas, um zu überprüfen, ob sich ein Element in einer Sticky-Position befindet. Zum Beispiel einen Selektor wie
:sticky.