Ist es möglich, nur mit CSS das background
Element eines Elements halbtransparent zu machen, aber den Inhalt (Text & Bilder) des Elements undurchsichtig zu machen?
Ich möchte dies erreichen, ohne den Text und den Hintergrund als zwei separate Elemente zu haben.
Beim Versuch:
p {
position: absolute;
background-color: green;
filter: alpha(opacity=60);
opacity: 0.6;
}
span {
color: white;
filter: alpha(opacity=100);
opacity: 1;
}
<p>
<span>Hello world</span>
</p>
Es sieht so aus, als ob untergeordnete Elemente der Deckkraft ihrer Eltern ausgesetzt sind, also opacity:1
relativ zur opacity:0.6
des Elternteils.
p
‚Undurchsichtigkeit s waren.6
und diespan
‘ s Opazität war.5
dann die wahre Opazität des Textes in der Spanne wäre0.3
.opacity:.5
für das übergeordnete undopacity:2
für das untergeordnete Element definiere?opacity:2;
ist CSS ungültig . Der Wert deropacity
Eigenschaft muss im Inklusivbereich [0,1] liegen.Antworten:
Verwenden Sie entweder ein halbtransparentes PNG- Bild oder CSS 3:
Hier ist ein Artikel aus css3.info, Opacity, RGBA und Kompromiss (2007-06-03).
quelle
background-color: rgba(#000, .5);
In Firefox 3 und Safari 3 können Sie RGBA wie von Georg Schölly erwähnt verwenden .
Ein wenig bekannter Trick ist, dass Sie ihn auch im Internet Explorer mit dem Verlaufsfilter verwenden können.
Die erste Hex-Zahl definiert den Alpha-Wert der Farbe.
Vollständige Lösung für alle Browser:
Dies geschieht durch CSS-Hintergrundtransparenz ohne Auswirkungen auf untergeordnete Elemente über RGBa und Filter .
Screenshots Ergebnisnachweis:
Dies ist bei Verwendung des folgenden Codes:
quelle
Dies ist die beste Lösung, die ich finden konnte, ohne CSS 3 zu verwenden. Soweit ich sehen kann, funktioniert sie unter Firefox, Chrome und Internet Explorer hervorragend.
Stellen Sie einen Container
div
und zwei Kinderdiv
auf die gleiche Ebene, eines für den Inhalt und eines für den Hintergrund. Verwenden Sie CSS, um die Größe des Hintergrunds automatisch an den Inhalt anzupassen und den Hintergrund mithilfe des Z-Index tatsächlich in den Hintergrund zu verschieben.quelle
:after
und vermeiden Sie das zusätzliche Markup?Für eine einfache halbtransparente Hintergrundfarbe sind die oben genannten Lösungen (CSS3- oder BG-Bilder) die besten Optionen. Wenn Sie jedoch etwas ausgefalleneres tun möchten (z. B. Animation, mehrere Hintergründe usw.) oder sich nicht auf CSS3 verlassen möchten, können Sie die „Fenstertechnik“ ausprobieren:
Bei dieser Technik werden zwei „Ebenen“ innerhalb des äußeren Fensterelements verwendet:
Das Ein-
position: relative
Fenster ist wichtig. Die hintere Ebene wird an die Größe des Fensters angepasst. (Wenn das<p>
Tag absolut sein soll, ändern Sie den Bereich von a<p>
in a<span>
und verpacken Sie alles in ein<p>
Tag mit absoluter Position .)Der Hauptvorteil dieser Technik gegenüber den oben aufgeführten ist, dass der Bereich keine bestimmte Größe haben muss. Wie oben codiert, passt es in voller Breite (normales Blockelement-Layout) und nur so hoch wie der Inhalt. Das äußere Fensterelement kann beliebig dimensioniert werden, solange es rechteckig ist (dh der Inline-Block funktioniert; ein einfacher alter Inline-Block funktioniert nicht).
Außerdem gibt es Ihnen viel Freiheit für den Hintergrund; Sie können wirklich alles in das hintere Element einfügen und es hat keinen Einfluss auf den Inhaltsfluss (wenn Sie mehrere Unterebenen in voller Größe möchten, stellen Sie einfach sicher, dass sie auch die Position haben: absolut, Breite / Höhe: 100%, und oben / unten / links / rechts: auto).
Eine Variante, um die Anpassung des Hintergrundeinsatzes (über oben / unten / links / rechts) und / oder das Fixieren des Hintergrunds (über das Entfernen eines der Paare links / rechts oder oben / unten) zu ermöglichen, besteht darin, stattdessen das folgende CSS zu verwenden:
Wie geschrieben funktioniert dies in Firefox, Safari, Chrome, IE8 + und Opera, obwohl IE7 und IE6 zusätzliches CSS und Ausdrücke erfordern, IIRC, und als ich das letzte Mal nachgesehen habe, funktioniert die zweite CSS-Variante in Opera nicht.
Dinge, auf die Sie achten sollten:
<div>
s anstelle von<span>
s, um Ihr CSS zu vereinfachen.Eine ausführlichere Demo, die die Flexibilität dieser Technik demonstriert, indem sie zusammen mit
display: inline-block
und mitauto
& spezifischenwidth
s /min-height
s verwendet wird:Und hier ist eine Live-Demo der Technik, die ausgiebig verwendet wird:
quelle
width:
&height:
Eigenschaften eine Linie, weil sie dieselbe Art von Konstrukt sind und besser als zweidimensionale Form verstanden werden, nicht ein Paar eindimensionaler Einschränkungen. Außerdem sind in einigen Zeilen eine ganze Menge enthalten, da es sich um wiederholte Inhalte handelt, die nicht so wichtig sind, um sie vorzuführen.Es ist besser, eine halbtransparente zu verwenden
.png
.Öffnen Sie einfach Photoshop , erstellen Sie ein
2x2
Pixelbild (das Auswählen1x1
kann einen Internet Explorer-Fehler verursachen! ), Füllen Sie es mit einer grünen Farbe und stellen Sie die Deckkraft auf der Registerkarte "Ebenen" auf 60% ein. Speichern Sie es dann und machen Sie es zu einem Hintergrundbild:Es funktioniert natürlich cool, außer im schönen Internet Explorer 6 . Es gibt bessere Korrekturen, aber hier ist ein kurzer Hack:
quelle
Es gibt einen Trick, um das Markup zu minimieren: Verwenden Sie ein Pseudoelement als Hintergrund, und Sie können die Deckkraft festlegen, ohne das Hauptelement und seine untergeordneten Elemente zu beeinflussen:
DEMO
Ausgabe:
Relevanter Code:
Browserunterstützung ist Internet Explorer 8 und höher.
quelle
Die einfachste Methode wäre die Verwendung eines halbtransparenten PNG -Hintergrundbilds .
Sie können JavaScript verwenden, damit es bei Bedarf in Internet Explorer 6 funktioniert .
Ich verwende die in Transparente PNGs in Internet Explorer 6 beschriebene Methode .
Ansonsten könnten Sie es mit zwei nebeneinander angeordneten Geschwisterelementen fälschen - machen Sie eines halbtransparent und positionieren Sie das andere absolut über der Oberseite .
quelle
Mit dieser Methode können Sie ein Bild im Hintergrund und nicht nur eine Volltonfarbe anzeigen und andere Attribute wie z. B. Rahmen transparent machen. Es sind keine transparenten PNG-Bilder erforderlich.
Verwenden Sie
:before
(oder:after
) in CSS und geben Sie ihnen den Deckkraftwert, damit das Element seine ursprüngliche Deckkraft beibehält. So können Sie: before verwenden, um ein Faux-Element zu erstellen und ihm den gewünschten transparenten Hintergrund (oder Rahmen) zu geben und ihn hinter den Inhalt zu verschieben, mit dem Sie undurchsichtig bleiben möchtenz-index
.Ein Beispiel ( Geige ) (Beachten Sie, dass die
DIV
with-Klassedad
nur dazu dient, einen gewissen Kontext und Kontrast zu den Farben bereitzustellen. Dieses zusätzliche Element wird tatsächlich nicht benötigt, und das rote Rechteck wird etwas nach unten und rechts verschoben, um den Hintergrund sichtbar zu lassen dasfancyBg
Element):mit diesem CSS:
In diesem Fall
.fancyBg:before
haben die CSS-Eigenschaften, die Sie mit Transparenz haben möchten (roter Hintergrund in diesem Beispiel, kann aber ein Bild oder Rahmen sein). Es ist als absolut positioniert, um es nach hinten zu verschieben.fancyBg
(verwenden Sie Werte von Null oder was auch immer für Ihre Bedürfnisse besser geeignet ist).quelle
Das Problem ist, dass der Text in Ihrem Beispiel tatsächlich die volle Deckkraft hat . Es hat die volle Deckkraft innerhalb des
p
Tags, aber dasp
Tag ist nur halbtransparent.Sie können ein halbtransparentes PNG-Hintergrundbild hinzufügen, anstatt es in CSS zu realisieren, oder Text trennen und in zwei Elemente unterteilen und den Text über das Feld verschieben (z. B. negativer Rand).
Sonst ist es nicht möglich.
Genau wie Chris erwähnt hat: Wenn Sie eine PNG-Datei mit Transparenz verwenden, müssen Sie eine JavaScript-Problemumgehung verwenden, damit sie im lästigen Internet Explorer funktioniert ...
quelle
Bei fast allen Antworten wird davon ausgegangen, dass der Designer einen einfarbigen Hintergrund wünscht. Wenn der Designer tatsächlich ein Foto als Hintergrund haben möchte, ist JavaScript derzeit die einzige echte Lösung, wie das an anderer Stelle erwähnte jQuery Transify-Plugin .
Was wir tun müssen, ist, an der Diskussion der CSS-Arbeitsgruppe teilzunehmen und sie dazu zu bringen, uns ein Hintergrund-Opazitäts-Attribut zu geben! Es sollte Hand in Hand mit der Funktion für mehrere Hintergründe arbeiten.
quelle
So mache ich das (es ist vielleicht nicht optimal, aber es funktioniert):
Erstellen Sie das
div
, was Sie halbtransparent sein möchten. Gib ihm eine Klasse / ID. Lass es leer und schließe es. Geben Sie eine festgelegte Höhe und Breite ein (z. B. 300 x 300 Pixel). Geben Sie ihm eine Deckkraft von 0,5 oder was auch immer Sie möchten, und eine Hintergrundfarbe.Erstellen Sie dann direkt unter diesem Div ein weiteres Div mit einer anderen Klasse / ID. Erstellen Sie einen Absatz darin, in dem Sie Ihren Text platzieren. Geben Sie die
div
Position an: relativ und oben:-295px
(das sind negative 295 Pixel). Geben Sie ihm einen Z-Index von 2 für ein gutes Maß und stellen Sie sicher, dass seine Deckkraft 1 ist. Gestalten Sie Ihren Absatz so, wie Sie möchten, aber stellen Sie sicher, dass die Abmessungen kleiner als die des ersten sind,div
damit er nicht überläuft.Das ist es. Hier ist der Code:
Dies funktioniert in Safari 2.x, aber ich weiß nichts über Internet Explorer.
quelle
:before
:after
Hier ist ein jQuery-Plugin, das alles für Sie erledigt: Transify ( Transify - ein jQuery-Plugin zum einfachen Anwenden von Transparenz / Deckkraft auf den Hintergrund eines Elements ).
Ab und zu stieß ich auf dieses Problem, also beschloss ich, etwas zu schreiben, das das Leben viel einfacher macht. Das Skript ist kleiner als 2 KB und benötigt nur eine Codezeile, damit es funktioniert. Wenn Sie möchten, kann es auch die Deckkraft des Hintergrunds animieren.
quelle
Vor einiger Zeit schrieb ich darüber in Cross Browser Background Transparency With CSS .
Mit Bizarrely Internet Explorer 6 können Sie den Hintergrund transparent machen und den Text oben vollständig undurchsichtig halten. Für die anderen Browser empfehle ich dann die Verwendung einer transparenten PNG-Datei.
quelle
Deckkraft des Hintergrunds, aber nicht der Text hat einige Ideen. Verwenden Sie entweder ein halbtransparentes Bild oder überlagern Sie ein zusätzliches Element.
quelle
Wenn Sie ein Photoshop- Typ sind, können Sie auch Folgendes verwenden:
Oder:
quelle
Um den Hintergrund eines Elements halbtransparent zu machen, aber den Inhalt (Text und Bilder) des Elements undurchsichtig zu machen, müssen Sie CSS-Code für dieses Bild schreiben und ein Attribut hinzufügen, das
opacity
mit einem Mindestwert aufgerufen wird.Zum Beispiel,
// Je kleiner der Wert, desto transparenter oder weniger transparent.
quelle
CSS 3 bietet eine einfache Lösung für Ihr Problem. Verwenden:
Hier
rgba
steht für Rot, Grün, Blau und Alpha-Wert. Der Grünwert wird aufgrund von 255 erhalten, und die halbe Transparenz wird durch einen Alpha-Wert von 0,5 erhalten.quelle
Wenn Sie Less verwenden , können Sie verwenden
fade(color, 30%)
.quelle
Hintergrundfarbe: rgba (255, 0, 0, 0,5);wie oben erwähnt ist die beste Antwort einfach ausgedrückt. Zu sagen, dass die Verwendung von CSS 3 auch im Jahr 2013 nicht einfach ist, da sich der Grad der Unterstützung durch verschiedene Browser mit jeder Iteration ändert.
Obwohl
background-color
dies von allen gängigen Browsern unterstützt wird (nicht neu in CSS 3) [1], kann die Alpha-Transparenz schwierig sein, insbesondere mit Internet Explorer vor Version 9 und mit Rahmenfarbe in Safari vor Version 5.1. [2]Die Verwendung von Compass oder SASS kann die Produktion und die plattformübergreifende Kompatibilität erheblich verbessern.
[1] W3Schools: CSS-Hintergrundfarben-Eigenschaft
[2] Normans Blog: Checkliste für die Browserunterstützung CSS3 (Oktober 2012)
quelle
Sie können dies für Internet Explorer 8 lösen, indem Sie (ab) die Verlaufssyntax verwenden. Das Farbformat ist ARGB. Wenn Sie den Sass- Präprozessor verwenden, können Sie Farben mit der integrierten Funktion "ie-hex-str ()" konvertieren.
quelle
Sie können reines CSS 3 : verwenden
rgba(red, green, blue, alpha)
, wobeialpha
ist die gewünschte TransparenzstufeJavaScript oder jQuery sind nicht erforderlich.Hier ist ein Beispiel:
quelle
http://jsfiddle.net/x2ukko7u/ ?
quelle
Sie können dies mit
rgba color code
CSS wie im folgenden Beispiel tun .quelle
Es gibt eine einfachere Lösung, um ein Bild auf demselben Div zu überlagern. Es ist nicht die richtige Verwendung dieses Tools. Aber es funktioniert wie ein Zauber, dieses Overlay mit CSS zu erstellen.
Verwenden Sie einen eingefügten Schatten wie folgt:
Das ist alles :)
quelle
Sie können RGBA
(red, green, blue, alpha)
im CSS verwenden . Etwas wie das:Wenn Sie also einfach so etwas tun, funktioniert dies in Ihrem Fall:
quelle
Aus meiner Sicht ist der beste Weg, eine Hintergrundfarbe mit Deckkraft zu verwenden, der folgende. Wenn wir dies verwenden, verlieren wir nicht die Deckkraft für die anderen Elemente wie Testfarbe, Rand usw.
Verwenden Sie Hintergrundfarbe mit Deckkraft
quelle
Normalerweise benutze ich diese Klasse für meine Arbeit. Es ist sehr gut.
quelle
Es hat bei mir funktioniert, wenn ich das Format verwendet habe,
#AARRGGBB
also war es das, das für mich funktioniert hat#1C00ff00
. Probieren Sie es aus, denn ich habe gesehen, dass es für einige funktioniert und nicht für andere. Ich benutze es in CSS.quelle
Sie können den an den Hexadezimalwert angehängten Deckkraftwert verwenden:
In diesem Beispiel
aa
ist die Deckkraft. Eine Opazität00
bedeutet transparent undff
einfarbig.Die Deckkraft ist optional, sodass Sie den Hexadezimalwert wie immer verwenden können:
Sie können den alten Weg auch verwenden mit
rgba()
:Und die
background
Abkürzung, wenn Sie sicherstellen möchten, dass der Hintergrund keine anderen Stile wie Bilder oder Verläufe aufweist:Aus der Mozilla-Spezifikation ( https://developer.mozilla.org/en-US/docs/Web/CSS/background-color ):
quelle
Sie können RGB-Farben mit Deckkraft wie einen Farbcode in RGB (63, 245, 0) verwenden, Deckkraft hinzufügen (wie 63, 245, 0, 0,5) und RGB durch RGBA ersetzen.
A
ist für die Deckkraft zu verwenden.quelle