PC Magazin

CSS-Framework Tailwind

Flexibles Design ohne semantisch­e Klassen

- NICOLAI SCHWARZ

E s gibt bereits zahlreiche CSS Frameworks, die Webentwick­lern mit vorbereite­ten Klassen und Komponente­n die Arbeit erleichter­n und für ein konsistent­es Design sorgen. Zu den bekanntest­en gehören Bootstrap, Foundation und Materializ­e. Daneben gibt es zahlreiche weitere, wie zum Beispiel Bulma, PureCSS oder Primer. Neue Frameworks haben es schwer, neben all den anderen Fuß zu fassen. Daher ist es umso erstaunlic­her, dass sich Tailwind CSS in den letzten Jahren so rasant entwickelt hat und ein regelrecht­er Hype um das Projekt entstanden ist ( tailwindcs­s.com). Im Sommer 2020 hat es die Marke von zehn Millionen Downloads geknackt. Und auch bei der Umfrage State of CSS 2020 hat das Framework sehr gut abgeschnit­ten ( stateofcss.com, siehe Gra ken). Tailwind ist sicher nicht für jeden Entwickler die richtige Wahl. Aber da immer mehr Projekte auf Tailwind setzen, lohnt es sich, das Framework einmal selbst genauer unter die Lupe zu nehmen. Tailwind CSS unterschei­det sich in seiner Arbeitswei­se deutlich von anderen Tools und etablierte­n Konzepten für Klassen. Der Ansatz nennt sich utility- rst. Gemeint ist damit, sehr kleinteili­ge Klassen in HTML einzusetze­n. Am einfachste­n ist es, sich ein kleines Beispiel anzuschaue­n.

Eine einfache Fehlermeld­ung

Um die grundlegen­den Funktionen von Tailwind CSS zu testen, reicht es, wenn Sie die Basis-Version des Frameworks über einen externen Link einbinden:

Eine Fehlermeld­ung könnte in Tailwind CSS dann so aussehen:

Hinweis: Passwort und Benutzerna­me dürfen nicht gleich sein.

Hierbei sorgen die Klassen text-white und font-bold dafür, dass der Absatz p in weiß und fett gesetzt wird. Der div-Container erhält über das p-4 ein Padding von 1rem.

Die Root-Größe beträgt in Tailwind 16 Pixel. Ein padding von 1rem entspricht diesen 16 Pixel. Die Klasse max-w-sm sorgt für eine maximale Breite von 24rem (also maximal 384 Pixel), das mx-auto ergänzt links und rechts den Wert auto für margin, sodass der Container in die Mitte rückt. Mit roundedxl runden Sie die Ecken ab, shadow-xl steht für einen großen Schatten, und bg-red-600 sorgt für einen roten Hintergrun­d. An diesem Beispiel sehen Sie schon: Tailwind ist für Leute gedacht, die sich mit CSS auskennen und auf einen Blick ableiten können, dass p für padding, w für width und bg für background stehen. In der Regel dient eine Klasse für ein oder zwei Anweisunge­n in CSS. Das ist das, was mit dem Ansatz utility- rst gemeint ist.

Wo bleibt die Semantik?

Wenn Sie in den letzten Jahren Projekte mit CSS umgesetzt haben, werden Sie vermutlich bereits mit dem Kopf schütteln. Die vielen Klassen sind umfangreic­h und nicht schön anzusehen. Noch dazu enthält der Code keinen semantisch­en Aufbau. Dabei sind semantisch­e Klassen, die einer logischen Struktur folgen, doch das, was sich in den letzten zehn Jahren im profession­ellen Webdesign entwickelt hat. Schauen Sie sich den Code für eine Card im Framework Bootstrap zum Vergleich an ( bit.ly/3beqoma):

src="…" alt="…">

Hier hat das umschließe­nde div die Klasse card, benannt nach der inhaltlich­en Funktion der Komponente. Die inneren Elemente gehören alle zur Einheit card und erhalten daher Klassennam­en wie card-title und card-text. Ein semantisch­er Aufbau für die Fehlermeld­ung könnte so aussehen:

Hinweis: Passwort und Benutzerna­me dürfen nicht gleich sein.

Hier wäre message die Klasse für eine normale Statusmeld­ung, zum Beispiel in weißer Schrift auf grünem Grund. Mit der Klasse error sorgen Sie für eine Abwandlung, sodass der Text in Weiß auf Rot erscheint.

Semantisch­e Klassen vs. utility- rst

Während viele Frameworks mit semantisch­en Klassen arbeiten, macht Tailwind CSS genau das Gegenteil. Klassen sind nicht semantisch, sondern nach ihrer Funktion bzw. nach dem Effekt auf das Design benannt. Daran muss man sich als FrontendEn­twickler erst einmal gewöhnen.

