टेलविंड से दूर जा रहा हूं, और अपने सीएसएस की संरचना करना सीख रहा हूं

टेलविंड से दूर जा रहा हूं, और अपने सीएसएस की संरचना करना सीख रहा हूं


नमस्ते! 8 साल पहले, मैंने टेलविंड की खोज के बारे में उत्साहपूर्वक लिखा था।

उस समय मुझे वास्तव में पता नहीं था कि अपने सीएसएस कोड को कैसे संरचित किया जाए और पूर्ण अराजकता और टेलविंड के ढेर के बीच विकल्प को देखते हुए, मैं टेलविंड को चुनने में वास्तव में खुश था। इससे मुझे बहुत सी छोटी-छोटी साइटें बनाने में मदद मिली!

मैंने पिछला सप्ताह लगभग कुछ साइटों को टेलविंड से दूर और अधिक अर्थपूर्ण HTML + वेनिला सीएसएस की ओर स्थानांतरित करने में बिताया, और यह बहुत मजेदार और बहुत दिलचस्प था, इसलिए यहां कुछ चीजें हैं जो मैंने सीखीं!

हमेशा की तरह मैं एक पूर्णकालिक फ्रंटएंड डेवलपर नहीं हूं और इसलिए मेरी सभी सीएसएस सीख कई वर्षों में फिट और स्टार्ट में हुई है।

यह पता चला कि टेलविंड ने मुझे बहुत कुछ सिखाया

जब मैंने सीएसएस की संरचना के बारे में सोचना शुरू किया, तो पहले तो मैं डर गया: मैं अपनी सीएसएस की संरचना करने में बहुत अच्छा नहीं हूँ! लेकिन फिर मैंने सीएसएस की संरचना कैसे करें (जैसे परतों का एक पूरा झरना या 2024 में मैं सीएसएस कैसे लिखता हूं) के बारे में बात करते हुए ब्लॉग पोस्ट पढ़ना शुरू किया और मुझे कुछ चीजों का एहसास हुआ:

  1. प्रत्येक सीएसएस कोड बेस में विभिन्न चीजों का एक समूह होता है (लेआउट! फ़ॉन्ट! रंग! सामान्य घटक!)
  2. इनमें से प्रत्येक चीज़ को प्रबंधित करने के लिए सिस्टम या दिशानिर्देशों का होना बेहद उपयोगी है, अन्यथा चीज़ें अराजकता में बदल जाती हैं
  3. टेलविंड के पास इनमें से कुछ के लिए सिस्टम हैं, और मैं उन सिस्टमों को पहले से ही जानता हूँ! शायद मैं उन प्रणालियों की नकल कर सकता हूँ जो मुझे पसंद हैं!

उदाहरण के लिए, टेलविंड में:

जिन प्रणालियों के बारे में मैं बात करने जा रहा हूँ

मैं अपने सीएसएस कोडबेस के कुछ पहलुओं और अपने अब तक के विचारों के बारे में बात करने जा रहा हूं कि मैं प्रत्येक के लिए कोडबेस पर किस तरह के नियम लागू करना चाहता हूं। उनमें से कुछ को टेलविंड से कॉपी किया गया है और कुछ को नहीं।

  1. रीसेट करें
  2. अवयव
  3. रंग
  4. फ़ॉन्ट आकार
  5. उपयोगिता वर्ग
  6. आधार
  7. अंतर
  8. उत्तरदायी आकार
  9. निर्माण प्रणाली

1. रीसेट करें

मैंने अभी-अभी टेलविंड की “प्रीफ्लाइट शैलियों” की नकल की है tailwind.css और पहली 200 पंक्तियों की नकल करना।

मैंने देखा कि समय के साथ मैंने टेलविंड के सीएसएस रीसेट के साथ एक रिश्ता विकसित किया है, उदाहरण के लिए टेलविंड सेट box-sizing: border-box प्रत्येक तत्व पर (जिसका अर्थ है कि किसी तत्व की चौड़ाई में उसकी पैडिंग शामिल है):

* { box-sizing: border-box; }

