Opacity CSS non funziona in IE8


143

Sto usando CSS per indicare il testo del trigger per una sezione a discesa jQuery: ovvero quando passi con il mouse sul testo del trigger, il cursore si trasforma in un puntatore e l'opacità del testo del trigger si riduce per indicare che il testo ha un'azione clic .

Funziona bene su Firefox e Chrome, ma in IE8 l'opacità non cambia.

Ho provato una varietà di impostazioni CSS senza successo.

Per esempio

HTML:

<h3 class="slidedownTrigger">This is the trigger text</h3>

CSS:

.slidedownTrigger
{
    cursor: pointer;
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
    filter: alpha(opacity=75);
    -khtml-opacity: 0.75;
    -moz-opacity: 0.75;
    opacity: 0.75;
}

Cosa impedisce a IE di modificare l'opacità? Nota: ho provato questo su una varietà di elementi diversi, scambiando attorno all'ordine delle istruzioni CSS e usando solo quelle di IE da sole. Ho anche provato a usare

-ms-filter: "alpha(opacity=75)";

ma senza successo.

Ho finito le cose per provare a far funzionare l'opacità in IE8.

Qualche idea?


Questa domanda correlata / duplicata ha la tua risposta, penso. stackoverflow.com/questions/859000/opacity-in-web-pages
Jeff Martin

Ho visto questa domanda: il problema è la risposta: <br> <br> & nbsp; & nbsp; filtro: alfa (opacità = 50); / * internet explorer / <br> & nbsp; & nbsp; opacità: 0,5; / fx, safari, opera, chrome * / <br> & nbsp; & nbsp; -ms filtro: "progid: DXImageTransform.Microsoft.Alpha (opacità = 50)"; / * IE8 * / <br> <br> non funziona per me (ho appena provato di nuovo a ricontrollare). L'ho applicato a un h3 che era nero e audace. In Firefox e Chrome l'impostazione dell'opacità rende l'intestazione grigia, come ci si aspetterebbe, ma in IE8 rimane nera.

oops - non ho realizzato che non puoi usare l'HTML nei commenti - ma penso che puoi vedere cosa sto cercando di dire

se provi quegli stili solo su un div a tinta unita funzionano? forse c'è qualche altro CSS in corso che è in conflitto.
Jeff Martin,

Ben fatto. Sì, quando faccio un semplice div, gli conferisco un'altezza e una larghezza e uno sfondo di colore rosso, con quelle impostazioni di opacità, funziona in IE8. Esce semi-opaco. Faccio fatica a vedere qual è il problema. Non sto modificando l'opacità di qualsiasi altra cosa nel foglio di stile, quindi non riesco a pensare a cosa potrebbe essere in conflitto con esso solo per IE.

Risposte:


65

Non ho idea se questo vale ancora per 8, ma storicamente IE non applica diversi stili agli elementi che non "hanno layout".

vedi: http://www.satzansatz.de/cssd/onhavinglayout.html


9
IE non applica diversi stili agli elementi che non "hanno layout".
Azeem, ma il

4
Grande! Grazie. Questo era il problema. Gli elementi per cui cercavo di regolare l'opacità (ad es. H3) non "avevano layout". Una volta che avevo dato loro un po ', l'opacità ha funzionato. Tutto quello che ho fatto è stato aggiungere larghezza: 100%; alla h3. Grazie per avermi indicato nella giusta direzione. Tuttavia, sembra folle (se non buggy) che Internet Explorer lo fa.

51
IE non applica molti stili a molti elementi.
Danwellman,

1
@danwellman e poi fa anche molte altre cose "divertenti". Sìì.
Dudewad,

È interessante notare che IE7 non ha bisogno del 'layout ”. Sto usando un'immagine di sfondo reattiva su un elemento con altezza zero padding-bottom: 100%e in IE8 l'opacità non ha avuto effetto fino a quando non ho impostato l'altezza esplicita. IE7 non ha bisogno di questo.
Kout,

158

L'impostazione di questi (esattamente come ho scritto) mi è servito quando ne avevo bisogno:

-moz-opacity: 0.70;
opacity:.70;
filter: alpha(opacity=70);

6
Grazie, credo "filtro: alfa (opacità = 70);" è per IE <8. Tuttavia, non funziona (per me) in IE8 (ho appena controllato). -moz-opacity ora è praticamente defunto, credo, e l'opacità è il modo standard di fare le cose - quindi, naturalmente, Microsoft non ha usato quel modo di fare le cose (troppo facile).

15
Basta impostare l '"opacità" e il "filtro" come descrivi per farlo funzionare in FF4 e IE8. -moz-opacità non era necessario.
demoncodemonkey

