Opacità dello sfondo CSS con rgba non funzionante in IE 8


110

Sto usando questo CSS per l'opacità dello sfondo di un <div>:

background: rgba(255, 255, 255, 0.3);

Funziona bene in Firefox, ma non in IE 8. Come posso farlo funzionare?

Risposte:


73

Crea un png più grande di 1x1 pixel (grazie a trenta punti) e che corrisponda alla trasparenza del tuo sfondo.

EDIT: per tornare al supporto IE6 +, puoi specificare bkgd chunk per il png, questo è un colore che sostituirà la vera trasparenza alfa se non è supportata. Puoi aggiustarlo con gimp ad es.


2
Sì. rgba()i valori di colore non sono supportati in IE 8.
Paul D. Waite,

11
Per evitare un potenziale problema, utilizzare qualsiasi formato diverso 1x1: stackoverflow.com/questions/7764751/...
thirtydot

43
Sarebbe accettabile nel 2003, ma non nel 2013. O usate -ms-filter per un supporto in qualche modo simulato nel vecchio IE, o, meglio ancora, ignoratelo. Le persone che utilizzano IE8 meritano di essere punite non vedendo il raggio del bordo, lo sfondo trasparente, ecc.
Evgeny

21
@EugeneXa Lavoro per i miei clienti, non il contrario. Se usano IE8, allora lo supporto. Punire i potenziali clienti non è un buon affare.
Eli

14
@EugeneXa È più vicino al 10% sui miei siti e spesso sono buoni clienti. Non esiste un'unica risposta giusta qui. Fai i conti e scopri cosa funziona per te. Anche il 6% potrebbe essere enorme per alcuni siti! Nessun utente merita di essere punito. Penso che rimpiangerai questo atteggiamento.
Eli

241

per simulare lo sfondo RGBA e HSLA in IE, puoi utilizzare un filtro sfumato, con lo stesso colore iniziale e finale (il canale alfa è la prima coppia nel valore di HEX)

background: rgba(255, 255, 255, 0.3); /* browsers */
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#4cffffff', endColorstr='#4cffffff'); /* IE */

2
funziona a meraviglia, tranne che sfortunatamente sembra smettere di funzionare se l'elemento viene nascosto dinamicamente e mostrato nuovamente usando jQuery ...
jackocnr

Il filtro rgba IE è stato molto utile e sono stato in grado di risolvere il
problema

Qual è l'opacità di 0,6 per il filtro?
Si8

10
Codici esadecimali per la trasparenza (la prima coppia) può essere trovato qui: ( stackoverflow.com/questions/15852122/hex-transparency-in-colors )
user1794295

2
C'è una calcolatrice per quei valori esadecimali personalizzati di IE!
nietonfir

14

Credo che questo sia il migliore perché in questa pagina c'è uno strumento per aiutarti a generare uno sfondo trasparente alfa:

" Cross browser alpha transparent background CSS (rgba) " (* ora collegato a archive.org)

#div {
    background:rgb(255,0,0);
    background: transparent\9;
    background:rgba(255,0,0,0.3);
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4cFF0000,endColorstr=#4cFF0000);
    zoom: 1;
}

E ricorda di utilizzare sempre il colore esadecimale RGBA nel filtro: eq # 004F80 è # ed004F80
user956584

9

l'immagine png trasparente non funzionerà in IE 6-, le alternative sono:

con CSS:

.transparent {

    /* works for IE 5+. */
    filter:alpha(opacity=30); 

    /* works for IE 8. */
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";

    /* works for old school versions of the Mozilla browsers like Netscape Navigator. */
    -moz-opacity:0.3; 

    /* This is for old versions of Safari (1.x) with KHTML rendering engine */
    -khtml-opacity: 0.3; 

    /* This is the "most important" one because it's the current standard in CSS. This will work in most versions of Firefox, Safari, and Opera. */  
    opacity: 0.3; 
}

o fallo semplicemente con jQuery:

// a crossbrowser solution
$(document).ready(function(){ 
    $(".transparent").css('opacity','.3');
});

