2013-12-13 17 views
6

Mam tu pudełko - http://jsfiddle.net/U68p3/2/ - z przezroczystym tłem. Kiedy czytam tło z .css jQuery („background-color”) zwracaDlaczego jQuery .css ("kolor tła") zwraca rgba (0,0,0,0) dla "przezroczystego"?

   rgba(0, 0, 0, 0) 

który nie jest bardzo pomocne, jeśli mój kod szuka meczu z „przezroczysty”.

Dlaczego robi to jQuery i czy istnieje sposób, aby sprawić, by zwracał "przezroczysty"?

Dzięki.

$(function() { 
    var bkgnd = $('#box').css('background-color'); 
    console.log('background-color is ' + bkgnd); 
}); 
+3

jQuery docs: * Różne przeglądarki mogą zwracać wartości kolorów CSS, które są logiczne, ale nie są równe tekstowo, np. #FFF, #ffffff i rgb (255,255,255). * – MonkeyCoder

+1

Czy rzeczywiście * potrzebujesz * tekstowej reprezentacji koloru czy po prostu porównujesz to do czegoś innego? http://jsfiddle.net/mblase75/U68p3/16/ – Blazemonger

Odpowiedz

8

To nie jest jQuery, wartość obliczona dla koloru są reprezentowane w RGBA (czerwony, niebieski, zielony, Alpha - za krycie), a nie jako nazwy kolorów (jak czerwony, niebieski, pomarańczowy, przezroczysty etc) lub jako wartości szesnastkowe. Według przezroczystości specs przezroczystość jest reprezentowana jako rgb(0, 0, 0).

jeśli wartość jest półprzezroczysta, obliczoną wartością będzie odpowiadająca wartość rgba(). Jeśli tak nie jest, będzie to odpowiadający mu rgb(). Przejrzyste mapy słów kluczowych do rgb (0,0,0).

Więc zamiast szukać tej konkretnej wartości można dodać konkretną regułę CSS tylko to przejrzystość i dodać tę klasę do elementu i wykorzystać .hasClass lub .is tej klasy, aby sprawdzić, czy element jest przejrzyste.

Wygląda na to, że różne przeglądarki reprezentują go na różne sposoby, IE, FF podaje wartość jako transparency, więc lepiej jest nie polegać na tej reprezentacji wartości dla dowolnej logiki.

+0

* "obliczona wartość koloru jest reprezentowana w RGB, a nie w reprezentacji tekstowej" * Notacja 'rgb' ** jest ** notacją tekstową. Ale masz rację, to nie jest jQuery. –

+0

@ T.J.Crowder Prawo mam na myśli (czerwony, pomarańczowy, przezroczysty itp ..) przez reprezentację tekstową – PSL

+0

Należy również zauważyć, że PO mówi o 'rgba', a nie' rgb'. –

2

Nie można uzyskać koloru jako nazwy bezpośrednio z jQuery.

Zamiast tego można użyć wtyczki jQuery Color (https://github.com/jquery/jquery-color), aby przekonwertować wartość na jej nazwę lub ręcznie zrobić coś podobnego.

Przykładem używania jsFiddle

$(function() { 
    var bkgnd = $('#box').css('background-color'); 
    console.log('background-color is ' + jQuery.Color(bkgnd).toString()); 
}); 

(http://jsfiddle.net/Ap6qD/1/)

4

To nie jest jQuery. jQuery zwraca to, co przeglądarka podaje dla obliczonej wartości (np. z getComputedStyle lub currentStyle). To, co daje przeglądarka, może być w dowolnej formie zapisu, której chce użyć przeglądarka. W tym przypadku przeglądarka, na której testujesz, używa rgba (czerwony, zielony, niebieski, "alpha"   — np. Krycie, 0 = przezroczysty), co jest całkiem niezłą notacją. Inne przeglądarki mogą po prostu używać rgb lub nawet ciągów kolorów w formacie szesnastkowym, co byłoby niefortunne, ponieważ żadna z nich nie może prawidłowo reprezentować wartości transparent.

+0

Co ciekawe, zobacz 'transparent' w FF – PSL

+0

@PSL: Yup, proszę bardzo - to zależy od przeglądarki. –

+0

Całkowicie ... :) Tak więc zawsze nie polegać na konkretnej obliczonej wartości .. – PSL