CSS को संगठित और स्केल करना

एक नई परियोजना पर पहली स्टाइलशीट लिखना एक आनंद है। कुछ सौ लाइनों में, कुछ बदल जाता है: आप एक बटन का रंग बदलते हैं और तीन अन्य बटन भी बदल जाते हैं, एक शीर्षक तब तक हिलता नहीं है जब तक आप इसके आगे !important पेस्ट नहीं करते, और हर नया नियम महसूस होता है कि वह एक पुराने को तोड़ सकता है। CSS स्वयं अभी भी सही है। जो समाप्त हो गया है वह इसे पकड़ने वाली संरचना है, और यह संरचना, सिंटैक्स नहीं, यह तय करती है कि क्या कोई स्टाइलशीट हजार लाइनों पर या सौ हजार पर काम करने योग्य रहती है।
CSS को स्केल करना क्यों मुश्किल हो जाता है
CSS डिफ़ॉल्ट रूप से वैश्विक है। आप जो हर नियम लिखते हैं वह पृष्ठ पर कहीं भी किसी भी मेल खाने वाले तत्व तक पहुंच सकता है। p { color: navy; } लिखें और पूरी परियोजना में हर अनुच्छेद नीले रंग का हो जाता है, भले ही आप उन सभी को नहीं चाहते हों। एक छोटे पृष्ठ पर यह सुविधाजनक है। जैसे-जैसे परियोजना बढ़ती है, यह अधिकांश परेशानी का मूल है।
समस्या नियमों के टकराने के रूप में दिखाई देती है। दो स्टाइलशीट दोनों p को लक्षित करते हैं, या एक सामान्य नियम और एक विशिष्ट नियम दोनों एक ही तत्व पर लागू होते हैं, और अब आपको यह पता लगाना होगा कि कौन जीतता है। आपने CSS कैसे काम करता है में इस तंत्र को देखा: ब्राउज़र विशिष्टता और क्रम द्वारा संघर्षों को हल करता है। CSS को अच्छी तरह से स्केल करना ज्यादातर पहली जगह में उन संघर्षों को नहीं बनाने के बारे में है।
/* एक वैश्विक नियम पृष्ठ पर हर अनुच्छेद तक पहुँचता है */
p {
color: navy;
}
/* एक दूसरा नियम, कहीं और, समान तत्वों के लिए प्रतिस्पर्धा कर रहा है */
.notice p {
color: crimson; /* .notice के अंदर जीतता है: अधिक विशिष्ट */
}विशिष्टता को कम और समतल रखें
सबसे उपयोगी आदत कक्षाओं के साथ शैली देना है, और ज्यादातर एक बार में एक कक्षा। .card जैसी कक्षा लागू करने में तेज़, पुन: प्रयोग करने योग्य है, और बाद में ओवरराइड करना दर्दनाक है यदि आपको चाहिए, क्योंकि एक एकल वर्ग विशिष्टता का एक कम, सौम्य स्तर है।
समस्या दो चीजों से आती है: आईडी और चयनकर्ताओं की लंबी चेनें। #header जैसी आईडी एक वर्ग की तुलना में ओवरराइड करना बहुत कठिन है, और .sidebar ul li a जैसी चेन एक सटीक संरचना के लिए बंधी हुई है। सादा वर्ग पसंद करें जिसे आप कहीं भी रख सकते हैं:
/* पसंद करें: एक एकल वर्ग, कम और समतल */
.nav-link {
color: navy;
}
/* बचें: एक आईडी, बाद में ओवरराइड करना कठिन */
#nav-link {
color: navy;
}
/* बचें: एक गहरी चेन, नाजुक और उच्च विशिष्टता */
.sidebar nav ul li a {
color: navy;
}.card या .nav-link। एक एकल वर्ग पुन: उपयोग करने में तेज़ है और बाद में ओवरराइड करना दर्दनाक है, जो वास्तव में आप चाहते हैं। #header जैसी आईडी और .sidebar ul li a जैसी लंबी चेनों से दूर रहें, क्योंकि दोनों बदलने के लिए बहुत कठिन हैं। एक नामकरण परंपरा
एक बार जब आप कक्षाओं के साथ शैली दे रहे हैं, तो अगला सवाल यह है कि उन्हें क्या कहना है। .blue या .thing2 जैसे नाम तेज़ी से अलग हो जाते हैं, क्योंकि वे कुछ नहीं कहते कि कक्षा किस लिए है। एक नामकरण परंपरा कक्षाओं का नाम देने का एक सहमत तरीका है ताकि नाम आपको बताता है कि एक कक्षा क्या करता है और यह कहां है।
व्यापक रूप से उपयोग किया जाने वाला को BEM कहा जाता है, जो ब्लॉक, एलिमेंट, संशोधक के लिए खड़ा है। एक ब्लॉक एक कार्ड जैसा एक घटक है। एक तत्व इसके अंदर एक हिस्सा है, दो अंडरस्कोर के साथ लिखा गया है। एक संशोधक एक भिन्नता है, दो डैश के साथ लिखा गया है:
/* ब्लॉक: घटक स्वयं */
.card { }
/* एलिमेंट: ब्लॉक का एक हिस्सा, दो अंडरस्कोर */
.card__title { }
.card__body { }
/* संशोधक: ब्लॉक की एक भिन्नता, दो डैश */
.card--featured { }<article class="card card--featured">
<h2 class="card__title">सप्ताहांत कार्यशाला</h2>
<p class="card__body">लेआउट की एक संक्षिप्त शुरुआत।</p>
</article>.card, इसके अंदर एक तत्व जैसे .card__title दो अंडरस्कोर के साथ, और एक संस्करण जैसे .card--featured दो डैश के साथ। आपको BEM का उपयोग करना नहीं है, लेकिन कुछ सुसंगत स्कीम चुनें और इसके अनुसार रहें। फाइलों को संरचित करना
जैसे-जैसे एक स्टाइलशीट बढ़ता है, एक लंबी फाइल इसके चारों ओर घूमना कठिन हो जाता है। आम सुधार CSS को कुछ फोल्डरों में विभाजित करना है जो नियमों के द्वारा क्या करते हैं: आधार शैलियां (सादे तत्वों जैसे शरीर और शीर्षकों के लिए डिफ़ॉल्ट), घटक (कार्ड, बटन, और अन्य टुकड़े), और उपयोगिताएं (छोटी एकल-उद्देश्य सहायक जैसे दूरी या पाठ-संरेखण वर्ग)।
एक विस्तृत जब आप फाइलें विभाजित करते हैं: जो आदेश आप उन्हें लोड करते हैं। जब दो नियमों की विशिष्टता समान होती है, तो जो बाद में आता है वह जीतता है, इसलिए एक बाद में लोड की गई स्टाइलशीट एक पहले को ओवरराइड कर सकती है। अपनी फाइलों को सबसे सामान्य से सबसे विशिष्ट में लोड करें:
/* main.css: आदेश सबसे कम से सबसे विशिष्ट तक जाता है */
@import "base/reset.css"; /* तत्व डिफ़ॉल्ट */
@import "base/typography.css";
@import "components/card.css"; /* स्व-निहित टुकड़े */
@import "components/button.css";
@import "utilities/spacing.css"; /* अंतिम में लोड किया गया इसलिए वे ओवरराइड कर सकते हैं */
@import "utilities/text.css";कैस्केड को स्पष्ट करना
अब तक सब कुछ परंपरा के माध्यम से कैस्केड को प्रबंधनीय रखता है: कम विशिष्टता, अच्छे नाम, सावधान फाइल क्रम। यहां जाने पर और अधिक है, और यात्रा की दिशा जानना सार्थक है। आधुनिक CSS आपको सीधे एक फाइल में बैठने के क्रम पर निर्भर करने के बजाय सीधे आदेश देने पर नियंत्रण लेने देता है, और यह आपको ऐसे तरीके देता है जो कैस्केड को अनुमानित रखते हैं क्योंकि अधिक लोग एक ही स्टाइलशीट पर काम करते हैं। आप इन उपकरणों को अपनी परियोजनाओं के बढ़ने के साथ पूरा करेंगे, और ऊपर की आदतें वह हैं जो आपको उनके लिए तैयार करते हैं।