मुझे लगता है कि इनके बिना सीएसएस लिखने पर स्विच करना मेरे लिए एक वास्तविक समायोजन होगा, और मुझे यकीन है कि टेलविंड रीसेट में कई अन्य चीजें हैं (जैसे)
html {line-height: 1.5;}) मैं अवचेतन रूप से इसका आदी हो गया हूं और मुझे इसका एहसास भी नहीं है।

2. घटक

यह अगला भाग सीएसएस का बड़ा हिस्सा है!

यहां विचार सीएसएस को “घटकों” द्वारा व्यवस्थित करने का है, इस तरह से जो आध्यात्मिक रूप से Vue या React घटकों से संबंधित हो। (हालाँकि साइट पर वास्तव में कोई जावास्क्रिप्ट नहीं हो सकती है)

मूलतः विचार यह है कि:

  1. प्रत्येक “घटक” का एक अद्वितीय वर्ग होता है
  2. एक घटक के लिए सीएसएस कभी भी किसी अन्य घटक के लिए सीएसएस को ओवरराइड नहीं करता है
  3. प्रत्येक घटक की अपनी सीएसएस फ़ाइल होती है

इसलिए एक घटक के लिए सीएसएस को संपादित करने से दूसरे घटक में रहस्यमय तरीके से कुछ नहीं टूटेगा। और संभवतः 80% सीएसएस जिसे मैं वास्तव में बदलना चाहता हूं वह विभिन्न घटक फ़ाइलों में है, इसलिए यदि मैं 100-पंक्ति घटक को संपादित कर रहा हूं, तो मुझे बस उन 100 पंक्तियों के बारे में सोचना होगा। मेरे लिए इसके बारे में सोचना बहुत आसान है।

उदाहरण के लिए, यह HTML हो सकता है .zine “अवयव”।

और नेस्टेड चयनकर्ताओं का उपयोग करते हुए सीएसएस कुछ इस तरह दिखता है:

.zine {
  ...
  &.horizontal {
    ...
  }
  &.vertical {
    ...
  }
  &:hover {
    ...
  }
}

मैंने कुछ भी प्रोग्रामेटिक (जैसे वेब घटक या @स्कोप) नहीं किया है जो यह सुनिश्चित करता है कि घटक एक-दूसरे के साथ हस्तक्षेप नहीं करेंगे, लेकिन सिर्फ एक सम्मेलन करना और अपना सर्वश्रेष्ठ प्रयास करना पहले से ही एक बड़े सुधार की तरह लगता है।

अगला: साइट पर कुछ स्थिरता बनाए रखने और इन घटकों को एक-दूसरे के अनुरूप रखने के लिए परंपराएँ!

3. रंग

colours.css इसमें इस तरह के बहुत सारे वेरिएबल हैं जिनका मैं आवश्यकतानुसार उपयोग कर सकता हूं। रंग वास्तव में कठिन है और मैं इस रिफैक्टर में रंग के उपयोग पर दोबारा गौर नहीं करना चाहता था, इसलिए मैंने इसे अकेला छोड़ दिया।

एकमात्र दिशानिर्देश जिसे मैं यहां लागू करने का प्रयास कर रहा हूं वह यह है कि साइट में उपयोग किए गए सभी रंग इस फ़ाइल में सूचीबद्ध हैं।

:root {
  --pink: #fea0c2;
  --pink-light: #F9B9B9;
  --red: #f91a55;
  --orange: rgb(222, 117, 31);
  ...
}

4. फ़ॉन्ट आकार

टेलविंड के बारे में एक बात जिसकी मैंने सराहना की, वह यह थी कि यदि मैं एक फ़ॉन्ट आकार सेट करना चाहता था, तो मैं सिर्फ यह सोच सकता था कि “हम्म, मैं चाहता हूं कि टेक्स्ट बड़ा हो”, लिखें text-lgऔर इसके साथ काम पूरा करें! और शायद अगर यह पर्याप्त बड़ा नहीं है तो मैं इसका उपयोग करूंगा xl या 2xl बजाय। यह याद रखने की कोई कोशिश नहीं है कि मैं उपयोग कर रहा हूं या नहीं em या px या rem.

इसलिए मैंने टेलविंड से लिए गए वेरिएबल्स के एक समूह को इस तरह परिभाषित किया:

  --size-xs: 0.75rem;
  --line-height-xs: 1rem;

  --size-sm: 0.875rem;
  --line-height-sm: 1.25rem;