24
L'alfa dello sfondo non è uguale all'opacità (non rende trasparente anche l'elemento figlio).
Alexey Smolyakov

1
Questo non è né una risposta alla domanda né il CSS applicato tramite jQuery (o JavaScript in generale) una soluzione crossbrowser.
mystrdat

7

Anche se in ritardo, ho dovuto usarlo oggi e ho trovato uno script php molto utile qui che ti consentirà di creare dinamicamente un file png, proprio come funziona rgba.

background: url(rgba.php?r=255&g=100&b=0&a=50) repeat;
background: rgba(255,100,0,0.5);

Lo script può essere scaricato qui: http://lea.verou.me/wp-content/uploads/2009/02/rgba.zip

So che potrebbe non essere la soluzione perfetta per tutti, ma in alcuni casi vale la pena prenderla in considerazione, poiché consente di risparmiare molto tempo e funziona perfettamente. Spero che aiuti qualcuno!


2
Come funziona? L'URL rgba.php è richiesto solo dai browser che non lo supportano rgba? O viene sempre richiesto da tutti gli utenti e semplicemente non viene mostrato?
Darren Cook

La mia speranza è che il browser veda automaticamente il secondo sfondo e ignori il primo, prima di tentare di effettuare una richiesta. Ma questa è al massimo un'ipotesi plausibile.
Girevole

7

Ci sono per lo più tutti i browser che supportano il codice RGBa in CSS, ma solo IE8 e il livello inferiore non supporta il codice RGBa css. Per questo ecco la soluzione. Per la soluzione devi seguire questo codice ed è meglio seguire la sua sequenza altrimenti non otterrai un output perfetto come desideri. Questo codice è usato da me ed è per lo più perfetto. fai un commento se è perfetto.

.class
 {
        /* Web browsers that does not support RGBa */
        background: rgb(0, 0, 0);
        /* IE9/FF/chrome/safari supported */
        background: rgba(0, 0, 0, 0.6);
        /* IE 8 suppoerted */
        /* Here some time problem for Hover than you can use background color/image */
        -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#88000000, endColorstr=#88000000)";
        /* Below IE7 supported */
        filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#88000000, endColorstr=#88000000);
 }

5

Usa css per cambiare l'opacità. Per far fronte a IE avresti bisogno di qualcosa come:

.opaque {
    opacity : 0.3;
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=30)";
    filter: alpha(opacity=30);
}

Ma l'unico problema con questo è che significa che qualsiasi cosa all'interno del contenitore avrà anche un'opacità di 0,3. Quindi dovrai cambiare il tuo HTML per avere un altro contenitore, non all'interno di quello trasparente, che contiene il tuo contenuto.

Altrimenti la tecnica png funzionerebbe. Tranne che avresti bisogno di una correzione per IE6, che di per sé potrebbe causare problemi.


4
haha tipico caso di un browser che non si comporta come gli altri, e ogni versione di quel browser non si comporta come altre versioni dello stesso browser ... solo Microsoft potrebbe raggiungere questo obiettivo con così tanto successo ...
ClarkeyBoy

3
@ Paul D. Waite: Ci sono molte, molte funzionalità che i browser offrono oltre al modo in cui visualizzano i contenuti. Deviare dalle specifiche non è (o non dovrebbe essere) una caratteristica.
Bobby Jack

@Paul D.Waite: Ok capisco il tuo punto, ma quello che voglio dire è che le diverse versioni di IE si comportano in modo così diverso che mi ritrovo a dover creare un diverso foglio di stile per ogni versione ... Ho fogli di stile diversi per IE6, 7 e 8 ... eppure ho solo un foglio di stile per tutti i FF / Chrome / Opera / Safari. @ Bobby Jack: Distaccato ...
ClarkeyBoy

@ Bobby: certo, ma IE 8 non si discosta dagli standard più di IE 7 o IE 6, sicuramente?
Paul D. Waite

@ ClarkeyBoy: certo. Trovo che il mio foglio di stile IE 8 sia molto più semplice del mio foglio di stile IE 6. IE è il più strano dei browser, ma si sta lentamente allineando agli altri. Firefox non supportava rgba()fino alla versione 3 e Opera non lo supportava fino alla versione 10.
Paul D. Waite,


2

