2010-12-14 14 views
7

मैं सीएसएस प्रीप्रोसेसर कम में एक ब्लॉक लिखने की कोशिश कर रहा हूं जो निम्न कार्य करेगा:कम सीएसएस प्रीप्रोसेसर: क्या एक रंग को आरजीबी और आरजीबीए परिभाषा में मैप करने का कोई तरीका है?

@transparent_background(@color; @alpha: .8) 
{ 
    background: @color; 
    background: rgba(<color R value>, <color G value>, <color B value>, @alpha); 
} 

अगर आरजीबी मानों को @color से बाहर निकालने का कोई तरीका है यदि यह एक मानक हेक्स परिभाषा है (यानी #rrggbb)? क्या ऐसा करने का कोई तरीका है यदि @color को किसी अन्य तरीके से परिभाषित किया गया है?

संपादित करें: समाधान

@transparent_background(@color; @alpha: .8) 
{ 
    background: @color; 
    background: @color + rgba(0, 0, 0, @alpha); 
} 

उत्तर

2

समाधान में से कोई भी अब काम है, लेकिन यह एक (@Elyse करने के लिए धन्यवाद) करता है:

.alpha(@color, @alpha: 0.8) { 
    color: @color; 
    color: hsla(hue(@color), saturation(@color), lightness(@color), @alpha); 
} 

hsla() समारोह है, जबकि कम वेबसाइट में विज्ञापित नहीं, in the source code परिभाषित किया गया है।

3

इस प्रयास करें:

background: @color - rgba(0, 0, 0, 1.0) + rgba(0, 0, 0, @alpha); 

घटाव @color पर अल्फ़ा चैनल साफ हो जाएगा तो आप अल्फ़ा चैनल के लिए वांछित @alpha जोड़ें। रंगों में ऑपरेटरों का पूरा सूट होता है और वे दो रंगों पर काम करते समय घटक द्वारा घटक काम करते हैं; रंग आंतरिक रूप से आरजीबीए घटकों के रूप में संग्रहीत होते हैं इसलिए यह काम करना चाहिए। इसके अलावा, अल्फा चैनल को अंतराल [0, 1.0] में सामान्यीकृत किया गया है, इसलिए अल्फा चैनल से 1.0 को घटाना किसी भी समस्या के बिना इसे साफ़ करना चाहिए।

मेरे पास अभी सीएसएस कम सेट नहीं है इसलिए मैं जांच नहीं कर सकता लेकिन यह एक शॉट के लायक है।

+0

चूंकि @color सिर्फ एक हेक्स परिभाषा है, पहले अल्फा चैनल को घटाने की आवश्यकता नहीं है। तो समाधान बस था: @color + rgba (0, 0, 0, @alpha)। पूर्वदर्शी में स्पष्ट लगता है लेकिन मुझे एहसास नहीं हुआ कि आप हेक्स/आरजीबीए को इस तरह मिला सकते हैं। –

+0

मैं थोड़ा सा भयावह था और अल्फा चैनल संशोधन के भविष्य के सबूत की कोशिश कर रहा था, इसलिए अल्फा चैनल को एक ज्ञात स्थिति में मजबूर करने के लिए घटाव ताकि इसमें 'अल्फा' जोड़ना अल्फा चैनल के बराबर होगा ' @ alpha'। एक अतिरिक्त बोनस के रूप में यह स्पष्ट करता है कि आप इसे थोड़ा समायोजित करने के बजाय अल्फा चैनल असाइन कर रहे हैं। –

+0

कम से कम कम से कम, अल्फा चैनल को नकारात्मक होने से रोकने के लिए कोई जांच नहीं है। –

2

ध्यान दें कि आप भी कम की fadein/fadeout कार्यों के साथ आगे बढ़ सकते हैं:

.alpha(@color, @alpha: 80) 
{ 
    background-color: fadeout(@color, (100 - @alpha)); 
} 

इस प्रकार, .alpha (लाल, 25)RGBA की एक पृष्ठभूमि रंग में परिणाम होगा (255, 0, 0, 0.25)

+0

+1, अच्छा है! पीएस: मैं बिल्कुल नए कम संरक्षित mixins प्यार करता हूँ। : डी –

2

मुझे पता है कि यह एक पुराना सवाल है, लेकिन यदि आप जो करना चाहते हैं वह अल्फा मान जोड़ना है तो बस fade(@color, @alpha) का उपयोग करें। रंग हेक्स, आरजीबीए या एचएसएलए में हो सकता है।

संबंधित मुद्दे