फिर अगर मैं फ़ॉन्ट आकार सेट करना चाहता हूं, तो मैं इसे इस तरह कर सकता हूं। यह टेलविंड की तुलना में थोड़ा अधिक क्रियात्मक है लेकिन मैं अभी इससे खुश हूं।

h3 {
  font-size: var(--size-lg);
  line-height: var(--line-height-lg);
}

5. उपयोगिताएँ

बटन जैसी कुछ चीजें हैं जो कई अलग-अलग घटकों में दिखाई देती हैं। मैं इन्हें “उपयोगिताएँ” कह रहा हूँ।

मैंने टेलविंड से कुछ उपयोगिता कक्षाएं कॉपी कीं (जैसे .sr-only उन चीज़ों के लिए जो केवल स्क्रीनरीडर उपयोगकर्ताओं के लिए दिखाई देनी चाहिए)।

यह अनुभाग काफी छोटा है और मैं यहां परिवर्तन करने में सावधानी बरतने का प्रयास करता हूं।

6. आधार

“आधार” शैलियाँ वे शैलियाँ हैं जो पूरी साइट पर लागू होती हैं जिन्हें मैंने स्वयं चुना है। मुझे इस अनुभाग को वास्तव में छोटा रखना होगा क्योंकि मैं पूरी साइट पर बहुत सारी शैलियों को लागू करने के लिए पर्याप्त आश्वस्त नहीं हूं। ये केवल दो ही हैं जिनके बारे में मुझे अभी ठीक लगता है, और मैं इन्हें बदल सकता हूँ

एक:

/* put a 950px column in the middle of each 
*/ section { --inner-width: 950px; padding: 3rem max(1rem, (100% - var(--inner-width))/2); } a { color: var(--orange); }

मुझे लगता है कि आधार शैलियों के लिए मेरे लिए नीचे से ऊपर की तरह काम करना सबसे आसान होगा – पहले आधार शैलियों में लगभग कुछ भी नहीं के साथ शुरुआत करें, और फिर घटकों से कुछ शैलियों को आधार शैलियों में ले जाएं क्योंकि मैं उन सामान्य चीजों की पहचान करता हूं जो मैं चाहता हूं।

7. रिक्ति

मैंने अभी तक पैडिंग और मार्जिन के प्रबंधन के लिए पूरी तरह से कोई दृष्टिकोण तैयार नहीं किया है। मैं निश्चित रूप से टेलविंड में इसे करने के तरीके से अधिक सैद्धांतिक होने की कोशिश कर रहा हूं, जहां मैं हर जगह बेतरतीब ढंग से पैडिंग और मार्जिन डालूंगा जब तक कि यह वैसा न दिखे जैसा मैं चाहता था।

फिलहाल मैं बाहरी लेआउट घटकों को यथासंभव रिक्ति का प्रभारी बनाने की दिशा में काम कर रहा हूं। उदाहरण के लिए यदि मेरे पास ए

बच्चों के एक समूह के साथ मैं चाहता हूं कि उनके बीच में जगह हो, मैं बच्चों को समान रूप से जगह देने के लिए इसका उपयोग कर सकता हूं:

section > *+* {
  margin-top: 1rem;
}

कुछ प्रेरणा ब्लॉग पोस्ट:

8. प्रतिक्रियाशील डिज़ाइन: अधिक ग्रिड का उपयोग करें!

जिस तरह से मैं टेलविंड में रिस्पॉन्सिव डिज़ाइन कर रहा था वह बहुत सारे मीडिया प्रश्नों का उपयोग करना था। टेलविंड के पास यह है md:text-xl वाक्यविन्यास जिसका अर्थ है “लागू करें text-xl
साइज़ में स्टाइल md या बड़ा”

मैं अब कुछ बिल्कुल अलग करने की कोशिश कर रहा हूं, जो कि अधिक लचीले सीएसएस ग्रिड लेआउट बनाना है जिसके लिए अधिक ब्रेकप्वाइंट की आवश्यकता नहीं है। यह कठिन है लेकिन ग्रिड के साथ क्या संभव है, इसके बारे में सीखना वाकई दिलचस्प है, और यह उस चीज़ का एक अच्छा उदाहरण है जो मुझे नहीं लगता कि टेलविंड के साथ संभव है।

