Weniger bekannte Funktionen von modernem HTML/CSS
(lyra.horse)- Die Hauptursachen für die jüngsten Performance-Probleme von Websites sind übermäßiger JavaScript-Einsatz und Tracking-Skripte; in vielen Fällen lässt sich das mit HTML/CSS allein ausreichend ersetzen
- Kürzlich hinzugefügte Funktionen wie CSS-Nesting, relative Farben, neue Viewport-Einheiten (lvh, svh, dvh) ermöglichen es, Aufgaben, für die man früher auf JS oder Präprozessoren angewiesen war, einfach zu lösen
- CSS ist nicht nur ein simples Styling-Werkzeug, sondern eine leistungsfähige Sprache, mit der sich Animationen, Eingabevalidierung, Dark-Mode-Themes und Akkordeon-Menüs umsetzen lassen
- Auch in puncto Performance ist CSS überlegen: Durch GPU-Beschleunigung und Ausführung in einem separaten Thread ist es bei Animationen und Übergängen flüssiger und effizienter als JS
- Der Autor betont CSS nicht nur als praktisches Werkzeug, sondern auch als Mittel für Ausdruck und Kunst, und empfiehlt Webentwicklern, das Potenzial von modernem CSS stärker zu nutzen
Einleitung: Die Komplexität des Webs und neue Versuche
- Viele Websites leiden unter Performance-Problemen und unnötiger Komplexität durch den übermäßigen Einsatz von JavaScript-Frameworks
- React-Apps brauchen mehrere Sekunden zum Laden, und NextJS erzeugt Hydration-Fehler
- Der Ordner
node_modulesbelegt mehrere Gigabyte Speicher
- Auch ohne JavaScript lassen sich mit HTML und CSS leistungsfähige Funktionen umsetzen
- Abgesehen von komplexen Warenkörben in E-Commerce-Seiten oder Dashboards ist JavaScript möglicherweise nicht zwingend erforderlich
- Dieser Artikel stellt die neuesten Funktionen von CSS vor und regt Entwickler dazu an, verschiedene Möglichkeiten zu erkunden, ohne sich nur auf JavaScript zu verlassen
Missverständnisse und Wahrnehmung von CSS
Ist CSS wirklich schwierig und umständlich?
- Die negative Wahrnehmung von CSS rührt von mangelndem Grundlagenwissen her
- Viele Entwickler überspringen die CSS-Basics und konzentrieren sich auf JavaScript oder TypeScript
- CSS ist kein bloßes Styling-Werkzeug, sondern eine domänenspezifische Sprache mit leistungsfähigen Funktionen
- Mit Werkzeugen wie Flexbox lassen sich auch komplexe Layouts leicht umsetzen
- Beispiel: Mit
display: flexundjustify-content: centerlässt sich ein div einfach zentrieren - Die Entwicklertools des Browsers bieten Widgets, mit denen sich Flexbox-Eigenschaften visuell anpassen lassen
- Beispiel: Mit
- Wenn man sich nur in eine Richtung vertieft (z. B. JS) und CSS vernachlässigt, wird es zwangsläufig zur Belastung
Der Schmerz beim Schreiben von CSS – und was sich geändert hat
- Früher war CSS tatsächlich nicht besonders komfortabel, weshalb Werkzeuge wie Sass und Tailwind entstanden
- Beispiel: Man musste lange Selektor-Ketten wie
.post > .buttons .like:hoververwalten
- Beispiel: Man musste lange Selektor-Ketten wie
- Inzwischen wurden Qualitätsverbesserungen wie Nesting ergänzt, sodass sich auch mit reinem CSS angenehm entwickeln lässt
- CSS-Nesting sammelt zusammengehörige Styles an einer Stelle und verbessert die Lesbarkeit
- Beispiel:
.post { & > .buttons { .like { &:hover { ... } } } } - Die Eltern-Kind-Beziehung wird klarer, sodass kürzere und einfachere Klassennamen möglich sind
- Beispiel:
- CSS-Nesting sammelt zusammengehörige Styles an einer Stelle und verbessert die Lesbarkeit
- Relative Farben erleichtern die Farbmanipulation
- Mit
hsl(from #123456 h s calc(l + 10))lässt sich die Helligkeit anpassen - Mit
color-mix()können zwei Farben gemischt werden, um dynamische Farben zu erzeugen
- Mit
- Die Range-Syntax für Media Queries erlaubt intuitive Bedingungen wie
(width <= 768px) - Die lh-Einheit unterstützt Styling basierend auf der Zeilenhöhe
- Die Eigenschaft scrollbar-gutter löst Layoutverschiebungen durch Scrollbars
- Baseline stellt die Kompatibilität von Funktionen in den wichtigsten Browsern sicher
- newly available bedeutet: funktioniert in aktuellen Browsern
- widely available bedeutet: unterstützt bis zurück zu Browsern von vor 2,5 Jahren
- Beispiel: CSS-Nesting wird seit Dezember 2023 in allen Browsern unterstützt
Warum nur mit CSS/HTML entwickeln?
- Manche Nutzer deaktivieren JavaScript standardmäßig aus Gründen wie Sicherheit oder Datenschutz
- Wenn eine Website nur mit reinem CSS/HTML bereitgestellt wird, können auch diese Nutzer sie eher verwenden
- Sowohl für Entwickler als auch für Nutzer bietet die Nutzung von nur CSS/HTML große Vorteile bei Geschwindigkeit, Barrierefreiheit sowie CPU- und Batterieverbrauch
- CSS-Animationen laufen auf dem Compositor-Thread und reduzieren die CPU-Last
- JavaScript läuft über die Event Loop, wodurch kleine Verzögerungen entstehen können
- Verbesserte Barrierefreiheit und Benutzerfreundlichkeit
- Hover-Effekte für Buttons, Toast-Animationen und Eingabevalidierung lassen sich einfach mit CSS umsetzen
Praktische Beispiele und zentrale Funktionen von CSS
Mit @starting-style natürliche Einstiegsanimationen umsetzen
- Früher brauchte man für das Animieren des Erscheinens eines Elements komplexe Strukturen mit Keyframes, JS-Triggern usw.
- Mit @starting-style lässt sich der Startzustand einfach festlegen. Anfangsanimationen eines Elements, etwa ein Fade-in, sind damit leicht umsetzbar
- Einstellung mit
transition: opacity 1s; @starting-style { opacity: 0; } - Funktioniert auch ohne separates
@keyframesoder JavaScript
- Einstellung mit
- Wenn man einfach den Startzustand zusammen mit einer Transition angibt, wird die Animation natürlich angewendet
- Beispiel: Sanfte Übergänge bei Transparenz und Position einer Toast-Nachricht
Dark-/Light-Mode-Themes einfach einrichten
- color-scheme: light dark wechselt das Theme automatisch entsprechend den Nutzerpräferenzen
- Die Funktion light-dark(#000, #FFF) legt Farben passend für hellen bzw. dunklen Modus fest
- Radiobuttons und der Selektor :has unterstützen die Auswahl eines Themes durch den Nutzer
- Theme-Wechsel ist allein mit CSS ohne JavaScript möglich
- Optional kann JavaScript zum Speichern/Laden des Themes ergänzt werden
Mit Radio-/Checkboxen und :has, :checked benutzerdefinierte UI erzeugen
- Auch komplexe Interaktionen wie Tabs, Akkordeons und Toggles lassen sich ohne JavaScript umsetzen
- Radiobuttons können mit :checked und :has individuell gestylt werden
- Beispiel: Mit
label:has(input:checked)wird der Stil des ausgewählten Buttons festgelegt - Das Eingabeelement kann mit
opacity: 0verborgen werden, während die Zugänglichkeit für Screenreader erhalten bleibt
- Beispiel: Mit
- Das details-Element eignet sich gut für Akkordeon-Menüs wie in FAQ-Bereichen
- Mit dem Attribut
namelässt sich steuern, dass nur ein Element geöffnet ist - Je nach Zustand
[open]können Animationen ergänzt werden
- Mit dem Attribut
Eingabevalidierung und Zustandsdarstellung
- Durch die Kombination von HTML-Attributen wie pattern und required mit CSS-Pseudoklassen (:valid, :invalid, :user-valid usw.) sind Echtzeitvalidierung und visuelles Feedback möglich
- Änderungen von Outline-/Border-Stilen für Eingabefelder verbessern die User Experience
- Mit dem pattern-Attribut von HTML lässt sich die Gültigkeit eines Eingabefelds prüfen
- Beispiel:
\w{3,16}erlaubt 3 bis 16 Zeichen aus Buchstaben, Zahlen oder Unterstrich
- Beispiel:
- Mit :valid und :invalid in CSS kann je nach Gültigkeit gestylt werden
- :user-valid und :user-invalid wenden Styles erst an, nachdem der Nutzer eine Eingabe gemacht hat
- Mit dem Selektor :has lassen sich andere Elemente abhängig vom Eingabezustand stylen
- In manchen Fällen, etwa bei komplexen Eingabebedingungen, ist JS nötig, doch meist reichen CSS/HTML aus
Viewport-Einheiten richtig einsetzen
- Die Einheiten vw/vh haben auf Mobilgeräten Genauigkeitsprobleme, wenn die Adress- bzw. Navigationsleiste ein- oder ausgeblendet wird
- Empfohlen wird die Verwendung neuer Viewport-Einheiten wie lvh/svh/dvh (largest/smallest/dynamic viewport height)
- lvh: für die gesamte Bildschirmfläche, z. B. einen vollflächigen Hintergrund
- svh: für Buttons oder Links, die immer sichtbar sein müssen
- dvh: für flexible Größenvergabe bei Veränderungen etwa durch Scrollen
- Keyboard-Overlays lassen sich mit der Eigenschaft interactive-widget oder der VirtualKeyboard API behandeln
<meta name="viewport" content="width=device-width, interactive-widget=resizes-content">- In Chromium-basierten Browsern mit
navigator.virtualKeyboard.overlaysContent = true
CSS-Wunschliste: Was noch fehlt oder wünschenswert wäre
- Wiederverwendbare Blöcke: andere Klassen innerhalb einer Klasse anwenden (z. B.
@apply border) - Kombinierte Media-Query-Selektoren:
@mediamit Klassenselektoren verbinden - nth-child-Variablen:
span { --nth: nth-child(); }für dynamisches Styling - nth-letter-Selektor: bestimmte Buchstaben stylen (z. B.
p::nth-letter(2)) - Einheiten entfernen: mit
calc(100vw / 1px)einen wert ohne Einheit erzeugen - image()-Funktion: Unterstützung für Ersatzfarben und Bildausschnitte
- style-Tag im body: offizielle Standardunterstützung zur Verringerung von FOUC-Problemen
Fazit: CSS und die Kunst des Webs
- CSS ist nicht nur ein Werkzeug, sondern ein Mittel für kreativen Ausdruck
- AI-Tools oder Build-Ketten wie Linter und Minifier können Kreativität einschränken
- CSS erfüllt zugleich Performance, Barrierefreiheit und künstlerischen Ausdruck
- Dieser Artikel wurde mit etwa 49 kB JavaScript-freiem HTML/CSS erstellt
- Alle interaktiven Widgets und visuellen Elemente wurden von Hand umgesetzt
- Beispiel: CSS-Klickspiel beweist das Potenzial von CSS als Programmiersprache
3 Kommentare
Ich war Full-Stack-Entwickler, aber je weiter die Karriere nach oben geht, desto weniger Gelegenheiten hat man wohl, FE zu machen. Ich habe es deshalb etwa 10 Jahre lang nicht angerührt, und weil ich vor Kurzem die Gelegenheit hatte, bei einem Unternehmen einen Vortrag zu halten, habe ich es mir noch einmal kurz angesehen, um eine knappe Einführung geben zu können — und war wirklich überrascht, wie sehr es sich verändert hat. Mit SCSS zusammen ist es sogar noch praktischer. Aber dieser Bereich von CSS ist wirklich eigenartig. Es ist leicht zu lernen, aber es so gut einzusetzen, dass es Anerkennung findet, hängt meiner Meinung nach von der ästhetischen Sensibilität und Kreativität des Einzelnen ab. Es ist schade, dass der Wert von Publishern in einer Web-Ära, in der Benutzerfreundlichkeit und Design wichtiger genommen werden, offenbar nicht höher eingeschätzt wird.
Diesmal habe ich als hobbyartige Schnupperaktivität im Bereich Webentwicklung ohne auch nur die geringsten Grundlagen nach dem Prinzip „einfach ins kalte Wasser springen“ mit
nextjs,authjs,tailwindundshadcnein einfaches Board gebaut ... und die größte Lernhürde war eindeutig CSS.Hacker-News-Kommentare
Ich bin dankbar für die kürzlich zu CSS hinzugefügte Nesting-Funktion, aber insgesamt ist CSS wirklich seltsam, und ich persönlich halte es für eine schreckliche Sprache. Vielleicht liegt es daran, dass ich sie nicht richtig benutzen kann, aber sie ist so komplex und chaotisch, dass es sich anfühlt, als würde man unverständliche Runenzeichen hier und da hin- und herschieben. Styling- und Layout-System sind vermischt, und weil Vererbung und Einschlussbeziehungen unterschiedlich funktionieren, wird es noch verwirrender. Ich denke, Styling und Layout zusammenzulegen war ein Fehler. Es fühlt sich nicht so an, als könne es eine Lösung sein, einem bereits grundlegend kaputten System einfach nur weitere Funktionen hinzuzufügen.
gapin Flex und Grid unterschiedlich funktioniert (Link). Wenn man einmal ein Layout gebaut hat, ist es praktisch fast festgeschrieben. Ohne komplexe native oder JS-basierte Kapselung lässt es sich nur schwer flexibel ändern. Dann treten unerwartet Probleme auf, etwa dass sich die Schriftstärke ändert oder ein mobiles Menü auch auf dem Desktop erscheint.marginundpaddinggegenseitig. Wenn man den Rand oder die Abstände eines Elements ändert, verändert sich auch der Platz für den Inhalt darin. Beides lässt sich nicht vollständig voneinander trennen.calckönnte man vielleicht auch mathematisch ein geordneteres Layout-System umsetzen. Aktuelle Präprozessor-Sprachen kleben auf CSS nur weitere unfertige Funktionen über Konzepte, die ohnehin schon unvollständig sind, und machen dadurch alles eher noch verwirrender.Das Schlimmste an CSS ist meiner Meinung nach, dass viele Leute es kaum richtig lernen, es einen Tag lang zwangsweise benutzen und dann sehr starke Meinungen dazu haben.
.foo > .bar:nth-child(2n) ~ .bazlandet. Dann zerstört man damit wieder den Code von Kolleginnen und Kollegen. Schon ein einfaches Layout bereitet Kopfzerbrechen. In letzter Zeit ist es zwar deutlich besser geworden, aber ich denke, die eigentliche Ursache ist diese cascade-zentrierte Struktur. Andere Kritikpunkte wie die Syntax sind nebensächlich. Wenn etwas praktisch und leicht benutzbar ist, ist die Syntax akzeptabel, aber CSS war das nicht. Web-Layouts zu bauen sollte kein Beruf sein.Mich überzeugt die Begründung „Einige Nutzer wollen kein JavaScript“ in diesem Artikel nicht besonders. Ich bin selbst Arch-Nutzer und sehr aktiv bei allerlei Scripting und Crawling, aber ich habe nicht das Gefühl, dass es besonders wichtig ist, sich auf eine „NoScript“-Umgebung zu konzentrieren. Das ist eher ein Geschmack einer sehr kleinen Minderheit, den man im Allgemeinen ignorieren kann. Es fühlt sich ähnlich an wie damals die Zeit, als es hieß „10 % nutzen IE6“. Trotzdem gibt es meiner Meinung nach viele andere Gründe, warum CSS die bessere Wahl ist. Es ist jedenfalls nicht der Hauptpunkt, aber so wirkt für mich die Stoßrichtung insgesamt.
Ich wusste nicht, dass Nesting inzwischen offizieller Standard ist. Bis vor Kurzem dachte ich noch, es sei in der Vorschlagsphase. CSS hat viele seltsame Seiten, aber ich habe das Gefühl, dass es sich wie JavaScript nach und nach zu einer immer brauchbareren Sprache entwickelt. Dank Flexbox, dem
:has-Selektor und Nesting sind viele Schmerzpunkte verschwunden, die es schon seit Langem gab.Zwei CSS-Funktionen auf meiner Wunschliste existieren bereits in der Spezifikation.
sibling-index()undsibling-count()umsetzen (MDN-Erklärung)@functionund@mixin(Spezifikationsentwurf, CSS-Tricks-Erklärung)Ich finde die CSS-Syntax schrecklich. Ich arbeite mit 10 bis 15 Sprachen, aber CSS ist am schwersten zu lesen und zu verstehen, sogar kryptischer als x86-Assembly. CSS ist vorab tokenisierte Eingabe für den Renderer, aber irgendwie auch keine Tokens, und für Menschen ist es merkwürdig zu schreiben. Wie ASN.1 in RFCs sollte es als abschreckendes Beispiel dienen, wie man es nicht machen sollte.
font-size: 12pxist doch wirklich nicht schwer für Menschen zu lesen, deshalb verstehe ich nicht, warum es als so schwierig empfunden wird. Für mich ist das wirklich simpel.Ich frage mich, ob das Radio-Tab-Beispiel aus Sicht der Barrierefreiheit in Ordnung ist. Soweit ich weiß, müssen nach WAI-ARIA die Attribute
aria-selected,tabindexundaria-controlsbeim Wechseln der Tabs per JS aktualisiert werden, aber ich bin mir nicht sicher. Barrierefreiheit wird oft zur Nebensache, und manche glauben fälschlich, dass sie automatisch gewährleistet sei, wenn man nur HTML/CSS verwendet. Das ist ein Punkt, den man bei der Wahl des Ansatzes noch einmal bedenken sollte.Solche interaktiven Effekte lassen sich auch ohne JS umsetzen (Beispielseite)
Als Webentwickler mit 10 Jahren Erfahrung finde ich, dass solche Artikel unsere Gewissheiten erschüttern sollten. Der Titel ist nicht besonders gut, deshalb hätte ich ihn fast nicht gelesen. Zur Einordnung: Kartenrendering geht nicht allein mit CSS.
Wegen des Namens Vega könnte man Vorurteile haben, aber ich mag diese Website wirklich sehr. Das Gesamtdesign ist gut, und auch der Inhalt dieser Seite ist wirklich hervorragend. Ich werde den Link künftig unbedingt an Leute weitergeben, die Webentwicklung machen. Ich mag auch arrupted sehr; dort wurden früher schon großartige Dinge gebaut. Deshalb freut es mich, diese vertraute Domain diesmal auf der Startseite zu sehen.