1
@Gabriel McAdams: filtro: alfa (opacità = 70); ha funzionato (ma solo in IE 8)
Poonam Bhatt il

@Gabriel Che ha funzionato a meraviglia! Non avrò più problemi di opacità in IE 7/8!
MJCoder,

1
Informazioni più specifiche: in realtà è dissolvenza nel metodo che rimuove la trasparenza.
tmorell,

49

Devi prima impostare Opacity per i browser conformi agli standard, quindi le varie versioni di IE. Vedi esempio:

ma questo codice di opacità non funziona in ie8

.slidedownTrigger
{
    cursor: pointer;
    opacity: .75; /* Standards Compliant Browsers */
    filter: alpha(opacity=75); /* IE 7 and Earlier */
    /* Next 2 lines IE8 */
    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=75)";
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=75);
}

Nota che ho eliminato -moz poiché Firefox è un browser conforme agli standard e quella linea non è più necessaria. Inoltre, -khtml è deprezzato, quindi ho eliminato anche quello stile.

Inoltre, i filtri di IE non verranno convalidati secondo gli standard di w3c, quindi se si desidera che la pagina venga convalidata, separare il foglio di stile degli standard dal foglio di stile di IE utilizzando un'istruzione if IE come di seguito:

<!--[if IE]>
<link rel="stylesheet" type="text/css"  href="http://www.mysite.com/css/ie.css" />
<![endif]-->

Se separi le stranezze ie, il tuo sito verrà validato bene.


3
Basta impostare l '"opacità" e il "filtro" come descrivi per farlo funzionare in FF4 e IE8. La sezione denominata "/ * Next 2 righe IE8 * /" non era necessaria.
demoncodemonkey

3
@demoncodemonkey: corretto. Tutto dipende dalla versione installata. Se vuoi la massima compatibilità, ti suggerisco tutti.
Kevin Florida,

Corretto, ma: "Per garantire che gli utenti di Internet Explorer 7 e 8 sperimentino il filtro, è possibile includere entrambe le sintassi sopra elencate. A causa di una peculiarità nel nostro parser, è necessario includere la sintassi aggiornata prima della sintassi precedente affinché il filtro funzioni correttamente in Visualizzazione compatibilità (Questo è un bug noto e verrà risolto alla versione finale di IE8). Ecco un esempio di foglio di stile CSS: "(fonte: link )
zrathen

@Kevin "Se vuoi la massima compatibilità, ti consiglio tutti". Bene, allora non avresti dovuto rimuovere -moz-opacity, giusto?
Spettrale

Le virgolette non sono necessarie per -ms-filter.
thdoan

17

Apparentemente la trasparenza alfa funziona solo su elementi a livello di blocco in IE 8. Imposta display: blocco.


17

Utilizzando display: inline-block;funziona su IE8 per risolvere questo problema.

FWIW, opacity: 0.75funziona su tutti i browser conformi agli standard.


5

CSS

Usavo i seguenti trucchi CSS :

.transparent_class {
  /* IE 8 */
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";

  /* IE 5-7 */
  filter: alpha(opacity=50);

  /* Netscape */
  -moz-opacity: 0.5;

  /* Safari 1.x */
  -khtml-opacity: 0.5;

  /* Good browsers */
  opacity: 0.5;
}

Bussola

Tuttavia, una soluzione migliore è utilizzare il mixin Opacity Compass , tutto ciò che devi fare è @include opacity(0.1);occuparti di tutti i problemi del browser. Puoi trovare un esempio qui .



2

Nessuna delle risposte sopra ha funzionato per me, quindi ho appena dato al mio tag DIV un'immagine di sfondo trasparente, che ha funzionato perfettamente per tutti i browser.


1

Questo codice funziona

filter: alpha(opacity = 50); zoom:1;

Devi aggiungere la proprietà zoom per farlo funzionare :)


1

È inoltre possibile aggiungere un polyfil per abilitare l'utilizzo di opacità nativa in IE6-8.

https://github.com/bladeSk/internet-explorer-opacity-polyfill

Questo è un polyfil autonomo che non richiede jQuery o altre librerie. Esistono diversi piccoli avvertimenti che non opera su stili in linea e per tutti i fogli di stile che necessitano di opacità polifilati devono aderire alla politica di sicurezza della stessa origine.

L'utilizzo è semplicissimo

<!--[if lte IE 8]>
    <script src="jquery.ie-opacity-polyfill.js"></script>
<![endif]-->

<style>
    a.transparentLink { opacity: 0.5; }
</style>

<a class="transparentLink" href="#"> foo </a>
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.