उदाहरण के लिए, मैं उपयोग करने के तरीके के बारे में सीख रहा हूं auto-fit बड़ी स्क्रीन पर 2 कॉलम और छोटी स्क्रीन पर 1 कॉलम का स्वचालित रूप से इस तरह उपयोग करने के लिए:

  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 400px), max-content));
  justify-content: center;

मैंने भी प्रयोग किया grid-template-areas बहुत कुछ जो एक अद्भुत सुविधा है और मुझे नहीं लगता कि आप टेलविंड के साथ इसका उपयोग कर सकते हैं।

कुछ प्रेरणा:

9. बिल्ड सिस्टम: esbuild

विकास में, मुझे किसी बिल्ड सिस्टम की आवश्यकता नहीं है: सीएसएस में अब दोनों अंतर्निहित आयात विवरण हैं, जैसे:

@import "reset.css";
@import "typography.css";
@import "colors.css";

और नेस्टेड चयनकर्ताओं में इस तरह बनाया गया है:

.page {
  h2 { ...}
}

अगर मैं चाहूं तो इस्तेमाल कर सकता हूं esbuild उत्पादन के लिए सीएसएस फ़ाइल को बंडल करने के लिए। वो कुछ इस तरह दिखता है.

esbuild style.css --bundle --loader:.svg=dataurl  --loader:.woff2=file --outfile=/tmp/out.css

भले ही मैं आमतौर पर सीएसएस और जेएस बिल्ड सिस्टम का उपयोग करने से बचता हूं, मुझे ईएसबिल्ड (जिसके बारे में मैंने यहां 2021 में लिखा था) का उपयोग करने में कोई आपत्ति नहीं है क्योंकि यह वेब मानकों पर आधारित है और क्योंकि यह एक स्थिर गो बाइनरी है।

टेलविंड से दूर क्यों पलायन करें?

कुछ लोगों ने पूछा कि मैं टेलविंड से दूर क्यों जा रहा हूं। योगदान देने वाले कुछ कारक हैं:

  • 2018 के बाद से टेलविंड बिल्ड सिस्टम पर बहुत अधिक निर्भर हो गया है, मुझे लगता है कि बिल्ड सिस्टम का उपयोग किए बिना टेलविंड के नए संस्करणों का उपयोग करना असंभव (?) है। इसलिए मैं वर्षों से टेलविंड v2 का उपयोग कर रहा हूं। (स्पष्ट रूप से लाइटविंड भी है)
  • यह हमेशा सत्य रहा है कि आपको बिल्ड सिस्टम के साथ टेलविंड का उपयोग करना चाहिए, लेकिन मैंने वास्तव में ऐसा कभी नहीं किया है, इसलिए मेरे पास 2.8 एमबी है tailwind.min.css
    मेरी कई परियोजनाओं में फ़ाइलें (270K gzipped) हैं और यह थोड़ा मूर्खतापूर्ण लगता है।
  • जब मैंने टेलविंड का उपयोग करना शुरू किया था तब की तुलना में मैं सीएसएस में बहुत बेहतर हूं
  • अंततः टेलविंड सीमित है: यदि आप अपने सीएसएस में अजीब चीजें करना चाहते हैं, तो टेलविंड के साथ यह हमेशा संभव नहीं है। वे सीमाएँ बेहद उपयोगी हो सकती हैं (इस पोस्ट का अधिकांश हिस्सा मेरे द्वारा टेलविंड की कुछ सीमाओं को फिर से लागू करने के बारे में है!) लेकिन इस बिंदु पर मैं चुनने और चुनने में सक्षम होना चाहूँगा।
  • मुझे ऐसी साइटें मिलीं, जिनमें वेनिला सीएसएस और टेलविंड दोनों को एक ही प्रोजेक्ट में मिलाया गया था और जिसे बनाए रखना मजेदार नहीं था
  • मुझे यह जानने की उत्सुकता हुई कि अधिक सिमेंटिक HTML लिखना कैसा लगेगा।

सीएसएस सुविधाओं के बारे में मुझे उत्सुकता है