Per utilizzare lo rgbasfondo in IE è disponibile un fallback.

Dobbiamo usare la proprietà del filtro. che usaARGB

    background:none;
    -ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#33ffffff,endColorstr=#33ffffff);
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#33ffffff,endColorstr=#33ffffff);
    zoom: 1;

questo è il fallback per rgba(255, 255, 255, 0.2)

Cambia #33ffffffsecondo il tuo.

Come calcolare ARGBperRGBA


Ho sempre cercato quel convertitore da ARGB a RGBA, grazie! web.archive.org/web/20131207234608/http://kilianvalkhof.com/…
Justin

1

questo ha funzionato per me per risolvere il problema in IE8:

-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=1)";

Saluti


1

Questa soluzione funziona davvero, provala. Testato in IE8

.dash-overlay{ 
   -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4C000000,endColorstr=#4C000000)"; 
}

0

È molto semplice che devi dare prima devi dare il backgound come rgb perché Internet Explorer 8 supporterà rgb invece rgba e poi devi dare opacità come filter:alpha(opacity=50);

background:rgb(0,0,0);
filter:alpha(opacity=50);

0

Questa è una soluzione di trasparenza per la maggior parte dei browser, incluso IE x

.transparent {
    /* Required for IE 5, 6, 7 */
    /* ...or something to trigger hasLayout, like zoom: 1; */
    width: 100%; 

    /* Theoretically for IE 8 & 9 (more valid) */   
    /* ...but not required as filter works too */
    /* should come BEFORE filter */
    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";

    /* This works in IE 8 & 9 too */
    /* ... but also 5, 6, 7 */
    filter: alpha(opacity=50);

    /* Older than Firefox 0.9 */
    -moz-opacity:0.5;

    /* Safari 1.x (pre WebKit!) */
    -khtml-opacity: 0.5;

    /* Modern!
    /* Firefox 0.9+, Safari 2?, Chrome any?
    /* Opera 9+, IE 9+ */
    opacity: 0.5;
}

0

La migliore soluzione che ho trovato finora è quella proposta da David J Marland nel suo blog , per supportare l'opacità nei vecchi browser (IE 6+):

.alpha30{
    background:rgb(255,0,0); /* Fallback for web browsers that don't support RGBa nor filter */ 
    background: transparent\9; /* backslash 9 hack to prevent IE 8 from falling into the fallback */
    background:rgba(255,0,0,0.3); /* RGBa declaration for browsers that support it */
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4cFF0000,endColorstr=#4cFF0000); /* needed for IE 6-8 */
    zoom: 1; /* needed for IE 6-8 */
}

/* 
 * CSS3 selector (not supported by IE 6 to IE 8),
 * to avoid IE more recent versions to apply opacity twice
 * (once with rgba and once with filter)
 */
.alpha30:nth-child(n) {
    filter: none;
}

0

Dopo aver cercato molto, ho trovato la seguente soluzione che funziona nei miei casi:

.opacity_30{
    background:rgb(255,255,255); /* Fallback for web browsers that don't support neither RGBa nor filter */ 
    background: transparent\9; /* Backslash 9 hack to prevent IE 8 from falling into the fallback */
    background:rgba(255,255,255,0.3); /* RGBa declaration for modern browsers */
    -ms-filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4CFFFFFF,endColorstr=#4CFFFFFF); /* IE 8 suppoerted; Sometimes Hover issues may occur, then we can use transparent repeating background image :( */
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#4CFFFFFF,endColorstr=#4CFFFFFF); /* needed for IE 6-7 */
    zoom: 1; /* Hack needed for IE 6-8 */
}

/* To avoid IE more recent versions to apply opacity twice (once with rgba and once with filter), we need the following CSS3 selector hack (not supported by IE 6-8) */
.opacity_30:nth-child(n) {
    filter: none;
}

* Importante: per calcolare ARGB (per IE) da RGBA, possiamo utilizzare strumenti online:

  1. https://kilianvalkhof.com/2010/css-xhtml/how-to-use-rgba-in-ie/
  2. http://web.archive.org/web/20131207234608/http://kilianvalkhof.com/2010/css-xhtml/how-to-use-rgba-in-ie/
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.