Transparenz ist eine dieser CSS-Eigenschaften, die eine seltsame Geschichte haben und viele verschiedene Eigenschaften und Werte erfordern, um die Browserkompatibilität so weit wie möglich zu gewährleisten. Um alle Eventualitäten abzudecken, benötigen Sie eine Reihe von CSS-Anweisungen. Glücklicherweise stören sie sich nicht gegenseitig, sodass die Verwendung aller Anweisungen jedes Mal, wenn Sie Transparenz hinzufügen möchten, keine große Mühe und keine Sorge bereitet. Hier sind sie, und sie sind derzeit auf 50% Transparenz eingestellt
.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;
}
Update 5. Juli 2011. Hier ist, was ich für die heutige Verwendung empfehlen würde, in einem viel einfacher zu kopierenden Format.
.transparent {
zoom: 1;
filter: alpha(opacity=50);
opacity: 0.5;
}
Ich habe versucht, dies auf Links anzuwenden, wie folgt
a img:hover {
filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
}
Leider funktioniert es unter IE nicht. Wissen Sie, wie man dieses Problem überwinden kann?
entfernen Sie einfach ,, -khtml-opacity: 0.5; "
Ich denke, Ihr Problem ist, dass Sie die Pseudoklasse :hover auf das img-Element und nicht auf das Anker-Element anwenden. IE unterstützt meiner Meinung nach keine Pseudoklassen auf img-Elementen.
Sie könnten versuchen, eine Klasse (z. B. "transeffect") für die Anker zu definieren, auf die Sie diesen Transparenz-Rollover-Effekt anwenden möchten, und dann Ihre CSS-Datei ändern zu
a.transeffect:hover {
filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
}
Nein, das ist es nicht, IE unterstützt die onhover-Sachen zum Glück.
Es gibt einen Bug in IE 6 + 7 (vielleicht auch in älteren Versionen - habe ich nicht geprüft), der verhindert, dass der Filter / die Opazität auf Elemente angewendet wird, wenn keine Dimensionseigenschaft in CSS zugewiesen ist.
Eine Möglichkeit, diesen Fehler zu umgehen, ist die Verwendung von JavaScript, dann funktioniert es plötzlich. Oder geben Sie einfach eine Höhe / Breite an, wenn dies nicht mit dem Stylesheet kollidiert.
Ah ja, das würde funktionieren. Sie könnten vielleicht die Breite auf 99,9% setzen, um es ebenfalls auszulösen, anstatt eine feste Breite einzustellen, wenn Sie das nicht möchten.
-moz-opacity:0.5;
-khtml-opacity: 0.5;
Hallo Chris, für welche Browser sind diese beiden Zeilen?
Der -moz-opacity-Selektor ist für sehr alte Versionen des Mozilla-Browsers (Netscape). Das funktioniert immer noch und ist für diese Browser notwendig.
Der -khtml-opacity-Selektor ist etwas seltsamer. Ich habe ihn ursprünglich zum ersten Mal bei der Arbeit mit JonDesigns SmoothGallery aufgenommen, wo er ihn für einige Rollover-Transparenzen verwendet. Ich glaube, -khtml ist speziell für Safari 1.x.
Ich benutze
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=”images/background.png”, sizingMethod=”scale”);
Ich würde gerne einige Live-Beispiele für diese Stile in Aktion sehen. Ich dachte, es wäre vielleicht nett, ein schwebendes Div mit den zufälligen Buchstaben einer halben geheimen Nachricht zu haben, mit der anderen Hälfte der Buchstaben in einem Hintergrundbild oder so etwas, damit man genau bis zum richtigen Punkt scrollen müsste, um die vollständige Nachricht zu enthüllen. Ich bin jedoch selbst noch ziemlich neu in CSS, daher kann ich mir nicht vorstellen, wie ich das umsetzen kann.
Vergessen Sie DOCTYPE nicht, damit es mit IE7 funktioniert ;)
fügen Sie dies zu Ihrem HTML hinzu, damit es mit IE7 funktioniert
“
Der -khtml-opacity-Selektor ist etwas seltsamer. Ich habe ihn ursprünglich zum ersten Mal bei der Arbeit mit JonDesigns SmoothGallery aufgenommen, wo er ihn für einige Rollover-Transparenzen verwendet. Ich glaube, -khtml ist speziell für Safari 1.x.
“
Nun, es ist nicht speziell für Safari, der Linux-Webbrowser Konqueror basiert ebenfalls auf dem KHTML-Kit.
Wenn ich Transparenz auf ein Block-Element anwende, wird der Text darin ebenfalls transparent – gibt es eine Möglichkeit, das zu verhindern?
Ich habe versucht, den Text in ein anderes Div zu setzen und die Opazität auf 100 zu setzen, aber das hat nicht funktioniert, obwohl ich logisch dachte, dass es das tun würde…
Sie können keine verschachtelten Divs verwenden, da diese die Opazität des Elternteils als 1.0-Opazität erben. Sie sollten ein Vordergrund-Div auf derselben Ebene verwenden, absolut positioniert über dem transparenten Hintergrund-Div, mit höherem z-index.
Sie können ein verschachteltes Div verwenden, um nicht-transparenten Text über einem halbtransparenten Hintergrund zu erhalten, indem Sie die Opazität des inneren Divs wieder auf 100% setzen und die Hintergrundfarbe auf transparent setzen.
Test
Siehe meine spielerische/lernende/Hack-Seite: http://www.aedsnet.com/ajaxmap.html
(klicken Sie auf einen Kartenmarker, um die halbtransparente Box zu sehen).
Zumindest funktionierte es in IE7 und FireFox
OK, dieser Link sollte sein http://www.aedsnet.com/maps/ajaxmap.html
Außerdem habe ich nicht bemerkt, dass das HTML, das ich in meinen Kommentar eingegeben habe, nicht als Text angezeigt würde,
daher sind dies meine Eigenschaften für mein "verschachteltes Div"
style=”opacity:1; background: transparent;”
Das Eltern-Div hat einen grünen Hintergrund mit einer Opazität von 0,8
Aber sicher kann es nicht so einfach sein?
@Robert: Es sieht so aus, als ob der Text in Ihren transparenten Boxen auch die Transparenz aufnimmt. Sie können die Transparenz von Kindelementen leider nicht wieder "hochdrehen".
Ich habe dazu vor kurzem einen kleinen Tipp veröffentlicht: Nicht-transparente Elemente innerhalb transparenter Elemente.
Nun… das ist zwar bekannt, aber es ist NICHT gültiges CSS! Vielleicht wäre ein transparentes PNG als Hintergrund zusammen mit einer JS-Bibliothek zur Behandlung des IE-Falls besser.
Danke für die Informationen und Tipps, Chris Coyier
in ie6 :hover funktioniert nur mit einem Link. das funktioniert aber für Sie
a:hover img {
filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
}
Ich habe eine Checkbox und ich möchte, dass diese Checkbox eine Opazität von 0,5 hat. Ich benutze den Mozilla 1.4 Browser unter Solaris 9. Aber die Checkbox wird für '-moz-opacity:0.5;' nicht angezeigt. Sie berücksichtigt keine Werte im Bereich 0 oder 1. Für Werte kleiner als 1 wird die Checkbox nicht angezeigt. Bitte sagen Sie mir die Lösung, ob ich unter Solaris 9 eine andere Eigenschaft verwenden kann.
aktuelles Stil-Klasse für Checkbox
{
filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5; }
In meinem CSS habe ich so etwas wie dies
{
position: absolute;
height: 99%;
width: 25%;
cursor: pointer;
z-index:10;
filter:alpha(opacity=20);
-moz-opacity:0.2;
-khtml-opacity: 0.2;
opacity: 0.2;
aber SmoothGallery sieht in Konqueror und Opera immer noch schrecklich aus. Gibt es eine Möglichkeit, das zu beheben?
FÜR DEN ERSTEN KOMMENTAR sollten Sie es so machen, und es wird in allen Browsern funktionieren =>
Es funktioniert immer noch nicht unter IE6.
Vielen Dank für diesen Tipp. Ich benutze ihn für ein Menü-Div über einem Bild, es sieht wirklich cool aus.
Ah, wenn ich eine CSS-Frage habe, sollte ich einfach Ihre Archive durchsuchen anstatt Google. Ich dachte, ich wäre sachkundig in CSS, bis ich Ihren Blog gelesen habe… Sie rocken!
Danke für die Infos!
Sehr praktisch für meine Navigation, spart ein CSS-Sprite.
Schönes Design übrigens!
Hallo, ich habe die Codes ausprobiert und sie sehen auf Moz und Safari großartig aus, aber in IE ruckelt es jedes Mal, wenn man darüber fährt… Hilfe!!!
Wichtig!
Ein Element muss im IE6 ein Layout haben, damit die Opazität verwendet werden kann! Dies geschieht durch die Verwendung des Sternchen-Hacks und die Zuweisung des Elements zur Höhe von 1px. Da IE6 dumm ist, wird die Höhe unabhängig davon gestreckt und alle anderen Browser ignorieren sie.
Wenn das Element kein Seitenlayout hat, haben Ihre Opazitätsstile keine Auswirkungen.
Okay Chris… es scheinen mehrere situationsbedingte Kommentare gemacht worden zu sein… haben Sie eine weitere Zusammenfassung / Schlussfolgerung (um all diese losen Enden zu verbinden)? Oder sollen wir Ihren Code oben als guten allgemeinen Ausgangspunkt betrachten, der situationsbedingt angepasst werden muss?
Danke
Großartig, das ist genau das, was ich brauche. Vielen Dank!
Ich habe Ihre Methode gerade ausprobiert und sie funktioniert großartig. Vielen Dank!!!!
Niemals Opazität direkt auf ein Bild anwenden, sondern stattdessen auf ein Div setzen, das das Bild enthält. Dies wird sehr helfen, einen sauberen und vollständig kompatiblen Code zu erstellen.
Beispiel
Wenn Sie RGBA-PNG-Bilder (RGB mit Transparenzschicht, nicht indexiert) in einer IE6-kompatiblen Anwendung verwenden möchten, sind DirectX-Bildfilter (DX6 oder höher erforderlich) erforderlich, aber ich empfehle dies überhaupt nicht, außer für diesen Sonderfall.
Beispiel
Beachten Sie den span, der den filter enthält. Das innere Bild ist ein transparenter Füller von 1x1 Pixel (kleinste Größe). Ich habe festgestellt, dass er besser ist als ein (nicht umbrechbares Leerzeichen) wegen des Textzooms (kann das Design beeinträchtigen) und der Unfähigkeit, einen Text in Textgröße 1px zu setzen.
Ich habe einen JavaScript-Code gefunden, der alle Ihre PNGs auf der Seite ersetzen kann. Ich habe ihn nur ein wenig verändert, um IE8 zu unterstützen. Funktioniert gut und ziemlich schnell, obwohl es einige Einschränkungen gibt
– Bilder in `display: none`-Elementen werden nicht beeinflusst (IE-Bug?). Das Gleiche gilt vielleicht für `visibility: hidden` und `opacity=0`, testen Sie es selbst.
– Bilder werden geändert, nachdem die **gesamte** Seite geladen wurde. Das Skript startet auch dann, wenn der Ladevorgang durch den Benutzer (ESC-Taste, …) unterbrochen wurde oder einige Bilder fehlen oder nicht erreichbar sind.
– Nach der Änderung sind Bilder keine **IMG**-Tags mehr, sondern **SPAN**: Es wird unmöglich, Bildeigenschaften direkt per Skripting (JavaScript, Visual Basic, …) festzulegen, wenn bildspezifische Codes verwendet werden
Falsch (JavaScript-Code)
Richtig (JavaScript-Code, etwas größer)
Versuchen Sie, dies zu einer Funktion zu machen, wenn es oft verwendet wird.
PNG-Autotransformations-Skript (hier ist ein XHTML-Fragment)
Ich bevorzuge `body onload` gegenüber seiner JavaScript-Entsprechung (`window.onload`), da dies viel besser und stabiler funktioniert.
Das ist großartig, danke für die Hilfe.
Gibt es eine Möglichkeit, Transparenz auf ein Hintergrundbild anzuwenden? wie in
Beispiel
background: url(image.gif) repeat-x bottom left;
opacity: 0.4;
filter: alpha(opacity=40);
???
Das funktioniert z.B. nicht in einer Subnavigation, wenn das PNG hinter einem a-Tag liegt. Das a-Tag funktioniert nicht, solange Sie es nicht relativ positionieren, was nicht immer möglich ist. Aber ja… theoretisch würde es funktionieren.
in IE6 :D. wo sonst…
.transparent_class {
filter:alpha(opacity=50);
-moz-opacity:0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
}
Ich habe noch eine Frage zum Thema. Wenn "opacity" auf ein Element (sagen wir ein Div) angewendet wird, wird die Opazität auch auf alle Kindelemente angewendet. Gibt es eine Möglichkeit, das zu umgehen?
Prost
Danke :D
Hey, das ist genau das, wonach ich gesucht habe! Dieses Opazitätszeug ist eine Qual, aber du hast alles in einem prägnanten Beitrag zusammengefasst.
Gerade jetzt bin ich mit einer meiner Website-CSS-Strukturen durcheinander und habe bei Google nach "wie man eine Website in allen Browsern mit CSS einrichtet" gesucht.
Obwohl es keine richtige Lösung war, habe ich dank Ihrer schönen Tutorials einen weiteren Fehler entdeckt :)
Danke für Ihre schönen Tutorials!!!
Was für ein großartiges Skript! Ich dachte, Transparenz wäre in allen Browsern nicht realisierbar, aber jetzt hat mich dieses Skript umgestimmt. Danke.
Hallo Sam, als Antwort auf Ihre Frage versuchen Sie Folgendes
.myelement {
background: rgba(200, 54, 54, 0.5);
}
Grund
Der Opazitätsstil wirkt sich auf das gesamte Element und alles darin aus. Wenn Sie also keine kaskadierende Opazität wünschen, ist dies eine nützliche Lösung.
Quelle: http://stackoverflow.com/questions/5662178/opacity-of-divs-background-without-affecting-contained-element-in-ie-8
David! Sie haben gerade eine fünf Jahre alte Frage beantwortet :)
Und danke für die Antwort, David – ich habe gerade nach diesen Informationen gesucht!
Ich möchte eine wichtige Tatsache über IE hervorheben. Beim Testen habe ich festgestellt, dass
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";die Opazität AUCH für die Kinder eines gegebenen DOM-Elements setzt. z.B. gegeben: wird div 1 alpha transparent und auch 2 wird alpha transparent.ABER wenn Sie RGBA-Alpha nachahmen möchten, für einen 0,5 transparenten Hintergrund (d.h. Kinder haben ihre eigene Opazität), sollten Sie besser verwenden
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#66ffffff,endColorstr=#66ffffff);Der Unterschied ist also, dass -ms-filter die W3C-Opazitätseigenschaft nachahmt und filter das RGBA-Farbsystem nachahmt.