Die Verwendung von RGBa für progressive Enhancement wird immer beliebter, was großartig ist. Schon vor fast einem Jahr war es so gut wie einsatzbereit. Eine großartige Möglichkeit, den Teil des progressiven Enhancements zu handhaben, ist einfach, eine Fallback-Farbe vor dem RGBa-Wert zu deklarieren, damit ältere Browser, die es nicht unterstützen, eine solide Farbversion erhalten.
div {
background: rgb(200, 54, 54); /* The Fallback */
background: rgba(200, 54, 54, 0.5);
}
Das oben Genannte funktioniert einwandfrei, jedoch hat mich Dan Beam auf einen interessanten Bug/Eigenartigkeit in IE 6 & 7 (behoben in IE 8) aufmerksam gemacht. Siehe Beispiel.
Die Situation ist, dass **die RGB-Fallback-Farbe nur bei Verwendung von Kurzschreibweise funktioniert**. Wenn Sie die Fallback-Farbe so deklarieren würden
div {
background-color: rgb(255,0,0);
background-color: rgba(255,0,0,0.5);
}
diebackground-colorEigenschaft allein verwenden, schlägt dies fehl und es wird überhaupt keine Hintergrundfarbe angezeigt.

Das obige Bild stammt aus IE 7. Die Verwendung der Kurzschreibweise (oben) gelingt, während die Nicht-Kurzschreibweise (unten) fehlschlägt.
Lösung
Die Verwendung von RGB als Fallback ist gut. Es ist eine einfache Arbeit, denn alles, was Sie tun müssen, ist den RGBa-Wert zu duplizieren, das "a" zu entfernen und den 4. (Deckkraft) Parameter zu entfernen. Wenn Sie RGB weiterhin als Fallback verwenden möchten, denken Sie daran, es mit Kurzschreibweise (falls möglich) einzustellen oder den Fallback mit regulären HEX-Codes oder Schlüsselwörtern einzustellen.
Im Beispiel ist das Ergebnis von 50% Rot sowieso ein helles Rot, daher könnte die Angabe dieses Werts mit einem Hex-Code ohnehin eine passendere Fallback-Farbe sein.
div {
background-color: #fd7e7e;
background-color: rgba(255,0,0,0.5);
}
Interessante Lösung. Danke Chris :)
Das kam gerade rechtzeitig. Ich hatte genau dieses Problem mit einem Hintergrund, der auf einer ul für meine Hauptseiten-Navigation gesetzt war. Ich war gerade dabei, den gesamten CSS-Code für die Navigation neu zu schreiben, als ich auf diesen Beitrag stieß.
Vielen Dank, Chris!! Ihre Seite ist eine Lebensrettung!
@Chris: Also, was gibt's Neues? Ermöglicht dies Transparenz über RGBa in einer oder mehreren IE-Versionen?
Entschuldigung, ich habe es nicht ganz verstanden (ich bin kein Muttersprachler)
Danke im Voraus
Leider behebt das nicht die nativen rgba()- oder rgb()-Fähigkeiten von IE. Ich wünschte, das wären die Neuigkeiten. Obwohl Sam's Kommentar das tun könnte, habe ich es noch nicht ausprobiert.
Dieser Artikel teilt Ihnen jedoch lediglich mit, dass die Verwendung des Befehls *"background-color:"* in IEs 6 & 7 überhaupt nicht als Fallback für rgb()-Farben funktioniert. Die Verwendung von *"background-color: rgb( XX, XX, XX );"* schlägt derzeit fehl, und ich weiß nicht, warum.
Chris' erster Artikel verwendet das nicht, er verwendet einfach *"background:"*, aber ich hatte andere Stile im Code, an dem ich arbeitete, und *"background-color:"* funktionierte in IE 6 & 7 nicht. Ich war verwirrt, als sie sich nicht gleich verhielten (wie Chris erwähnte, *"background:"* wäre einfach eine Kurzschreibweise für alle *"background-*" Eigenschaften).
Hat jemand von einer Lösung für diesen Bug gehört (außer der Konvertierung in Hex, was sehr einfach ist) oder weiß, warum er existiert?
Danke, es ist mein erster Besuch jeden Morgen....
Danke für die Screencasts, ich kann sie immer wieder ansehen.
Du bist der Mann.
Lösung für IEs
div {
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#66000000,endColorstr=#99FFFFFF);
zoom: 1;
}
übrigens, das Format in der IE-Filter-Eigenschaft nimmt #AARRGGBB an.
Vergessen Sie nicht IE8 im "Standards-Modus".
div {
background:transparent;
filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#BF6464B7,endColorStr=#BF6464B7);
-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorstr=#BF6464B7,endColorstr=#BF6464B7)";
zoom: 1;
}
Mein Freund hat vor einiger Zeit darüber geschrieben hier.
IE, du enttäuschst mich nie.
IE, du erstaunst mich nie!
Damit meine ich, erstaunt mich, wie schlecht es ist.
Eigentlich unterstützt es RGBA seit 5.5.
Sam, du übersiehst, dass egal wie viel Unterstützung er für RGBA hat, das macht ihn nicht zu einem insgesamt schrecklichen Browser.
Also können wir uns wohl alle darauf einigen, dass Internet Explorer kein sehr guter Browser ist, bis wir aufhören, Zeit mit Beschwerden zu verschwenden und tatsächlich etwas Sinnvolles zu erledigen :)
Was sind die Vor- und Nachteile der Verwendung von RGB/RGBa im Vergleich zu Hex? Es war immer mein Verständnis, Hex zu verwenden, wenn die Farbe eines Elements deklariert wird.
Soweit ich weiß, gibt es keine. Es ist nur eine andere Art, Dinge zu tun. Ich denke, dass die Begeisterung aller für RGB**A**() (was Ihnen diese süße, süße Alpha-Fähigkeit verleiht) einfach auf RGB() überschwappt, was wirklich keinen Vorteil gegenüber der Verwendung eines Hex-Werts hat.
Ich hatte auch den Eindruck, dass alle coolen Leute heutzutage RGB anstelle von Hex verwendeten und verbrachte viel Zeit damit, den Vorteil herauszufinden. Und soweit ich sehen kann, gibt es keinen.
In HEX können Sie keine Alpha-Transparenz einstellen.
Das sollte offensichtlich sein. Ich glaube, Chris sagt hier, dass Sie die Transparenz opfern müssen, aber die Farbe mit Hex beibehalten müssen. Ein ziemlich Standard-Workaround, wenn man IE in Anbetracht aller Umstände betrachtet.
"übrigens, das Format in der IE-Filter-Eigenschaft nimmt #AARRGGBB an." Was Sie vor 3 Kommentaren gesagt haben, haha, ich fand es nur lustig
Heh. Ich bin letzte Woche auf dieses Problem gestoßen und habe festgestellt, dass diese Lösung funktioniert. In meinem Fall definiere ich jedoch die Fallback-Lösung für IE nur mithilfe von bedingten Anweisungen.
Das könnte Ihnen zum Verhängnis werden, da rgba in älteren Versionen von Firefox, Opera usw. nicht unterstützt wird. Ein Fallback für alle Browser ist eine gute Idee.
Es ist so seltsam, dass es in IE nicht funktioniert. Dies ist jedoch keine seltsame CSS-Eigenschaft, die niemand in der Praxis verwendet. Vielleicht weil die #Notation meistens verwendet wird, ist das rgb()-Problem in IE so spät aufgefallen!
IE ist großartig! (mit dem neuen Sarkasmus-Ausrufezeichen)
Es lebe IE... es ist nur ein Stück Mist, das immer noch auf dem Markt kursiert.
Wow... tolle Behebung, ich habe schon seit einiger Zeit nach einer Möglichkeit gesucht, transparente Divs mit nicht-transparentem Inhalt zu haben... Danke.
(Wenn nur Internet Explorer schon Standards einhalten würde)
Danke Chris,
Genau dieser Bug plagt mich schon seit ein paar Wochen.
LEGENDE !!!!!!
Es sei denn, Sie müssen die ganze Zeit helle Farben verwenden, ich würde bei Hex-Codes bleiben. Wenn Sie hellere Farben benötigen, verwenden Sie einfach einen anderen Hex-Code für diese Farbe.
Ich verwende einen zusätzlichen Schritt der anmutigen Verschlechterung – .png mit etwas Transparenz, das RGBA emuliert. So wird nur von IE6 eine opake Farbe angezeigt.
Lustig, dass Sie diesen Artikel gestern geschrieben haben und ich ihn heute lese. Ich musste dieses Problem für eine neue Website, an der ich arbeite, selbst lösen. Hier ist die Lösung, die ich gefunden habe
background:rgba(149,220,193,.4) !important; background-color:rgb(186,234,215);Das Problem hier ist, dass Sie background-color und rgb verwenden, was die Kombination ist, die in IE 6 und 7 fehlschlägt. Außer, es scheint für Sie zu funktionieren?
Es funktionierte bei IE7 für mich. Ich habe es aber nicht in IE6 getestet.
Ja, das Gerücht besagt, dass dies tatsächlich funktioniert, was diesen Bug offiziell 10x seltsamer macht, als er ohnehin schon ist.
Ja, das hat funktioniert, ohne die background:-Anweisung verwenden und alle anderen Stile überschreiben zu müssen!
Ich bin mir nicht ganz sicher, warum ein fehlerhaftes
background-color: rgba( ) !important;nachfolgendebackground-color: rgb( );Aufrufe zum Funktionieren bringt, aber ich bin damit einverstanden, :D.Chris wird wahrscheinlich bald eine aktualisierte Demo veröffentlichen, aber vorerst hier ist eine.
Außerdem funktioniert Vererbung weiterhin, da der Aufruf
background-color: rgba( ) !important;in IE6 (dem Browser, der nur 1 !important pro Regel akzeptiert und nachfolgende ignoriert) vollständig ignoriert wird.Hier ist mein Endergebnis
background-color:rgba(150,150,150,.5) !important;
background-color:rgb(150,150,150);
Also, bravo für den Hack mit der größten Flexibilität!
Ich gehe davon aus, dass 'background-color' für alle aktuellen Browser funktioniert – einschließlich IE –, warum also 'background' korrigieren? Es sei denn, ich übersehe etwas... was wahrscheinlich ist! Ich weiß, es ist kürzer, aber macht es wirklich so einen Unterschied?
...und warum entdecke ich rgb in CSS erst jetzt? Die ganze Zeit habe ich von RGB zu Hex konvertiert!!! Toller Artikel und danke, dass Sie meine stumpfen Augen geöffnet haben!
Das Problem ist, dass background-color in IE nicht richtig funktioniert, nur die Kurzschreibweise, was der Punkt dieses Artikels ist.
function setOpacity(value) {
exampleID.style.opacity = value/10;
exampleID.style.filter = 'alpha(opacity=' + value*10 + ')';
}
Eine Lösung!
Obwohl
Explorer 6 lässt den linken Rand falsch aussehen.
Explorer 7 beta 3 zeigt zwei Textebenen an.
TBODY & TR Opacity werden nicht in Explorer 6, Explorer 7 beta 3, Safari 1.3, Opera 9 akzeptiert.
Das passiert in CSS, nicht nur in meinem Code-JavaScript.
"Die Verwendung der Eigenschaft background-color allein wird fehlschlagen und überhaupt keine Hintergrundfarbe anzeigen."
Warum sollte man überhaupt "background-color" verwenden?
Sie können einfach die Kurzschreibweise verwenden und das war's. Mit anderen Worten, das
» background-color:#f00;
Ist das gleiche wie das
» background:#f00;
Na ja...
Die Verwendung der Kurzschreibweise **setzt andere Werte zurück**, die möglicherweise bereits gesetzt wurden. Wenn Sie also das Hintergrundbild eines Elements festgelegt hatten (entweder mit background-image oder mit Kurzschreibweise) und dann bei :hover die Farbe mit background: whatever; geändert haben, verschwand das Bild. Sie müssten stattdessen background-color verwenden, um sicherzustellen, dass das Bild nicht überschrieben wurde.
Der Bug ist also: Immer wenn Sie zwei Hintergrundattribute für denselben CSS-Selektor verwenden UND das zweite Attribut
background-colorist und Sie rgba verwenden, gibt IE den Geist auf und setzt die Hintergrundfarbe auf transparent.Bessere Browser **ignorieren** die rgba()-Syntax, die sie nicht verstehen, aber IE **interpretiert**
background-color: rgba(whatever);**falsch** alstransparent.Das hier sollte funktionieren, tut es aber NICHT
div {background: white; /* fallback */
background-color: rgba(255,255,255,0.65);
}
Ebenso, wie Sie bemerkt haben, funktioniert das nicht (Verwendung von background-color für beide)
div {
background-color: white; /* fallback */
background-color: rgba(255,255,255,0.65);
}
Es spielt keine Rolle, welche Syntax für die Fallback-Farbe verwendet wird (rgb, hex oder Schlüsselwort), sie funktionieren alle nicht in IE6-7. Sie erhalten einen transparenten Hintergrund in IE, aber die Dinge fallen ordnungsgemäß in Opera 9 oder Camino 1.6 (die auch rgba() nicht unterstützen) zurück.
Aber ändern Sie die zweite Deklaration zur background-Kurzschreibweise, und plötzlich funktioniert es, auf Kosten der möglichen Überschreibung aller anderen Hintergrundbilder/Positionen.
Das funktioniert (Fallback ist nur background-color und beachten Sie, dass die rgb-Syntax funktioniert)
div {
background-color: rgb(255,255,255); /* fallback */
background: rgba(255,255,255,0.65);
}
Das funktioniert (Verwendung der background-Kurzschreibweise für beide)
div {
background: white; /*fallback */
background: rgba(255,255,255,0.65);
}
Wie Kyle oben erwähnt hat, funktioniert es auch, wenn die Reihenfolge der Deklarationen geändert und !important verwendet wird, unerklärlicherweise, und Sie können jede Syntax verwenden. Sie können nicht einfach !imporant; hinzufügen, Sie müssen auch die Reihenfolge der Attribute ändern. Also funktioniert das
div {
background: rgba(255,255,255,0.65) !important;
background: white; /* fallback */
}
Und das funktioniert (nur mit background-color)
div {
background-color: rgba(255,255,255,0.65) !important;
background-color: white; /* fallback */
}
Das Letzte, was funktioniert, ist die Verwendung von **zwei** CSS-Selektoren. Der Bug in IE scheint nur aufzutreten, wenn sie im selben Selektor stehen.
Also funktioniert das perfekt
/* Fallback, der in IE und allen anderen tatsächlich funktioniert */
div {
background-color: white;
}
/* Browser, die RGBA erkennen, überschreiben die vorherige Deklaration */
div {
background-color: rgba(255,255,255,0.65);
}
Chris, ich habe eine Demo zusammengestellt, die ich Ihnen per E-Mail schicken kann, wenn Sie sie sehen möchten. Es ist ein sehr seltsamer Bug.
jquery css background-color change funktioniert nicht auf einigen Divs, die Class Name verwenden, um das Div zu identifizieren
Oben genannte Probleme treten im Chrome Browser auf