Potom potrebovali neco zopakovat tak prasacky kopirovali hromadu tech stylu.
tailwind na ty opakující se věci má možnost udělat si
.custom-class {
@apply font-bold text-xl mb-2 ...
}
nechápu, proč se toho někteří štítí, nebo až bojí 
Protože je to proti smyslu těch frameworků.
Kaskády v CSS vznikly v době, kdy se počítalo s tím, že se napíše ručně jednoduchá HTML stránka a k tomu se ručně napíše CSS, které bude mít pár stylů. Kaskády v CSS měly usnadnit psaní, omezit psaní opakovaného kódu.
Webové aplikace jsou ale co do složitosti HTML i CSS někde úplně jinde. Navíc hierarchie, jak je navržená v CSS, neodpovídá zcela tomu, jak je to potřeba ve webových aplikacích. A hlavně webové aplikace potřebujete skládat z nezávislých zapouzdřených komponent, které se navzájem neovlivňují – takže fakt nechcete globální CSS soubory, které ovlivní celou aplikaci.
Utilitní třídy a zejména Tailwind se používají ze třech důvodů. Seřadil jsem je od toho nejméně důležitého:
1. Jednodušší zápis – samotné CSS musí pokrývat všechny možnosti, takže se tam někdy i jednoduché věci musí zapsat složitěji, třeba nastavením více vlastností. Třeba horizontální vycentrování znamená nastavit
margin-left: auto; margin-right: auto; – v CSS frameworku s utilitními třídami na to zpravidla máte jednu třídu.
2. Smysluplný systém hodnot – třeba grid, barevné palety. Když budete psát CSS ručně, uděláte jedno tlačítko široké 120px, pak na to zapomenete nebo někdo jiný udělá další tlačítko 160px široké, a třetí tlačítko bude 150px široké. Protože hodnot, které dávají nějaký smysl (třeba jsou to hezká čísla) je strašně moc, ale neladí spolu. CSS framework má připravené rozměry, které jsou v nějakých násobcích, které vychází ze stovek let zkušeností s tím, co považujeme za hezké, příjemné. (Stovek let proto, že už se to dávno před IT a před tiskem objevuje třeba v architektuře nebo výtvarném umění.) Takže standardně nebudete volit šířku tlačítka se stupněm po pixelech, ale máte nějaké předem dané rozměry. Takže i někdo, kdo má grafické cítění pařezu, to snadno poskládá tak, aby to bylo zarovnané, věci nebyly podobně velké ale stejně velké, a ty, které jsou různě velké, budou mít alespoň nějaký jednotný rytmus.
Týká se to nejen velikostí prvků, ale také rozestupů, velikostí písma. A třeba také barevných palet – nemusíte vymýšlet světlejší odstín nějaké barvy, máte už hotovou paletu. (Dnes s funkcemi založenými na odstínu a jasu už je to jednodušší, dříve s rgb se to muselo někde bokem spočítat – a pak ještě obvykle ručně doladit).
3. Např. Tailwind má skvělou dokumentaci. Nemusíte dělat pokusy s CSS v prohlížeči. Chci dělat kulaté rohy, tak si v dokumentaci Tailwindu najdu kulaté rohy a rovnou tam vidím, jak tam ty jednotlivé varianty, co jsou připravené v Tailwindu, vypadají. Takže nemusím nic zkoušet, prostě si vyberu z nabídky to, co chci. Stačí tedy mít základní představu o CSS, není potřeba ho ovládat nějak detailně a znát všechny možné vlastnosti – jenom si prohlížím dokumentaci a vybírám, co se mi hodí.
Utilitní třídy jsou opravdu v něčem podobné tomu, jako bych psal styly přímo do HTML. Jenom je to o úroveň výš. A to psaní „stylů“ má svou nepopiratelnou výhodu – vidím stylování rovnou společně s HTML kódem. Nemusím z HTML odcházet do CSS a tam hledat, kde jsou ty styly vlastně nadefinované a hledat, jak se uplatní kaskáda stylů. Ne, vidím to rovnou v HTML, nemusím nikam odcházet. (Vue řeší, jak mít HTML, JavaScript i CSS komponenty v jednom souboru. React resp. JSX řeší, jak mít HTML a JavaScript v jendom souboru, Tailwind k tomu přidává i to CSS. Evidentně je poptávka po tom mít kód pohromadě.)
A znovupoužitelnost, abych nemusel opakovat stále dokola ten samý kód? Dneska už přece nikdo nepíše celé HTML soubory ručně. Vždycky na to máme nějaké šablony, ať už na klientovi (např. JSX), nebo na serveru (JSX, PHP, Thymeleaf, Astro…). Takže když se něco bude opakovat, stejně chci mít na jednom místě i HTML. Takže si vytvořím v šablonovacím systému HTML komponentu – no a té pak nastavím ty utilitní třídy. Takže se CSS nikde neopakuje.