2013-05-09 19 views
6

ich nur mit dem RGBA() Manipulation in jQuery IE 8rgba() funktioniert nicht in IE8

Bisher habe ich mit hochnäsig haben diese:

$('.set').click(function (e) { 
     var hiddenSection = $('div.hidden'); 
     hiddenSection.fadeIn() 
     .css({ 'display': 'block' }) 
     .css({ width: $(window).width() + 'px', height: $(window).height() + 'px' }) 
     .css({ top: ($(window).height() - hiddenSection.height())/2 + 'px', 
      left: ($(window).width() - hiddenSection.width())/2 + 'px' 
     }) 
     .css({ 'background-color': 'rgba(0,0,0,0.5)' }) //Problem here in IE8 
     .appendTo('body'); 
     $('span.close').click(function() { $(hiddenSection).fadeOut(); }); 
}); 

Es funktioniert in allen anderen Browsern, Don Ich weiß nicht, warum es in IE 8 fehlgeschlagen ist Ich habe diesen Fehler!

Invalid property value in jquery.min.js.

Jede Hilfe wird sehr geschätzt!

Dank

+2

RGBA wird nicht in IE8 arbeiten, weil es neu in CSS ist. Sie könnten ein PNG24 verwenden, das leicht transparent ist, würde es in IE8 funktionieren. – Andrew

+3

Für die Zukunft: http://caniuse.com/ hilft wirklich viel dabei. –

Antwort

10

Einfache Antwort: IE8 unterstützen Eigenschaften RGBA nicht. Es weiß nur über RGB.

RGBA-Unterstützung wurde nur in IE9 hinzugefügt.

Andere sehr alte Browser haben möglicherweise keine Unterstützung für RGBA. Es gibt jedoch nicht viele alte Browser, die noch verwendet werden, außer IE8.

Es gibt einige Möglichkeiten, wie Sie dieses Problem umgehen könnte:

  • ein polyfill verwenden wie CSS3Pie. Dadurch können Sie RGBA-Hintergrundfarben in Ihrem CSS angeben. Sie können es immer noch nicht direkt in JS-Code verwenden, wie Sie es haben, aber Sie könnten die Klasse ändern, um damit umzugehen.

  • Verwenden Sie ein Tool wie Modernizr, um festzustellen, ob der Browser diese Funktion unterstützt, und stellen Sie eine andere Funktionalität bereit, wenn dies nicht der Fall ist.

  • Verwenden Sie IE8 -ms-filter Stil, um den Transparenzeffekt zu erzielen. Auf diese Weise können Sie eine Reihe von Spezialeffekten einschließlich der Opazität einstellen. Dies ist eine nicht standardmäßige IE-Funktion und wird in IE9/10 durch Standard-CSS ersetzt, ist aber in bestimmten Fällen für ältere IE-Versionen immer noch nützlich.

  • Verwenden Sie stattdessen ein kleines PNG-Bild mit einem Alphakanal als Hintergrund. Es ist eine Schande, heutzutage ein Hintergrundbild für einen einfarbigen Hintergrund zu verwenden, aber es wird das Ergebnis erzielen, das Sie in allen Browsern suchen.

+0

Richtig. Ich wundere mich. OP könnte rgba() und gleichzeitig IE-Alternative für die Gradienteneigenschaft verwenden? Filter: progid: DXImageTransform.Microsoft.gradient (startColorstr = # VALOR, endColorstr = # VALOR); – Fico

+0

IE8 (fehlgeschlagen), veröffentlicht am 19. März 2009. FF3 (Werke), veröffentlicht am 17. Juni 2008_. Safari 3 (funktioniert), veröffentlicht am 11. Juni 2007_. Google Chrome (alle, Werke), veröffentlicht am 2. September 2008_. ([Quelle] (http://css-tricks.com/rgba-browser-support/)) –

+0

@PaulS. - Wow, ist Chrome wirklich so alt? es fühlt sich an wie gestern. hmm, jetzt hast du * mich * alt gemacht :-( – Spudley

0

Sie haben einen Tippfehler. Es sollte sein:

rgba(0,0,0,0.5) 

Sie haben den 'a' Teil vermisst.

Allerdings bin ich mir nicht sicher, IE8 unterstützt rgba() ... dann wieder, hat jQuery möglicherweise einen Wrapper dafür?

Um sicher zu sein, würde ich versuchen, ein Hintergrundbild im PNG-Format, das Transparenz hat.

.css({ 'background-image': 'http://example.com/myimage.png' }) 

Mikey.

+0

Ich habe Frage bearbeitet :) danke für das Aufzeigen. –

+0

Keine IE8-Unterstützung für rgba. –

5

`rgba wird nicht von ie8 unterstützt.

Allerdings gibt es einen Trick für die Transparenz in i.e8

filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#7F000000,endColorstr=#7F000000); 

ersten 2 Ziffer #7F000000 sind Opazität und die nächsten 6 Ziffern sind Hexa-Farbcode.

7f ist das Äquivalent von 50%

So sollte Ihr Code wie folgt aussehen:

.css({ 'background-color': 'rgba(0,0,0,0.5)' }) //Problem here in IE8 
.css({'filter' : 'progid:DXImageTransform.Microsoft.gradient(startColorstr=#50000000,endColorstr=#50000000);'}) //IE Fallback 

Quellen: http://css-tricks.com/rgba-browser-support/

Edit: Nach Derek Henderson Kommentar, ich werde den Code nicht schreiben, aber Wenn Sie das nur noch bei IE8 hinzufügen möchten, überprüfen Sie jQuery.browser

+0

Ich denke, es ist am besten, das IE8 Fallback nach Bedarf hinzuzufügen, anstatt es für alle Browser anzugeben. –

+0

Es ist sicher, aber es ist nicht die Frage hier ... Ich zeige ihm nur, dass es einen Fallback für die Transparenz in IE gibt –

0

Statt dessen:

.css({ 'background-color': 'rgba(0,0,0,0.5)' }) 

Sie können dies tun:

.css({ 'background-color': 'rgb(0,0,0)', 'opacity': '0.5' }) 

Diese in allen Browsern funktionieren.

+0

Was wird mit dem Text im Inneren passieren? Das ist eine Lösung, wenn das Element keine untergeordneten Elemente, keinen Text oder keine Rahmenfarbe hat. – drinchev

+3

Nein, tut mir leid. Netter Versuch, aber IE8 unterstützt auch keine CSS 'Opazität'. Außerdem wirkt sich "Opazität" auf den Vordergrund des Elements aus, während der ursprüngliche "rgba" -Code nur den Hintergrund beeinflusst. – Spudley