2010-12-14 21 views
7

Aşağıdakileri yapacak CSS önişlemcisi LESS'de bir blok yazmaya çalışıyorum:LESS CSS preprocessor: Tek bir rengin bir rgb ve rgba tanımına eşlenmesinin bir yolu var mı?

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

Standart bir hex tanımlaması (yani #rrggbb ise, rengin RGB değerini almanın bir yolu var mı?)? @Color başka bir şekilde tanımlanmışsa bunu yapmanın bir yolu var mı?

DÜZENLEME: ÇÖZÜM

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

cevap

2

Yok artık işe, ama bu bir (@Elyse sayesinde) yapar: AZ Web sitesi reklamı değil iken

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

hsla() fonksiyonu, in the source code tanımlanır. Ayrıca LDŞÖ'nün fadein/kısılması fonksiyonları ile devam edebilirsiniz

3

bu deneyin:

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

çıkarma @color alfa kanalını temizler o zaman sadece alfa kanalına istenilen @alpha ekleyin. Renkler tam işleçler grubuna sahiptir ve iki renk üzerinde çalışırken bileşenlere göre bileşen çalışırlar; renkler dahili olarak RGBA bileşenleri olarak saklanır, bu yüzden çalışması gerekir. Ayrıca, alfa kanalı [0, 1.0] aralığında olacak şekilde normalize edilir, böylece alfa kanalından 1.0 çıkarılması herhangi bir soruna yol açmadan temizlemelidir.

Şu anda CSS LESS kurulumunu kullanmıyorum, bu yüzden kontrol edemiyorum ama bu bir çekim değeri. çözümlerin

+0

@color yalnızca altıgen bir tanımlama olduğundan, önce alfa kanalının çıkarılmasına gerek yoktur. Böylece çözüm basitçe: @color + rgba (0, 0, 0, @ alfa). Geriye doğru gözüküyor ama ben hex/rgba'yı bu şekilde karıştırdığının farkında değildim. –

+0

Sadece biraz paranoyak ve alfa kanalı modifikasyonunu geleceğe karşı korumayı deniyordum, dolayısıyla alfa kanalı bilinen bir duruma zorlamak için çıkarma işlemine '@ alpha' eklenmesi alfa kanalının eşit olmasına neden oluyordu. @ alpha'. Ek bir bonus olarak, sadece biraz ayar yapmak yerine alfa kanalını atadığınızı daha net bir şekilde ortaya koyar. –

+0

En azından, az önce, alfa kanalının negatif gitmesini önlemek için bir kontrol yoktur. –

2

Not:

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

Böylece a (kırmızı, 25)RGBA bir background-color sonuçlanacaktır (255, 0, 0, 0.25)

+0

+1, Güzel olan! Not: Kesinlikle yeni LESS korumalı mixins seviyorum. : D –

2

Bunun eski bir soru olduğunu biliyorum, ancak tek yapmanız gereken bir alfa değeri eklemekse fade(@color, @alpha) kullanın. Renk altıgen, rgba veya hsla olabilir.

İlgili konular