2013-12-13 9 views
6

Ho una scatola qui - http://jsfiddle.net/U68p3/2/ - con uno sfondo trasparente. Quando ho letto lo sfondo con css di jQuery ('background-color') restituiscePerché jQuery .css ('background-color') restituisce rgba (0,0,0,0) per 'transparent'?

   rgba(0, 0, 0, 0) 

che non è molto utile se il mio codice è alla ricerca di una corrispondenza con 'trasparente'.

Perché jQuery sta facendo questo ed esiste un modo per renderlo "trasparente"?

Grazie.

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

jQuery documenti: * Browser diversi possono restituire valori di colore CSS logicamente ma non ugualmente testuali, ad esempio #FFF, #ffffff e rgb (255,255,255). * – MonkeyCoder

+1

In realtà * è necessario * una rappresentazione testuale del colore o stai solo confrontandolo con qualcos'altro? http://jsfiddle.net/mblase75/U68p3/16/ – Blazemonger

risposta

8

E non è jQuery, il valore calcolato per il colore sono rappresentati in RGBA (rosso, blu, verde, Alpha - per opacità) e non come i nomi dei colori (come il rosso, blu, arancione, trasparente, ecc) o come valori esadecimali. In base allo specs la trasparenza è rappresentata come rgb(0, 0, 0).

se il valore è traslucido, il valore calcolato sarà quello rgba() corrispondente. Se non lo è, sarà quello corrispondente a rgb(). La parola chiave trasparente si associa a rgb (0,0,0).

Così, invece di ricerca di questo valore specifico è possibile aggiungere una regola CSS specifica solo per includere la trasparenza e aggiungere quella classe all'elemento e utilizzare .hasClass o .is di quella classe per verificare se l'elemento è trasparente.

Sembra che diversi browser lo rappresentino in diversi modi, IE, FF fornisce il valore come transparency quindi è comunque meglio non fare affidamento su questa rappresentazione del valore per nessuna logica.

+0

* "il valore calcolato per il colore è rappresentato in RGB e non nella rappresentazione del testo" * La notazione 'rgb' ** è ** una notazione testuale. Ma hai ragione, non è jQuery. –

+0

@ T.J.Crowder Dico intendo (rosso, arancione, trasparente ecc.) per rappresentazione testuale – PSL

+0

Si noti inoltre che l'OP sta parlando di 'rgba', non di' rgb'. –

2

Non è possibile ottenere il colore come nome direttamente da jQuery.

Puoi invece usare il plugin jQuery Color (https://github.com/jquery/jquery-color) per convertire il valore nel suo nome, o fare manualmente qualcosa di simile.

Un esempio di utilizzare il jsFiddle

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

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

4

Non è jQuery. jQuery restituisce ciò che il browser gli assegna per il valore calcolato (ad esempio, da getComputedStyle o currentStyle). Ciò che il browser dà potrebbe essere in qualsiasi forma di notazione che il browser voglia utilizzare. In questo caso, il browser su cui stai eseguendo il test utilizza rgba (rosso, verde, blu, "alpha"   — ad esempio, opacità, 0 = trasparente), che è una notazione abbastanza buona. Altri browser potrebbero usare solo rgb o anche stringhe di colore esadecimale, il che sarebbe sfortunato poiché nessuno di questi può rappresentare correttamente transparent.

+0

vedi 'transparent' in FF – PSL

+0

@PSL: Sì, ecco qua - dipende dal browser. –

+0

Completamente ... :) Quindi sempre non fare affidamento sullo specifico valore calcolato corretto .. – PSL