आप एक मौजूदा रंग मान नहीं ले सकते हैं और इसे एक अल्फा चैनल लागू कर सकते हैं। अर्थात्, आप एक मौजूदा हेक्स मान नहीं ले सकते हैं #f0f0f0
, जैसे कि इसे एक अल्फा घटक दें और परिणामी मान को किसी अन्य गुण के साथ उपयोग करें।
हालाँकि, कस्टम गुण आपको अपने हेक्स मान को उपयोग के लिए RGB तिगुनी में परिवर्तित करने की अनुमति देते हैं rgba()
, उस मूल्य को कस्टम प्रॉपर्टी (अल्पविराम सहित!) में स्टोर करते हैं, उस मान को अपने इच्छित अल्फ़ा मान के साथ उपयोग var()
करते हुए प्रतिस्थापित करते हैं rgba()
, और यह सिर्फ काम:
:root {
/* #f0f0f0 in decimal RGB */
--color: 240, 240, 240;
}
body {
color: #000;
background-color: #000;
}
#element {
background-color: rgba(var(--color), 0.8);
}
<p id="element">If you can see this, your browser supports custom properties.</p>
यह सच होने के लिए लगभग बहुत अच्छा लगता है। 1 यह कैसे काम करता है?
जादू इस तथ्य में निहित है कि कस्टम गुणों के मूल्यों को प्रतिस्थापित किया जाता है जैसे कि संपत्ति के मूल्य var()
में संदर्भों की जगह लेते हैं, इससे पहले कि संपत्ति के मूल्य की गणना की जाती है। इसका मतलब यह है कि जहां तक कस्टम गुणों का संबंध है, --color
आपके उदाहरण का मूल्य तब तक रंग मूल्य नहीं है जब तक कि एक var(--color)
अभिव्यक्ति कहीं दिखाई नहीं देती है जो एक रंग मूल्य (और केवल उस संदर्भ में) की अपेक्षा करता है। से खंड 2.1 सीएसएस-चर कल्पना की:
कस्टम गुणों के लिए अनुमत सिंटैक्स अत्यंत अनुमत है। <घोषणा-मूल्य> उत्पादन एक या एक से अधिक टोकन के किसी भी क्रम से मेल खाता है, इसलिए जब तक कि अनुक्रम में </ string-token>, <bad-url-token>, बेजोड़ <) नहीं है - token>,]] - टोकन>, या <} - टोकन>, या शीर्ष-स्तर <अर्धविराम-टोकन> टोकन या <delim-token> "के मूल्य के साथ टोकन"!
उदाहरण के लिए, निम्नलिखित एक मान्य कस्टम संपत्ति है:
--foo: if(x > 5) this.width = 10;
हालांकि यह मान एक चर के रूप में स्पष्ट रूप से बेकार है, क्योंकि यह किसी भी सामान्य संपत्ति में अमान्य होगा, इसे जावास्क्रिप्ट द्वारा पढ़ा और कार्य किया जा सकता है।
और धारा 3 :
यदि किसी गुण में एक या अधिक var () फ़ंक्शंस होते हैं, और वे फ़ंक्शन सिंटैक्टिक रूप से मान्य होते हैं, तो संपूर्ण प्रॉपर्टी के व्याकरण को पार्स समय पर मान्य होना चाहिए। यह केवल गणना-मूल्य समय पर सिंटैक्स-चेक किया गया है, बाद में var () फ़ंक्शन को प्रतिस्थापित किया गया है।
इसका मतलब यह है कि 240, 240, 240
आपके द्वारा ऊपर देखा गया मूल्य घोषित किए जाने से पहले सीधे rgba()
फ़ंक्शन में प्रतिस्थापित हो जाता है। तो यह:
#element {
background-color: rgba(var(--color), 0.8);
}
जो पहले सीएसएस वैध प्रतीत नहीं होता है क्योंकि यह rgba()
उम्मीद करता है कि कम से कम चार अल्पविराम से अलग-अलग संख्यात्मक मान इस प्रकार नहीं बनेंगे:
#element {
background-color: rgba(240, 240, 240, 0.8);
}
जो निश्चित रूप से, सीएसएस पूरी तरह से वैध है।
इसे एक कदम आगे बढ़ाते हुए, आप अल्फा घटक को अपनी कस्टम संपत्ति में संग्रहीत कर सकते हैं:
:root {
--color: 240, 240, 240;
--alpha: 0.8;
}
और इसे एक ही परिणाम के साथ प्रतिस्थापित करें:
#element {
background-color: rgba(var(--color), var(--alpha));
}
यह आपको अलग-अलग अल्फा वैल्यू देता है जिसे आप ऑन-द-फ्लाई को स्वैप कर सकते हैं।
1 ठीक है, यह है, अगर आप एक ब्राउज़र में कोड स्निपेट चला रहे हैं जो कस्टम गुणों का समर्थन नहीं करता है।