कस्टम प्रॉपर्टीज़ और आधुनिक CSS

आप एक ब्रैंड नीला चुनते हैं, इसे चालीस अलग-अलग नियमों में टाइप करते हैं, और साइट को शिप करते हैं। एक महीने बाद मार्केटिंग थोड़ा अलग नीला चाहती है। अब आप हर स्टाइलशीट को खोज रहे हैं, आशा कर रहे हैं कि आप सभी चालीस को पकड़ें और दो को मिस न करें जो बड़े अक्षर से लिखे गए थे। कस्टम प्रॉपर्टीज़ इसे ठीक करती हैं: आप रंग का नाम एक बार रखते हैं, नाम को हर जगह उपयोग करते हैं, और इसे एक जगह बदलते हैं। यह एकल आदत थीमिंग, डिज़ाइन टोकन, और स्टाइलशीट की शुरुआत है जो एक रीडिज़ाइन से बचती हैं।
एक वेरिएबल की घोषणा और उपयोग
एक कस्टम प्रॉपर्टी एक मान है जिसे आप एक नाम देते हैं ताकि आप इसे पुनः उपयोग कर सकें। आप नाम को दो डैश के साथ लिखते हैं, इसे एक मान पर सेट करते हैं, और बाद में var() के साथ इसे वापस पढ़ते हैं:
:root {
--color-brand: #2563eb; /* मान को एक बार घोषित करें, एक नाम के तहत */
}
.button {
background: var(--color-brand); /* इसे यहां वापस पढ़ें */
}
.link {
color: var(--color-brand); /* और यहां, समान मान */
}--color-brand नाम है (दो डैश आवश्यक हैं), और var(--color-brand) यह है कि आप इसे कैसे उपयोग करते हैं। इसे :root पर घोषित करना (जो <html> तत्व है, पृष्ठ के शीर्ष पर) नाम को हर जगह उपलब्ध करता है। :root पर एक पंक्ति बदलें और हर नियम जो इसे पढ़ता है वह अपडेट हो जाता है।
--color-brand, फिर var(--color-brand) के साथ इसे पढ़ें। इसे :root पर रखें ताकि पूरा पृष्ठ इसका उपयोग कर सके। एक पंक्ति बदलें और हर नियम जो नाम को पढ़ता है वह इसके साथ अपडेट होता है। वे कैस्केड और इनहेरिट करते हैं
यदि आपने किसी अन्य भाषा में वेरिएबल का उपयोग किया है, तो यह अगला भाग आश्चर्य है: एक कस्टम प्रॉपर्टी निश्चित नहीं है। यह किसी भी अन्य CSS प्रॉपर्टी के समान नियमों का पालन करता है, जिसका अर्थ है कि यह इनहेरिट करता है बाल तत्वों में, और आप बाकी को छुए बिना एक जगह इसे एक अलग मान दे सकते हैं।
:root {
--color-text: #1f2937; /* पूरे पृष्ठ के लिए डिफ़ॉल्ट */
}
.callout {
--color-text: #92400e; /* एक अलग मान, केवल .callout के अंदर */
color: var(--color-text);
}
p {
color: var(--color-text); /* आमतौर पर गहरा भूरा, कॉलआउट के अंदर एम्बर */
}समान var(--color-text) आपको अधिकांश पैराग्राफ में गहरा भूरा देता है लेकिन कॉलआउट के अंदर एम्बर, क्योंकि कॉलआउट ने अपना स्वयं का मान सेट किया। यह वह है जो थीमिंग को संभव बनाता है, और आपने कैसे CSS काम करता है में इसके पीछे कैस्केड देखा है।
var(--color-text) अधिकांश पैराग्राफ में भूरा और कॉलआउट के अंदर एम्बर हो सकता है। एक कंटेनर पर नाम को पुनः परिभाषित करें और इसके अंदर सब कुछ नया मान लेता है। फॉलबैक और calc()
var() एक दूसरा मान ले सकता है, केवल तभी उपयोग किया जाता है जब कस्टम प्रॉपर्टी कभी सेट नहीं की गई थी। यह फॉलबैक है, और यह एक नियम को काम कर रहा रखता है भले ही एक टोकन गायब हो:
.card {
gap: var(--gap, 1rem); /* --gap का उपयोग करें यदि यह मौजूद है, अन्यथा 1rem */
}आप calc() का उपयोग करके एक कस्टम प्रॉपर्टी के साथ गणित भी कर सकते हैं। यदि आपके पास एक बेस स्पेसिंग मान है, तो आप दूसरी संख्या को हार्ड-कोड करने के बजाय इससे एक बड़ा मान बना सकते हैं:
:root {
--space-md: 16px;
}
.section {
padding: calc(var(--space-md) * 2); /* 32px, बेस से प्राप्त */
}इस तरह मानों को प्राप्त करने का अर्थ है कि --space-md में एक परिवर्तन इसके शीर्ष पर बनाई गई हर चीज़ के माध्यम से लहरें।
var(--gap, 1rem) मौजूद हो तो टोकन का उपयोग करता है और 1rem तक गिरता है यदि वह नहीं है, इसलिए एक नियम तब काम करता रहता है जब एक मान गायब है। और calc() आपको एक टोकन से मान बनाने देता है, जैसे calc(var(--space-md) * 2) दोगुने आधार स्पेसिंग के लिए। आधार को बदलें और इसके शीर्ष पर बनाई गई हर चीज़ अनुसरण करती है। थीमिंग
क्योंकि एक कस्टम प्रॉपर्टी को पेड़ के नीचे पुनः परिभाषित किया जा सकता है, आप एक क्लास के तहत टोकन बदलकर एक गहरी थीम बना सकते हैं, और हर घटक नियम को अकेला छोड़ सकते हैं:
:root {
--color-bg: #ffffff;
--color-text: #1f2937;
}
.theme-dark {
--color-bg: #0f172a; /* समान नाम, नए मान */
--color-text: #e2e8f0;
}
body {
background: var(--color-bg);
color: var(--color-text);
}पृष्ठ में class="theme-dark" जोड़ें और हर नियम जो --color-bg या --color-text को पढ़ता है गहरे मानों को हल्का करता है। आपने body नियम को कभी छुआ नहीं, या कोई घटक, थीम स्विच बनाने के लिए। यह रंग को टोकन के रूप में नाम देने के बजाय सीधे हेक्स कोड लिखने की तुलना में पेऑफ़ है।
.theme-dark जैसी क्लास के तहत विभिन्न मानों वाले समान टोकन नाम है। class="theme-dark" सेट करें और हर नियम जो उन टोकन को पढ़ता है हल्का करता है, एक घटक को संपादित किए बिना। यही कारण है कि आप हर नियम में सीधे हेक्स कोड टाइप करने के बजाय अपने रंगों को टोकन के रूप में नाम देते हैं। 