ऐसा करते समय मैंने बहुत सी सीएसएस सुविधाओं के बारे में सीखा जिनका मैंने उपयोग नहीं किया था लेकिन मैं एक दिन इनके बारे में जानने के लिए उत्सुक हूं:

एक आखिरी कारण जिससे मैं टेलविंड से दूर चला गया

मैं इस पोस्ट में इस बारे में बहुत सारी बातें कर रहा हूं कि मैंने टेलविंड का उपयोग करके क्या सीखा, और यह सब सच है।

लेकिन मैंने 3 साल पहले टेलविंड और सीएसएस की स्त्रीत्व नामक यह पोस्ट पढ़ी थी जो वास्तव में मेरे साथ चिपक गई। ईमानदारी से कहूं तो शायद मैंने सीएसएस के प्रति एक दृष्टिकोण के साथ शुरुआत की थी, जैसा कि उस पोस्ट में बताया गया है:

उन्होंने सुना है कि यह आसान है, इसलिए वे मानते हैं कि यह आसान है। लेकिन फिर जब वे इसका इस्तेमाल करने की कोशिश करते हैं तो यह काम नहीं करता। यह भाषा की गलती होगी, क्योंकि वे जानते हैं कि वे चतुर हैं, और यह आसान माना जाता है।

लेकिन पिछले 10 वर्षों में मैंने एक तकनीक के रूप में सीएसएस से वास्तव में प्यार करना और उसका सम्मान करना सीख लिया है।

इसलिए मैंने वर्षों पहले निर्णय लिया था कि मैं सीएसएस में बेहतर होकर और इसका अवमूल्यन करने के बजाय इसे एक तकनीक के रूप में गंभीरता से लेकर “सीएसएस कठिन है” पर प्रतिक्रिया देना चाहता हूं। ऐसा करने से मेरे लिए सब कुछ बदल गया: मुझे पता चला कि मेरी बहुत सारी निराशाएँ (“केंद्रित होना असंभव है”) को सीएसएस में बहुत समय पहले संबोधित किया गया था, और यह भी कि “केंद्रित” का मतलब हमेशा सीधा नहीं होता है और यह समझ में आता है कि इसे करने के कई तरीके हैं। सीएसएस कठिन है क्योंकि यह एक कठिन समस्या का समाधान कर रहा है!

मैं पिछले 10-15 वर्षों में बनाए गए नए सीएसएस फीचर्स से बहुत प्रभावित हुआ हूं (जिनमें से कुछ के बारे में मैंने इस पोस्ट में बात की है!) और वे कैसे सीएसएस का उपयोग करना आसान बनाते हैं, और अपने सीएसएस कौशल को बेहतर बनाने के लिए समय बिताना वास्तव में एक अच्छा अनुभव रहा है।

और उस पोस्ट ने मुझे ऐसा महसूस कराया कि टेलविंड सीएसएस विशेषज्ञता के अवमूल्यन में योगदान देता है, और यह ऐसी चीज नहीं है जिसका मैं हिस्सा बनना चाहता हूं, भले ही टेलविंड मेरे लिए व्यक्तिगत रूप से एक उपयोगी उपकरण रहा हो। विशेष रूप से एलएलएम के इस समय में जहां इंसानों की विशेषज्ञता को महत्व देना पहले से कहीं अधिक महत्वपूर्ण लगता है।

टेलविंड की आलोचना करने वाली एक अन्य ब्लॉग पोस्ट ने मुझे प्रभावित किया:

अभी के लिए इतना ही!

मेलोडी स्टार्लिंग को धन्यवाद, जिन्होंने मूल रूप से wizardzines.com के लिए सीएसएस डिजाइन और लिखा था, साइट के बारे में सब कुछ अच्छा और मजेदार है, मेलोडी को धन्यवाद।

इसके अलावा, इस पर काम करते समय मैंने सीएसएस के बारे में बहुत सारे अविश्वसनीय ब्लॉग पोस्ट पढ़े (सीएसएस ट्रिक्स, स्मैशिंग मैगज़ीन और अन्य से), मैंने उनमें से कुछ को इस पोस्ट में लिंक करने का प्रयास किया है और मैं वास्तव में सराहना करता हूं कि सीएसएस समुदाय के लोग अपनी प्रथाओं को कितना साझा करते हैं।



Source link

Postagens Similares

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *