DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!
Die Eigenschaft mix-blend-mode definiert, wie der Inhalt eines Elements mit seinem Hintergrund verschmolzen werden soll. Zum Beispiel könnte der Text einer <h1> auf interessante Weise mit dem Hintergrund dahinter verschmelzen.
.blend {
mix-blend-mode: exclusion;
}
Im obigen Beispiel wurde der Inhalt durch mix-blend-mode so modifiziert, dass die Farben des Textes von seinem Hintergrund ausgeschlossen werden. Dies ist nur einer von vielen Werten für diese Eigenschaft.
Es gibt ein Problem mit Chrome 58+, bei dem mix-blend-mode auf Elementen, die auf einem transparenten gesetzt sind, nicht gerendert wird. Dies wurde als Problem 711955 in Chrome gemeldet, das zum Zeitpunkt der Erstellung dieses Dokuments zugewiesen ist. In der Zwischenzeit ist eine einfache Lösung, dem Body-Element eine weiße (oder eigentlich jede) Hintergrundfarbe zuzuweisen.
Werte
initial: die Standardeinstellung der Eigenschaft, die keinen Mischmodus setzt.inherit: ein Element erbt den Mischmodus von seinem Elternelement.unset: entfernt den aktuellen Mischmodus von einem Element.<blend-mode>: dies ist das Attribut eines der unten aufgeführten Mischmodinormal: dieses Attribut wendet keinerlei Mischung an.multiply: das Element wird mit dem Hintergrund multipliziert und ersetzt die Hintergrundfarbe. Die resultierende Farbe ist immer so dunkel wie der Hintergrund.screen: multipliziert den Hintergrund und den Inhalt und komplementiert dann das Ergebnis. Dies führt zu einem Inhalt, der heller als diebackground-colorist.- overlay: multipliziert oder überlagert den Inhalt je nach Hintergrundfarbe. Dies ist die Umkehrung des hard-light Mischmodus.
- darken: der Hintergrund wird durch den Inhalt ersetzt, wenn der Inhalt dunkler ist, andernfalls bleibt er unverändert.
lighten: der Hintergrund wird durch den Inhalt ersetzt, wenn der Inhalt heller ist.color-dodge: dieses Attribut hellt die Hintergrundfarbe auf, um die Farbe des Inhalts widerzuspiegeln.color-burn: dies verdunkelt den Hintergrund, um die natürliche Farbe des Inhalts widerzuspiegeln.hard-light: je nach Farbe des Inhalts überlagert oder multipliziert dieses Attribut ihn.soft-light: je nach Farbe des Inhalts verdunkelt oder hellt dieses ihn auf.difference: dies subtrahiert die dunklere der beiden Farben von der hellsten Farbe.exclusion: ähnlich wiedifference, aber mit geringerem Kontrast.hue: erzeugt eine Farbe mit dem Farbton des Inhalts, kombiniert mit der Sättigung und Luminosität des Hintergrunds.saturation: erzeugt eine Farbe mit der Sättigung des Inhalts, kombiniert mit dem Farbton und der Luminosität des Hintergrunds.color: erzeugt eine Farbe mit dem Farbton und der Sättigung des Inhalts und der Luminosität des Hintergrunds.luminosity: erzeugt eine Farbe mit der Luminosität des Inhalts und dem Farbton und der Sättigung des Hintergrunds. Dies ist die Umkehrung descolorAttributs.
Es ist erwähnenswert, dass das Setzen eines Mischmodus außer normal einen neuen Stapelkontext erzeugt, der dann mit dem Stapelkontext, der das Element enthält, gemischt werden muss.
Die Auswirkungen dieser Werte werden in der folgenden Demo gezeigt
Verwandte Eigenschaften
Weitere Informationen
- Grundlagen von CSS Blend Modes
- mix-blend-mode auf MDN
- mix-blend-mode auf W3C
- Eine Sammlung von CSS Blend Mode Demos
- CSS Blend Modes kennenlernen
Browser-Unterstützung
Diese Browser-Supportdaten stammen von Caniuse, wo Sie weitere Details finden. Eine Zahl zeigt an, dass der Browser die Funktion ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 41 | 32 | Nein | 79 | TP |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 127 | 18.0 |
Ich vermute, das ist unüberwindbar, ähnlich wie bei geerbter Opazität. Aber hat jemand einen Weg gefunden, einen mix-blend-mode auf einen Container anzuwenden und dann die Effekte NICHT auf seine Kinder anzuwenden? (z. B. den farbigen Hintergrund eines Divs mit dem darunter liegenden Inhalt zu multiplizieren, während der Text im Div opak bleibt). Ich habe mit mix-blend-mode: unset; für die Kindelemente herumgespielt, aber bisher ohne Erfolg.
Ich glaube nicht, dass es eine Möglichkeit gibt, die Kindelemente eines Divs selektiv zu mischen, aber da dies neu und noch nicht gut erforscht ist, dachte ich, es wäre einen Versuch wert. Danke!
Ah, ich habe mir das für die Demos angesehen, konnte aber keine Möglichkeit finden, Kindelemente von den Stilen der Eltern zu trennen. Die Dokumentation ist derzeit leider wirklich mangelhaft.
Danke, Robin! Ich werde posten, wenn ich etwas herausfinde.
Die neue Eigenschaft „isolation“ löst Ihr Problem nicht genau, aber sie könnte potenziell helfen, einige Probleme mit Mischmodi zu lösen. Ehrlich gesagt, habe ich noch keinen praktischen Bedarf dafür gefunden, aber meine eigenen Experimente sind bisher eher leichtgewichtig.
Ich dachte nur, ich teile es, um das Wort zu verbreiten und zu sehen, ob andere es herausfinden können. Ich stimme vollkommen zu, dass wir eine Möglichkeit brauchen, Kindknoten von Containern zu trennen, bevor wir Mischungen auf diese Container anwenden.
Ich habe dasselbe Problem und kann keine Lösung finden…
Mix-Background-Mode: ;
Das sollte Ihren Zweck erfüllen :D sehen Sie es hier in Aktion
Mozilla Developer Network
CSS Tricks
Sehen Sie sich diesen sehr geschmackvollen Einsatz von mix-blend-mode auf der Website von Ableton an: https://loop.ableton.com/register/
Sieht gut aus, verursacht aber viel Scroll-Ruckeln in Firefox. Die Leistung ist stark reduziert. Es fühlt sich kaputt an, nur für Text.
Ja, die Unterstützung scheint immer noch etwas wackelig zu sein.
Ich brauchte gestern den Mischmodus, aber nicht für die Kinder meines Containers.
Es war nur für eine Kopfzeile, also habe ich eine Ebene mit dem Mischmodus und eine weitere absolute Ebene erstellt, die dieselben Elemente auf dieselbe Weise wie meine relative Ebene positioniert hatte.
Sicher, keine saubere Lösung, aber sie erfüllt vorerst ihren Zweck.
Vorsicht: Die Verwendung von mix-blend-mode kann Ihre CSS-Übergänge wie sanfte Opazität unterbrechen, da die Opazität nicht reibungslos über die GPU animiert wird, wenn ein Kindelement den Stil mix-blend-mode hat (zumindest nach heutigem Stand unter Chrome für den Mischmodus 'difference').
Hallo Thomas, hast du eine Lösung für das Problem gefunden?
Das scheint heute noch wahr zu sein. Danke für den Kommentar.
Das habe ich für meinen Künstlerfreund gemacht ... ziemlich cool, finde ich.
http://mattsusko.com
Ist Safari bereits aktualisiert, um die Werte hue, saturation, color und luminosity zu unterstützen?
Scheint nicht so zu sein: http://caniuse.com/#search=mix-blend-mode
Danke. Die kleine Animation unten hat sehr geholfen. Schöne kleine Beispiele, die den Punkt verdeutlichen.
Ich habe einen Weg gefunden. Um Blend-Modi (nicht Background-Blend-Modi) auf Elemente anzuwenden, müssen Sie dieses Element zu einem FONT-ICON machen – denn Schriften sind für Mischmodi offen (im Gegensatz zu Background-Blend-Modi).
Unsere Designer hatten ein Design, das Farbschichten über unseren Bildern erforderte. Aber das Bild musste eine IMG und kein Hintergrundbild sein.
Also habe ich die von den Designern entworfene Form (einen schrägen Block) genommen und diesen Block in Illustrator als SVG nachgebildet. Dann habe ich ihn in ein Font-Icon kompiliert und dieses Icon dem :before-Attribut zugewiesen.
Ein Beispiel sehen Sie hier -> http://www.perficient.com/services, inspizieren Sie den roten Winkel.
Je nach Positionierungsanforderungen, wie wäre es, einen separaten Div für Ihren Hintergrund zu erstellen (innerhalb des Containers) und diesem Ihre mix-blend-mode Eigenschaften / Effekte zu geben und dann wie gewohnt mit Ihren Containerelementen fortzufahren? Beispiel: https://codepen.io/Merlin007/pen/wJqEaZ
Das erste Beispiel funktioniert in Chrome seit Version 58 nicht mehr. Um es wieder funktionsfähig zu machen, müssen Sie einen weißen Hintergrund hinter das Bild legen, daher wäre der perfekte Ort hier
Ich versuche, es hier zu implementieren – bfmos.ru
Es ist auf WordPress, Enfold.
Das, was ich zu ändern versuche – ist ein kleiner Balken
mit einer Telefonnummer ganz oben
Das Beispiel für Code, das ich verwende, ist
#top .av_header_transparency #header_meta {
background: rgba(255,255,255,1);
mix-blend-mode: difference;
}
Und die Hauptfrage ist: Warum funktioniert mix-blend-mode
bei einigen Elementen und bei anderen nicht?
Ich denke, cssTricks sollte einen solchen Artikel posten)
(oder ich denke, ich werde in der nächsten Minute dasselbe googeln)
Bitte helfen Sie, ich habe einen Haken bei "Send Me Email to Notify me" gesetzt)
Hallo Andrey! Ich konnte keine dieser Selektoren auf der Seite finden – vielleicht ein Screenshot des Elements in den Entwicklertools?
Eigentlich sind das Standardeinstellungen. Ich habe es nicht überprüft, aber sie müssen es sein, da ich CSS über "Element untersuchen" angewendet habe, also müsste es funktionieren.
Ich muss leider feststellen, dass ein Bild überhaupt nicht mit dem Seitenhintergrund gemischt wird. Wenn Sie also einen roten Hintergrund im BODY-Tag haben und ein Foto auf der Seite mit mix-blend-mode, wird das Foto nicht mit dem Hintergrund gemischt. Sie müssen einen roten Wrapper-DIV um das Bild legen, um die Mischung zu sehen: https://codepen.io/MSCAU/pen/ywarGV
Im Gegensatz zu diesem Artikel funktioniert mix-blend-mode nicht in MS Edge (Version 44.18362, Win 10). Habe es gerade getestet. Caniuse.com listet es auch als nicht unterstützt auf.
Hallo! Die Browser-Supportdaten in diesem Beitrag werden tatsächlich direkt von caniuse bezogen: https://caniuse.com/#feat=css-mixblendmode
Was Sie sehen, ist wahrscheinlich das aktuellere Ergebnis, das aus einer jüngsten Partnerschaft zwischen caniuse und MDN resultiert: https://caniuse.com/#feat=mdn-css_properties_mix-blend-mode
Gut zu wissen, dass die abgerufenen Daten nicht die aktuellsten sind – danke!
Ich habe mir semantisches HTML angesehen und hoffte, den Hintergrund auf einem Tag setzen zu können. Das funktioniert jedoch nicht, daher muss ich einen Container-Div um das Picture-Tag hinzufügen.
Wie ist die Situation mit Elementen, die auch semantisches HTML sind?
Ich habe es mehrmals versucht. Ich bekomme mix-blend-mode nicht zum Laufen. Können Sie mir bitte helfen?
https://codepen.io/Girardini/full/WNpGWYN
Es hat etwas mit dem Grid-Layout zu tun.
Wenn Sie auf Block umstellen und den Text überlappen lassen, funktioniert es.
So wie hier https://codepen.io/qqqqqqq/pen/wvqZzvm