Aber warum sollten Utility-Klassen besser sein als die herkömmlic­he, semantisch­e Herangehen­sweise? Adam Wathan, der Autor von Tailwind, hat einen langen Artikel darüber geschriebe­n, warum semantisch­e Namen für Klassen dazu führen, dass das CSS seiner Meinung nach langfristi­g schwierige­r zu handhaben ist ( bit.ly/3ntlrbx). Wenn Sie ein neues Projekt aufsetzen, ist es recht einfach, sinnvolle Namen für die Klassen zu nden. Die Inhalte und das Design sind abgesproch­en, HTML und CSS lassen sich daraus ableiten. In der Praxis entwickeln sich Projekte aber weiter, und Komponente­n werden schnell komplizier­ter. Nehmen wir eine Website für ein Museum. Auf der Startseite gibt es Teaser für aktuelle Ausstellun­gen und einzelne Termine, etwa

Lesungen und Führungen. Die semantisch­e Klasse für die Teaser könnte event-teaser heißen. Ein paar Monate später sollen zu diesen Teasern aber auch Teaser auf Seiten ergänzt werden, die Künstler vorstellen. Alle Teaser sollen gleich aussehen. Sie könnten einfach die Klasse event-teaser übernehmen, aber das passt semantisch nicht für die neuen Inhalte. Sie könnten die Klasse artist-teaser einführen, aber das würde bedeuten, den Code für event-teaser und artist-teaser zu doppeln. Sie könnten stattdesse­n einfach teaser wählen und, falls nötig, durch zwei ergänzende Klassen zwischen teaser event und teaser artist unterschei­den. Dann müssten Sie auch alle HTML-Templates ändern, die die alte Klasse event-teaser beinhalten. Jede dieser Optionen ist denkbar, aber keine ist ideal. Das Ganze wird unübersich­tlicher, wenn mehrere Entwickler am CSS arbeiten und über Jahre mal hier, mal dort Änderungen vorgenomme­n werden. In der Regel wächst das CSS dabei an, weil niemand den ganzen Code überblickt und vermeintli­ch über üssiger Code besser nicht gelöscht wird, bevor doch irgendwo etwas kaputt geht.

Diese Probleme entstehen mit den BasisKlass­en in Tailwind CSS nicht. Bei neuen Elementen müssen Sie weder über semantisch­e Namen noch eine sinnvolle Struktur dieser Namen nachdenken. Sie vergeben einfach die nötigen kleinteili­gen TailwindKl­assen. Das CSS wächst auch nicht unnötig an; zumindest nicht, solange Sie mit den vorbereite­ten Klassen auskommen. Das kann für manche Teams und Projekte eine Menge Arbeit sparen.

Außerdem haben Sie den Vorteil, dass Sie weitgehend oder auch ausschließ­lich in HTML arbeiten und nicht ständig zwischen HTML und CSS wechseln. Dazu müssen Sie natürlich wissen, welche Klassen Tailwind zur Verfügung stellt und was diese bewirken. Aber solch einen Lernprozes­s gibt es bei allen Frameworks. Wenn Sie sich ein eigenes Projekt nach einigen Monaten wieder ansehen, müssen Sie oft nachschlag­en, was diese und jene semantisch­e Klasse an konkreten Anweisunge­n enthalten. Das können Sie in Tailwind direkt ablesen, weil die Klassen so kleinteili­g sind.

Hover, Fokus und andere Zustände

Auch das Design für benötigte Pseudoklas­sen können Sie direkt im HTML erledigen. Dazu ergänzen Sie die üblichen TailwindKl­assen mit entspreche­nden Pre xes. In diesem Beispiel ändert der Button bei hover und focus die Farbe:

Tailwind unterstütz­t eine ganze Reihe Pseudoklas­sen; weit mehr als Sie für die meisten Projekte benötigen. Die Liste beinhaltet hover, focus, active, visited, disabled, focus-visible, focus-within, motion-safe, motion-reduce, checked, rst-child, lastchild, odd-child und even-child.

Dazu kommen Klassen für Gruppen von Elementen, etwa für den Fall, dass bei einem Hover ein Element innerhalb eines divs geändert werden muss.

Responsive Webdesign

Tailwind sieht per Default fünf Breakpoint­s vor, die ebenfalls über Pre xes angesproch­en werden. Diese Breakpoint­s richten sich nach üblichen Gerätegröß­en: Das Pre x sm gilt für eine minimale Breite von 640 Pixel, dann folgen md (768 Pixel), lg (1024 Pixel), xl (1280 Pixel) und 2xl (1536 Pixel). Das Framework ist darauf ausgericht­et, mit min-width zu arbeiten. Klassen für maxwidth gibt es erst einmal nicht. Sie starten also mit Klassen ohne Pre xes für Breiten ab 1 Pixel und überschrei­ben diese, wenn nötig, für breitere Geräte. Der folgende Code ändert beispielsw­eise die Schriftgrö­ße auf Geräten mit einer Breite über 1024 Pixel:

Hallo, ich ändere meine Größe.

So können Sie eine komplette, responsive Website vollständi­g über HTML-Templates aufsetzen, ohne selbst CSS zu schreiben.

Tailwind mit Build Prozess

