Tailwind CSS v4.0 जारी
(tailwindcss.com)- Tailwind CSS v4.0 एक ऐसा रिलीज़ है जिसमें framework को शुरू से फिर से लिखा गया है, जिससे build performance में बड़ा सुधार हुआ है और configuration व customization का flow CSS-केंद्रित हो गया है
- Catalyst के आधार पर full build v3.4 के 378ms से v4.0 के 100ms तक 3.78x तेज़ हुआ, और बिना नए CSS वाले incremental build 35ms से 192µs तक 182x बेहतर हुए
- इंस्टॉलेशन
@import "tailwindcss"की एक लाइन और zero-configuration defaults के साथ सरल हो गया है, और Vite उपयोगकर्ता PostCSS की जगह@tailwindcss/viteइस्तेमाल कर सकते हैं - v4.0 में cascade layers,
@property,color-mix(), logical properties जैसे modern CSS features का उपयोग किया गया है, और content auto-detection व built-in@importhandling जोड़ी गई है - container queries, 3D transform, विस्तारित gradient API,
@starting-style,not-*,field-sizing,color-scheme,inertआदि अब core features का हिस्सा हैं, जिससे अलग plugins पर निर्भरता घटती है
शुरू से फिर से लिखा गया high-performance engine
- Tailwind CSS v4.0 framework का वह संस्करण है जिसे कई वर्षों के architecture अनुभव के आधार पर शुरू से फिर से लिखा गया है
- अपने project benchmarks में full rebuild 3.5x से अधिक और incremental build 8x से अधिक तेज़ हुए हैं
- Catalyst के आधार पर median build time इस प्रकार है
- Full build: v3.4 378ms → v4.0 100ms, 3.78x सुधार
- नए CSS के साथ incremental rebuild: 44ms → 5ms, 8.8x सुधार
- बिना नए CSS के incremental rebuild: 35ms → 192µs, 182x सुधार
- जिन incremental builds में नया CSS compile करने की ज़रूरत नहीं होती, वे 100x से अधिक तेज़ होकर microsecond स्तर पर पूरे होते हैं
- किसी project पर लंबे समय तक काम करने पर
flex,col-span-2,font-boldजैसी पहले से इस्तेमाल की गई classes दोबारा उपयोग होने की संभावना बढ़ती है, इसलिए ऐसे build अक्सर मिलते हैं
- किसी project पर लंबे समय तक काम करने पर
modern CSS platform का उपयोग
- v4.0, Tailwind CSS v3.0 के बाद विकसित हुई web platform capabilities का सक्रिय रूप से उपयोग करता है
- आधार बनने वाले मुख्य CSS features इस प्रकार हैं
- Native cascade layers: अलग-अलग style rules के आपसी interaction को और बारीकी से नियंत्रित करते हैं
- Registered custom properties: gradient animation को संभव बनाते हैं और बड़े pages पर performance में बड़ा सुधार करते हैं
color-mix(): CSS variables औरcurrentColorसहित सभी color values की opacity समायोजित कर सकता है- Logical properties: RTL support को सरल बनाते हैं और generated CSS का आकार घटाते हैं
- ये features Tailwind के internal implementation को भी सरल बनाते हैं, जिससे bugs की surface area कम होती है और maintenance आसान होता है
इंस्टॉलेशन और build integration का सरलीकरण
- इंस्टॉलेशन flow को steps और boilerplate कम करने के हिसाब से व्यवस्थित किया गया है
npm i tailwindcss @tailwindcss/postcss- PostCSS plugin में
@tailwindcss/postcssजोड़ें - CSS file में
@import "tailwindcss"इस्तेमाल करें
- v4.0 में
@tailwinddirective की जगह Tailwind को CSS की एक लाइन से import करके इस्तेमाल किया जा सकता है - यह template file paths सहित किसी भी configuration के बिना शुरू करने वाला zero-configuration flow देता है
- अलग external plugin के बिना
@importrules को bundle किया जाता है, और vendor prefixing व modern syntax transforms के लिए अंदरूनी रूप से Lightning CSS का उपयोग होता है - Vite उपयोगकर्ता PostCSS की जगह
@tailwindcss/viteचुन सकते हैं- Tailwind CSS v4.0 PostCSS plugin के रूप में भी तेज़ है, लेकिन Vite plugin के साथ और बेहतर performance मिल सकती है
content auto-detection और built-in import
- v3 में ज़रूरी
contentarray configuration को v4.0 की auto-detection heuristics ने replace कर दिया है .gitignoreमें मौजूद items अपने-आप ignore हो जाते हैं, इसलिए dependencies या version control में न होने वाली generated files scan नहीं होतीं- उदाहरण:
/node_modules,/coverage,/.next,/build
- उदाहरण:
- images, videos,
.zipजैसी binary extensions भी अपने-आप ignore हो जाती हैं - जब default रूप से exclude होने वाले source को स्पष्ट रूप से जोड़ना हो, तब CSS file के भीतर
@sourcedirective इस्तेमाल किया जा सकता है@source "../node_modules/@my-company/ui-lib";@sourceभी वही heuristics इस्तेमाल करता है, इसलिए binary file types बिना अलग extension बताए ही exclude हो जाते हैं
- v4.0 से पहले दूसरे CSS files को
@importसे inline करने के लिएpostcss-importजैसे अलग plugin की ज़रूरत होती थी, लेकिन अब built-in import support के कारण किसी दूसरे tool की ज़रूरत नहीं है- import system Tailwind CSS के लिए खास तौर पर बनाया गया है और engine के साथ काफ़ी tightly integrated है, इसलिए यह और तेज़ काम करता है
CSS-first configuration और theme variables
- v4.0 के बड़े बदलावों में से एक यह है कि project configuration अब JavaScript के बजाय सीधे CSS में की जाती है
tailwind.config.jsfile की जगह Tailwind import करने वाली CSS file में@themeका उपयोग करके customization किया जा सकता है- design tokens configure करना
- custom utilities define करना
- custom variants define करना
@themeमें define किए गए design tokens default रूप से CSS variables के रूप में expose होते हैं- उदाहरण:
--font-display,--breakpoint-3xl,--color-avocado-500,--ease-fluid
- उदाहरण:
- इन generated CSS variables को runtime में सामान्य CSS की तरह refer किया जा सकता है
- inline styles का reuse
- animation के लिए Motion जैसी libraries को pass करना
dynamic utility values और variants
- v4.0 कई utilities और variants को इस तरह सरल बनाता है कि वे बिना configuration के specific arbitrary values स्वीकार कर सकें
- grid में बिना अलग configuration के मनचाहा size इस्तेमाल किया जा सकता है
- उदाहरण:
grid grid-cols-15
- उदाहरण:
- custom boolean data attributes को भी पहले से define किए बिना target किया जा सकता है
- उदाहरण:
data-current:opacity-100
- उदाहरण:
px-*,mt-*,w-*,h-*जैसी spacing utilities एक single spacing scale variable से dynamically derive होती हैं- उदाहरण:
--spacing: 0.25rem w-17calc(var(--spacing) * 17)के रूप में generate होता है
- उदाहरण:
- v4.0 के साथ आए upgrade tool को जब अनावश्यक arbitrary value syntax मिलती है, तो वह ज़्यादातर मामलों में उसे अपने-आप सरल कर देता है
color palette और container queries
- default color palette को पूरी तरह
rgbसेoklchमें upgrade किया गया है- इससे sRGB color space की सीमाओं से आगे बढ़कर wider gamut का उपयोग होता है और colors अधिक vivid दिखते हैं
- v3 के साथ colors के संतुलन को बनाए रखने की कोशिश की गई है, इसलिए मौजूदा projects को upgrade करते समय इसे breaking change जैसा महसूस नहीं होना चाहिए
- container query support अब v4.0 में core का हिस्सा है, इसलिए
@tailwindcss/container-queriesplugin की ज़रूरत नहीं रहती - नया
@max-*variant max-width container queries के लिए इस्तेमाल किया जा सकता है - सामान्य breakpoint variants की तरह
@min-*और@max-*को stack करके container query range define की जा सकती है
3D transform और gradient API का विस्तार
- v4.0 में 3D transform के लिए API जोड़ी गई है
rotate-x-*rotate-y-*scale-z-*translate-z-*
- gradient features को भी विस्तारित किया गया है ताकि custom CSS के बिना अधिक विविध effects बनाए जा सकें
- linear gradient अब angle को value के रूप में ले सकता है
- उदाहरण:
bg-linear-45 - पहले का
bg-gradient-*अबbg-linear-*नाम से है
- उदाहरण:
- gradient color interpolation mode को modifier से नियंत्रित किया जा सकता है
bg-linear-to-r/srgbbg-linear-to-r/oklch- v4.0 में default interpolation OKLAB है, और दूसरे color space modifiers भी इस्तेमाल किए जा सकते हैं
- नई
bg-conic-*,bg-radial-*utilities से conic और radial gradients बनाए जा सकते हैं- ये मौजूदा
from-*,via-*,to-*के साथ काम करती हैं - इनमें color interpolation settings modifiers और gradient position जैसे detailed control के लिए arbitrary values support भी शामिल है
- ये मौजूदा
नए variants और utilities
- नया
startingvariant CSS@starting-styleको support करता है- element पहली बार दिखाई देने पर property transition बनाई जा सकती है
- page पर दिखाई देने वाले elements को बिना JavaScript animate किया जा सकता है
- browser support अभी हर टीम के लिए पर्याप्त न हो, लेकिन यह काफ़ी नज़दीक है
- नया
not-*variant CSS:not()pseudo-class को support करता है- उदाहरण:
not-hover:opacity-75 - media query और
@supportsquery को भी negate किया जा सकता है
- उदाहरण:
- v4.0 में ये utilities और variants भी जोड़े गए हैं
inset-shadow-*,inset-ring-*: एक single element पर अधिकतम 4 box shadow layers stack की जा सकती हैंfield-sizing: बिना JavaScript textarea auto-resize support करता हैcolor-scheme: dark mode में हल्के scrollbar हटाए जा सकते हैंfont-stretch: विभिन्न widths को support करने वाले variable fonts को adjust करता हैinert:inertattribute वाले non-interactive elements को style करता हैnth-*: nth series styling को support करता हैin-*:groupclass के बिनाgroup-*जैसा काम करता है:popover-open: मौजूदाopenvariant के साथ खुले popover को भी target करता है- descendant variant: सभी child elements को style करता है
शुरुआत और upgrade path
- नए projects में installation docs का पालन करके Tailwind CSS v4.0 इस्तेमाल किया जा सकता है
- browser में सीधे प्रयोग करने के लिए Tailwind Play का उपयोग किया जा सकता है
- मौजूदा projects के लिए upgrade guide और automatic upgrade tool उपलब्ध हैं
1 टिप्पणियां
Hacker News की राय
एक समय Tailwind की कई कमियों और सच में आधुनिक “pure” web तरीकों के साथ इसकी असंगति की कड़ी आलोचना की थी, लेकिन v4 की बड़ी प्रगति देखकर बहुत खुशी है
Tailwind theme को native CSS variables के रूप में access कर पाना, और docs में external stylesheet में native variables से लिखे button component का उदाहरण तक होना, बहुत बड़ा बदलाव है
सिर्फ CSS से configuration कर पाना भी शानदार है, और अब Tailwind ऐसा JavaScript-स्टाइल “viral” framework नहीं लगता जो समझदार architecture को निगल जाता है, बल्कि ऐसी utility लगता है जिसे किसी भी project में जोड़ा जा सकता है
पिछले कुछ सालों की आलोचना का असर हुआ हो या वे खुद अच्छे निष्कर्ष पर पहुंचे हों, Tailwind के पक्ष-विपक्ष की बहसों का बड़ा हिस्सा अब कम प्रासंगिक दिखता है, और यह बहुत अच्छी बात है। अब product बनाने पर ध्यान दे सकते हैं
किसी भी चीज़ को व्यवस्थित ढंग से व्यक्त किया जा सकता है, इसलिए यह सच में अच्छी तरह काम करता है, और इसमें बेहद उपयोगी कुछ है
पहली, JavaScript/Tailwind engineers ने design discussions पर कब्ज़ा कर लिया है। “utility-first”, “unused code हटाना”, “type-safe CSS” के बजाय design system पर ज़्यादा ध्यान होता है, जैसे typography में Perfect Fifth इस्तेमाल करें या Perfect Fourth
दूसरी, Tailwind असली production process में भाग लेना मुश्किल बना देता है। Design decisions
flex items-center shadow-lg p-6 hover:bg-gray-50 dark:bg-gray-800 py-[calc(theme(spacing[2.5])-1px)]जैसे मुश्किल React component expressions के अंदर दब जाते हैंJavaScript engineer के लिए यह समझ में आ सकता है, लेकिन systematic design के लिए यह बाधा बनता है। CSS में सटीक mathematical relationships व्यक्त करने के बजाय, यह ज़्यादा सुविधाजनक inline styles इस्तेमाल करने जैसा है
CSS अब पहले की तुलना में बहुत आसान हो गया है, और ज़्यादातर browsers भी अब consistently behave करते हैं
build step की जरूरत नहीं, और markup को excessive code से clutter नहीं करता, इसलिए इसे सीखना worth it है
HTML में सीधे
styleattribute भी लिख सकते हैं, जिसे पहले separation of concerns के लिए avoid किया जाता था। लेकिन समझ नहीं आता कि वैसा ही तरीका फिर से क्यों लाना चाहते हैं। लगता है बस कुछ characters कम करने के लिए हैstyleattribute तो दिमाग में code को translate करने की जरूरत भी नहीं पड़ती, इसलिए उल्टे ज़्यादा intuitive लगता है। इसकी appeal ठीक से समझ नहीं आतीstyleattribute से काफी चीज़ें नहीं हो सकतीं। उदाहरण के लिए pseudo-classes:hover,:focus, pseudo-elements::before,::after, media queries, keyframes और animationsबड़े projects में developer experience भी अच्छा नहीं होता
वहीं जल्द standard बनने वाला
@scope, styles को पास में रखने के लिए अच्छा addition है: https://developer.mozilla.org/en-US/docs/Web/CSS/@scopeComponent abstraction meaning और style को ज़्यादा मजबूती से अलग करता है। दोनों cases में “hero” abstraction ढूंढना पड़ता है, लेकिन component world में style के साथ-साथ HTML tag name तक abstract हो जाता है
किसी भी तरह, “style details” page source file यानी “content” से अलग रहते हैं। separation of concerns, यानी content और presentation के बेहतर separation के लिए build step स्वीकार किया जा सकता है
अलग file manage करने और unused components हटाने की जरूरत भी कम हो जाती है
styletag से जो media queries नहीं हो पाती थीं, वे इस्तेमाल कर सकते हैं, और कहीं और इस्तेमाल हो रही classes को गलती से बदल देने का risk भी नहीं होता। CSS का global scope फायदा भी है, लेकिन जोखिम भरा हैमाना जाता है कि styles design system के नहीं, components के होते हैं। JavaScript-first engineering ecosystem को ऐसी और design-led companies चाहिए जो modern CSS और systematic design की ताकत समझती हों
सामान्य
.cssapproach में अजीब names, duplication और collisions की संभावना बनती है।css modulesभी एक विकल्प है, लेकिन प्रति component/page files की संख्या व्यावहारिक रूप से दोगुनी हो जाती हैsassयाless,css modulesऔर सामान्य.cssकी समस्याओं को एक साथ मिला देने जैसा लगता हैTailwind को मूल रूप से न तो पसंद करता हूं न नापसंद; शुरुआत में बहुत नापसंद था, लेकिन components और pages से बने 200 से अधिक files वाले project में इसकी value महसूस होती है
Tailwind पर मेरी पहली प्रतिक्रिया “झंझट है” थी। CSS मुझे पहले से आती है, लेकिन अब ऐसा लगा जैसे CSS फिर से सीखनी पड़ेगी
यह वैसा ही लगता है जैसे कोई पैरेंट बच्चे के गणित के होमवर्क में मदद करने की कोशिश करे, लेकिन स्कूल में सिखाया जाने वाला तरीका पुराने तरीके से पूरी तरह अलग हो गया हो; आपका हल अभी भी सही है, पर स्वीकार नहीं किया जाता, और बच्चा दो सिस्टम मिलाने में चिढ़ जाता है
मैं समझता हूं कि टीम में यह अच्छी तरह काम करता है और scale भी अच्छे से होता है, इसलिए बस इसे इस्तेमाल करना चाहिए—यह माहौल मैंने भी अनुभव किया है
फिर भी मुझे अब भी classes या tags को target करने वाली साधारण stylesheet ज्यादा पसंद है। खासकर अब जब CSS nested selectors support करता है, तो और भी
Stylesheet management की समस्या है, और Remix/React Router की तरह route level पर CSS files define और apply करने का तरीका मुझे पसंद है। अगर वह काफी न हो, या dynamic styles
.cssfile में बहुत जटिल हो जाएं, तोstyle={{...}}भी हमेशा एक विकल्प हैCSS शक्तिशाली, flexible और scalable है, इसलिए Tailwind सुधार नहीं बल्कि restriction जैसा लगता है। यह लगातार लोकप्रिय क्यों है, यह मुझे ठीक से समझ नहीं आता, लेकिन मुझे लगता है 3–4 साल बाद सब किसी और चीज़ पर चले गए होंगे
लेकिन Tailwind इस्तेमाल करने वाले open source project में contribute करते-करते इसकी आदत हो गई, और अब मेरी राय अलग है
Tailwind मूल रूप से
style={{…}}की shorthand जैसा है। जिस चीज़ के लिए.cssfile या style object में कई lines लगतीं, वह एक utility में करीब 15 characters में खत्म हो जाती है“visual text replacement css” जैसी चीज़ें search करने या CSS cheatsheet और 8 साल पुराने CSS-Tricks article खंगालने में लगने वाला समय काफी कम हो गया। इसके बजाय मैं हमेशा Tailwind docs देखता हूं और जो काम चाहिए उसके लिए utility class जल्दी ढूंढ लेता हूं
हैरानी की बात है कि इसका बहुत बड़ा हिस्सा दिमाग के cache में आ जाता है, और layout काम के लिए जरूरी सारी CSS याद करने की कोशिश से यह कहीं बेहतर लगता है
अलग से CSS छूने की जरूरत नहीं होती, और style उसी element के ठीक ऊपर होता है जिस पर वह लागू हो रहा है, इसलिए दोनों को compare करने की जरूरत नहीं पड़ती
cssproperty से भी यह संभव है, लेकिन समस्या यह है कि सबको सिखाया गया है कि वह गलत तरीका है, और कई utilities वाली string list इस्तेमाल करना pure CSS object से आसान भी हैयह एक विशाल और जटिल system के ऊपर रखा गया composable और standardized modular wrapper है, इसलिए यह बड़ी प्रगति है
दूसरी ओर social media पर ऐसे posts हैं जो multiplication और division को मिला देते हैं और कहते हैं कि सही जवाब सिर्फ एक है। Tailwind उतना बुरा नहीं है, लेकिन बूढ़े व्यक्ति के नजरिए से यह उसी दिशा के ज्यादा करीब दिखता है
मुझे Tailwind पसंद है। पिछले 4 सालों में 3 projects में इस्तेमाल किया है, और यह intuitive, अच्छी documentation वाला और simple लगा
मुझे emotion और styled-components वाले वे दिन याद नहीं आते जब project के हर styled
divको नाम देना पड़ता थाTailwind में container बस एक
divऔर कुछ classes होता है। Naming debates घटती हैं, और नाम रखने में लगने वाली दिमागी ऊर्जा और review time कम होता हैdivके लिए नाम सोचने की समस्या बार-बार दिखती है, लेकिन यह मुझे थोड़ा अजीब लगता हैकिसी चीज़ का नाम रखने में मैंने शायद ही कभी 1 second से ज्यादा सोचा हो। क्या सच में कुछ लोगों के लिए यही bottleneck बनता है? सचमुच जानना चाहता हूं कि क्या वे वहीं पर इतने अटक जाते हैं
जिन लोगों को मैंने देखा है, वे हर संभव detail अंतहीन रूप से specify करते रहते थे। web form को अपने personal HGTV renovation की तरह treat करते हैं
जब मैंने Tailwind एक बार इस्तेमाल किया, तो classes markup से एक digit order ज्यादा हो गईं, और वह जल्दी ही पढ़ने में मुश्किल हो गया
अभी मैं CSS-in-JS workflow से संतुष्ट हूं। यह LLM की मदद से पुराने तरीके वाली CSS लिखने जैसा है। LLM को image दिखाकर component मांगें, तो proper names के साथ तुरंत मिल जाता है
React में styling अच्छी नहीं है, और Tailwind इस्तेमाल करें तो भी वह बस थोड़ा कम खराब विकल्प है
अगर frontend framework और build step इस्तेमाल कर रहे हैं, तो use case के हिसाब से Svelte और Astro अच्छे हैं। साधारण CSS से styling कर सकते हैं, और components छोटे रखें तो class names लगभग इस्तेमाल करने की जरूरत नहीं पड़ती
Element selectors इस्तेमाल करें और framework को build time पर styles scope करने दें
मैंने अपनी site पर Tailwind इस्तेमाल किया और मुझे काफी पसंद आया, हालांकि शायद आमतौर पर बताए जाने वाले कारणों से थोड़ा अलग
Tailwind की असली value यह है कि किसी element को प्रभावित करने वाले सभी styles एक जगह पढ़े जा सकते हैं
Class names लंबे हो सकते हैं, लेकिन हर बार browser developer tools खोलने या एक से ज्यादा stylesheets में ऊपर-नीचे जाने के मुकाबले एक लंबी line पढ़ना कहीं तेज है
बाद में उस code पर लौटने पर भी आप यह चिंता किए बिना confident होकर बदलाव कर सकते हैं कि कहीं किसी दूसरे element को बदल न दें
CSS का cascading स्वभाव अब भी useful है, लेकिन आमतौर पर मैं style को सिर्फ एक element तक सीमित रखना चाहता हूं। बाकी के लिए CSS पर लौटता हूं, लेकिन असल में लिखी जाने वाली CSS बहुत कम होती है। अक्सर बस spacing ठीक करनी होती है
“X कैसे करूं?” का जवाब 30 मिनट की research task नहीं, बल्कि quick docs search में मिल जाता है—यह भी अच्छा लगता है
उसके मुकाबले इस HN post में दिखे Tailwind snippets काफी डरावने लगते हैं
अगर
divमेंtext-xlजोड़ते हैं और उसके अंदर nesteddivऔरspanहैं, तो वे सभीtext-xlinherit करेंगे, इसलिए nested elements में यह देखने के लिए किtext-xlकिससे आ रहा है, आखिरकार element hierarchy में ऊपर जाना ही पड़ेगाफिर भी कुल मिलाकर यह थोड़ा आसान जरूर है
“build time में कमी”, “अब
@tailwinddirectives नहीं”, “JavaScript configuration नहीं”, “modern web के लिए designed” जैसे वाक्य ऐसे सुनाई देते हैंCSS अब वह सब कर सकता है जो हम खुद करते थे, फिर भी चलो यह दिखावा जारी रखें कि हमारी अभी भी जरूरत है
styleattribute से कम झंझट वाला और optimize करना कहीं आसान”Tailwind तो लगभग CSS से 1:1 mapping जैसा ही नहीं है?
Tailwind पसंद न होना समझ में आता है, लेकिन strawman बनाकर हमला करने के बजाय यह कहना बेहतर होगा कि Tailwind की कौन-सी बात पसंद नहीं है
दूसरे लोगों के open source project और उसे उपयोगी मानकर इस्तेमाल करने वालों को नीचा दिखाना भी अच्छा नहीं है
CSS अच्छी तरह जानने वालों से पूछना चाहता हूँ। मुझे ज्यादा नहीं पता
मैं अपना personal Phoenix project 1.7 पर upgrade कर रहा हूँ, और Phoenix अब default रूप से Tailwind इस्तेमाल करता है, इसलिए Bootstrap की जगह इसे आजमाने की सोची
अभी तक Bootstrap version “ठीक-ठाक” दिखता था, लेकिन Tailwind version बिखरा हुआ लग रहा है
designer बने बिना अच्छे दिखने वाले defaults पाने का सबसे आसान तरीका क्या है? या फिर बस Bootstrap दोबारा install करके बात खत्म कर दूँ?
Tailwind आपको design control करना हो तो tools देता है, लेकिन आखिर में design को खुद control करना पड़ता है
अगर बस अच्छा दिखना और Bootstrap जैसा feel भी ठीक है, तो Bootstrap ही सही है
theory में Tailwind के ऊपर Bootstrap को reimplement करने वाले projects हैं, जो Bootstrap जैसा starting point और Tailwind की ताकत दोनों दे सकते हैं, लेकिन practical में मैंने ऐसा कुछ नहीं देखा जो सीधे Bootstrap इस्तेमाल करने से बेहतर काम करता हो
DaisyUI docs यहाँ हैं: https://daisyui.com
Tailwind में paid components भी हैं, जिन्हें बस copy-paste करना होता है। इसकी अच्छी बात यह है कि familiar होने पर आप Flowbite components को धीरे-धीरे tweak कर सकते हैं
अगर job stability है और अलग-अलग चीज़ें छेड़ना चाहते हैं, तो Tailwind से खेल सकते हैं। trend-sensitive और loud लोग आम तौर पर Tailwind पसंद करते दिखते हैं
लेकिन अगर यह अपना project है, खुद की funding है, या deadline है, तो जिसे पहले से जानते हैं उस Bootstrap को इस्तेमाल करना और UI पर थकाऊ लड़ाई लड़ने के बजाय काम पूरा करने पर focus करना बेहतर है
Tailwind वे classes देता है जिन्हें जोड़कर components बनाने होते हैं
UI component source साथ में इस्तेमाल करें तो आसान होगा। मैंने पहले TailwindUI इस्तेमाल किया था, लेकिन वह paid था; अच्छे free alternatives भी होंगे
“Tailwind या नहीं” वाली बातचीत में एक साफ pattern है। Tailwind का जिक्र होते ही यह दोहराता है
कुछ लोग ऐसे हैं जिन्होंने इसे 30 मिनट से ज्यादा ढंग से इस्तेमाल नहीं किया, बस थोड़ी देर try किया या docs सरसरी तौर पर देखे। ये लोग Tailwind को नापसंद करते हैं और “pure CSS” जैसी चीज़ों को prefer करते हैं
दूसरी तरफ वे लोग हैं जिन्होंने इसे real projects में, एक से ज्यादा लोगों वाली teams में इस्तेमाल किया है। ये लोग value समझते हैं, trade-offs accept करते हैं, और इसे पसंद करते हैं
मैंने कई लोगों को पहले group से दूसरे group में जाते देखा है, लेकिन दूसरे से पहले में लौटते हुए बहुत कम देखा है
इसलिए Tailwind सफल हुआ है। purists की नजर में यह सुंदर न लगे, लेकिन builders और pragmatists की नजर में यह वाकई शानदार है
मैं Tailwind के खिलाफ नहीं हूँ, लेकिन अभी तक इसे न आजमाने की वजह यह है कि Web Components या React Styled Components जैसे दूसरे options की तुलना में यह बेहतर approach क्यों है, यह साफ नहीं दिखता
सबसे बड़ी समस्या यह है कि Tailwind HTML को ढेर सारी utility classes से भरकर पढ़ने और maintain करने में मुश्किल बना देता है
मैं समझता हूँ कि यह बड़े global CSS file और classic tag-name-based CSS से बेहतर है, लेकिन component-scoped CSS को global namespace दूषित किए बिना इस्तेमाल करने के तरीके पहले से मौजूद हैं। Web Components और Styled Components इसके उदाहरण हैं
दोनों styles को सीधे component, या और सामान्य रूप से कहें तो specific HTML tag groups से बाँध देते हैं, इसलिए कौन-सा style कहाँ लागू हो रहा है यह देखना आसान होता है
global class names की जरूरत नहीं होती, और unwanted side effects या conflicts की चिंता भी कम होती है। component हटाएँ तो related styles भी साथ हट जाते हैं, इसलिए unused CSS बचा रह जाने की चिंता नहीं रहती। shadow DOM की वजह से एक component के styles का दूसरे component पर अनजाने में असर पड़ने का risk भी नहीं रहता
मैं presentation styles को markup में सीधे मिलाए बिना HTML को छोटा और readable बनाए रखने को important मानता हूँ। Tailwind की तरह जब सारे styles
classattribute में चले जाते हैं, तो एक line में classes की लंबी list बन जाती है, और अगर actual class names भी साथ लिखने हों तो HTML messy हो जाता हैकौन-से styles apply हो रहे हैं, यह एक नजर में समझना मुश्किल होता है, और ठीक से indentation करना भी कठिन। यह मुझे HTML के inline
styleattribute से दूर जाने की पुरानी कई वजहें याद दिलाता हैमैं Tailwind से नफरत नहीं करता, लेकिन readability, maintainability और separation of concerns के लिहाज से Web Components या Styled Components की तुलना में इसका स्पष्ट advantage नहीं दिखता, और मेरी unresolved concerns काफी बड़ी हैं
docs पढ़े हैं लेकिन इस्तेमाल नहीं किया, और यह समझना मुश्किल है कि दूसरे options के बजाय Tailwind क्यों चुनूँ। plain HTML के बीच बहुत ज्यादा classes होना मेरे लिए दोनों को पढ़ना मुश्किल बना देता है
यह मानता हूँ कि कुछ लोग Tailwind को उपयोगी तरीके से इस्तेमाल करते हैं और productive हैं, लेकिन अब Tailwind हर जगह है, इसलिए साफ-सुथरा लेकिन आम-सा look जगह-जगह दिखता है
आम तौर पर Tailwind, सामान्य CSS की तुलना में style पर ज़्यादा बड़ा असर नहीं डालता। कुछ exceptions हैं। shadows जैसी चीज़ें थोड़ी ज़्यादा standardized हैं, और indigo color palette ने हाल में बाहर भी कुछ असर डाला है
बस लोग sites को किसी खास तरीके से design करने की ओर झुकते हैं। खासकर ShadCn के साथ इस्तेमाल करते समय ऐसा होता है
इसे कुछ वैसा ही देखता हूँ जैसे websites के font के तौर पर Inter नए Helvetica की तरह इस्तेमाल हो रहा है। अगर बहुत लोग इस्तेमाल कर रहे हैं और यह अच्छा दिखता है, तो इसे न इस्तेमाल करने की कोई खास वजह नहीं लगती
Bootstrap, Tailwind से बहुत पहले से कई utility classes देता था, जिससे काफी समय बचता था, और वह कोई खास look थोपता नहीं था
बस अपनी ज़रूरत की classes import करनी होती थीं। हाँ, अगर आपने Sass source files download नहीं की थीं तो बात अलग है, लेकिन वह मूर्खतापूर्ण विकल्प होता
इसलिए ज़्यादातर projects बहुत कम frameworks का इस्तेमाल करते हैं। अगर 4–5 और high-quality UI projects आएँ, खासकर जिनकी style direction ज़्यादा अलग हो, तो diversity बढ़ेगी
design भी कई creative कामों की तरह है, जहाँ हैरानी की बात है कि बहुत कम लोग trend तय करते हैं
काश ज़्यादा लोगों को यह पता होता। लगता है कि कुछ talented लोग “मैं बनाऊँ भी तो कोई सुनेगा नहीं” सोचकर बनाते ही नहीं होंगे
लेकिन अगर उनमें से कुछ लोग कोशिश करें, तो वे web के बड़े हिस्से के लिए नई UI possibilities खोल सकते हैं
Tailwind inline styles के फायदे दिखाने वाला प्रमाण है: यानी किसी चीज़ को नाम दिए बिना style करने का तरीका, strings की सार्वभौमिकता, और strings की सीमाएँ
आगे क्या आएगा, इसका इंतज़ार है, और तब तक अनिच्छा से Tailwind इस्तेमाल करूँगा