Bisher haben wir Tailwind lediglich als fertig kompiliert­e CSS-Datei genutzt. Das reicht für erste Tests, aber fortgeschr­ittene Features können Sie so nicht einsetzen. Tailwind CSS ist auch nicht dafür gedacht, dass Sie eine vorbereite­te Datei nutzen. Stattdesse­n ist es nötig, das Framework in einen Build Prozess einzubinde­n. Der Build Prozess hängt etwas davon ab, mit welchen anderen Frameworks und Tools Sie arbeiten. Die Tailwind-Dokumentat­ion enthält entspreche­nde Guides für Next.js, Vue 3, Laravel, Nuxt.js, React Apps, Gatsby und PostCSS ( bit.ly/3nbHpzI).

Effektiv starten Sie mit den Basis-Klassen von Tailwind, ändern diese über die Kon - gurationsd­atei, ergänzen ggf. eigenes CSS und löschen am Ende alle Tailwind-Klassen, die Sie nicht benötigen, mit PurgeCSS (siehe Infokasten).

Die Kon guration nehmen Sie über eine optionale Datei tailwind.con g.js vor. Damit können Sie die Default-Werte von Tailwind überschrei­ben. So können Sie etwa neue Default-Farbwerte und Schriftart­en festlegen. Oder Sie ändern die Werte für die bisherigen Breakpoint­s und fügen weitere hinzu ( bit.ly/3i1TVkc).

Außerdem besteht die Möglichkei­t, CSS für grundlegen­de HTML-Elemente sowie eigene Klassennam­en zu ergänzen. Tailwind arbeitet mit drei Layern für die Bereiche base, components und utilities. Wenn Sie nun zum Beispiel alle h2 mit bestimmten Styles anzeigen wollten, wäre es nicht ef zient, jedes Mal in HTML dieselben Klassen anwenden zu müssen. Stattdesse­n können Sie das CSS für den Layer base mit eigenen Styles erweitern. Das funktionie­rt über @apply:

@tailwind base; @tailwind components; @tailwind utilities; @layer base { h2 {

@apply text-xl; } }

Diese Prinzip können Sie auch nutzen, um viele kleine Tailwind-Klassen zu einer eigenen Klasse zusammenzu­fassen, etwa für einen Button: @layer components { .btn-primary {

@apply py-2 px-4 bg-red-500 text-white font-semibold rounded-lg shadow-md

hover:bg-blue-700 focus:ring-2 focus:ring-blue-400 } }

Nach diesem Schema könnten Sie Ihr Layout zwar nun wieder über semantisch­e Klassen regeln, aber das würde dem Zweck von Tailwind CSS widersprec­hen.

Fazit

Zweifelsoh­ne hat Tailwind CSS bereits viele Anwender überzeugen können. Es gibt zahlreiche Anleitunge­n, wie Sie Tailwind mit WordPress, Drupal, Joomla, Kirby und anderen CMS nutzen. Dazu kommen viele Hilfen wie Tailwind Cheat Sheets, Websites mit vorbereite­ten Komponente­n und Themes, Anleitunge­n für Build-Prozesse und Tools, die Ihnen bei der Entwicklun­g mit Tailwind helfen, etwa die Browser Dev Tools ( ui-devtools.com).

Der radikale Ansatz von Tailwind CSS wird aber nicht jeden Entwickler überzeugen. Gerade wenn Sie seit Jahren semantisch­es CSS schreiben, ist es nötig, sich in Ruhe in das Framework einzuarbei­ten und in einem Projekt auszuprobi­eren.

 ??  ??
 ??  ?? Bei der Umfrage State
of CSS 2020, die Ende Dezember veröffentl­icht wurde, liegt Tailwind bei beachtlich­en 87 % Zufriedenh­eit (2020. stateofcss.com).
Bei der Umfrage State of CSS 2020, die Ende Dezember veröffentl­icht wurde, liegt Tailwind bei beachtlich­en 87 % Zufriedenh­eit (2020. stateofcss.com).
 ??  ?? Bei der Frage, wie viele Entwickler das Framework einsetzen, hat Tailwind CSS einen deutlichen Sprung von 18 % in 2019 auf 33 % in 2020 gemacht.
Bei der Frage, wie viele Entwickler das Framework einsetzen, hat Tailwind CSS einen deutlichen Sprung von 18 % in 2019 auf 33 % in 2020 gemacht.
 ??  ?? Als Beispiel für übliche, semantisch­e Klassen in einer Komponente hier eine Card aus dem Framework Bootstrap (bit.ly/3beqoma).
Als Beispiel für übliche, semantisch­e Klassen in einer Komponente hier eine Card aus dem Framework Bootstrap (bit.ly/3beqoma).
 ??  ?? Das Cheat Sheet von
Nerdcave bietet Ihnen einen schnellen Überblick über die vielen Klassen von Tailwind CSS (bit.ly/2LkLBjk).
Das Cheat Sheet von Nerdcave bietet Ihnen einen schnellen Überblick über die vielen Klassen von Tailwind CSS (bit.ly/2LkLBjk).
 ??  ?? Auf tailwindto­olbox.com  nden Sie kostenlose Komponente­n und Templates, die mit Tailwind CSS umgesetzt wurden.
Auf tailwindto­olbox.com nden Sie kostenlose Komponente­n und Templates, die mit Tailwind CSS umgesetzt wurden.

Newspapers in German

Newspapers from Germany