Safari (links) liefert das gewünschte Ergebnis – beide Divs verwischen, was sich hinter ihnen befindet.
Chrome (rechts) wendet jedoch nur die Unschärfe von an div.outer:
Ich habe eine Lösung: ein weiteres Div hinzufügen div.outer und bewegend backdrop-filter: blur(8px); zu dieser neuen Abteilung.
Ich würde mich jedoch über eine Lösung freuen, die keine Änderung des DOM vom ersten jsbin erfordert. Weiß jemand außerdem, was dies verursacht? Handelt es sich um einen Chrome-Fehler?
Haben Sie versucht, das zu verwenden? -webkit- Präfix?
– Dämonenbestie
2. April 2020 um 18:19 Uhr
Außerdem funktioniert es einwandfrei auf iOS Safari, Chrome und Firefox.
– Dämonenbestie
2. April 2020 um 18:21 Uhr
Ich verwende sowohl -webkit- als auch die normale Version. Seltsamerweise funktioniert es auf iOS Chrome, aber nicht auf Android Chrome und auch nicht auf Mac OS Chrome (alle aktuellen Versionen, die laut caniuse den Hintergrundfilter unterstützen sollten)
Platzieren Sie den Hintergrundfilter auf dem CSS-Pseudoelement. Dies ermöglicht verschachtelte Hintergrundfilter. Sie können es auch verwenden z-index: -1; um Ihren Hintergrund hinter Ihren Elementen zu positionieren
<main>
<div class="wrapper">
<div class="outer">
<div class="inner"></div>
</div>
</div>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus in id quos, est voluptatibus minus porro sunt totam quod commodi odit maxime similique, dolorum aut quo atque. Deleniti, voluptas animi.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus in id quos, est voluptatibus minus porro sunt totam quod commodi odit maxime similique, dolorum aut quo atque. Deleniti, voluptas animi.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus in id quos, est voluptatibus minus porro sunt totam quod commodi odit maxime similique, dolorum aut quo atque. Deleniti, voluptas animi.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus in id quos, est voluptatibus minus porro sunt totam quod commodi odit maxime similique, dolorum aut quo atque. Deleniti, voluptas animi.</p>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Accusamus in id quos, est voluptatibus minus porro sunt totam quod commodi odit maxime similique, dolorum aut quo atque. Deleniti, voluptas animi.</p>
</main>
Wenn dies bei niemandem funktioniert, habe ich festgestellt, dass die Lösung für mich darin besteht, den Z-Index eines Elements weiter unten im Stapel zu reduzieren (oder zu entfernen). Keine Ahnung warum, aber eine Glasschicht (z 1000) funktionierte nicht mit einem früheren Geschwister (z 100), aber durch die Reduzierung des Geschwisters auf z 10 wurde das Problem behoben.
– Mike Stop macht weiter
19. April 2021 um 18:06 Uhr
@MikeStopContinues, kannst du das bitte erklären? Ich bin auf dieses Problem gestoßen!
– Sibidharan
15. September 2021 um 16:08 Uhr
@Sibidharan Es ist lange her, dass ich mich mit diesem Problem befasst habe, aber ich kann Folgendes sagen: Ich verwende jetzt zwei feste Header, einen für den Filtereffekt und einen für den Inhalt. Das scheint bei mir zu funktionieren. Etwas wie: <header><div class="glass"/><nav /></header>. Stellen Sie die Position der Kopfzeile auf „Fixed“ und die Position der untergeordneten Elemente auf „Absolut“ ein, und Sie sollten kein Problem damit haben, dass alles funktioniert.
– Mike Stop macht weiter
17. September 2021 um 7:32 Uhr
@MikeStopContinues Ich habe es behoben. Alles gut 🙂 Deine Antworten haben mir geholfen. Danke schön.
– Sibidharan
17. September 2021 um 7:41 Uhr
Ich hatte dieses Problem und es hat sehr lange gedauert, es zu beheben. In meinem Fall gab es zwei Schuldige: opacity Und drop-shadow. Durch das Festlegen der Deckkraft wird der Unschärfeeffekt unterbrochen, daher sollten Sie ihn (genau wie in dieser Antwort) verwenden rgba(r, g, b, *opacity here*). Das zweite ist drop-shadow. Wenn das Element, das ich verwischen wollte, auch vorhanden war drop-shadow Es fügt Schatten hinzu, aber die Unschärfe verschwindet. Ich hoffe das hilft.
– alpersunter
3. Januar 2022 um 21:10 Uhr
KawaLo
Diese Antwort vervollständigt die von @Michał (die bei mir funktioniert hat). Kurze Antwort: Chrome verhindert freiwillig das Stapeln verschachtelter Hintergrundfilter.
Warum sich Chrome so verhält
A sehr ähnliches Problem wurde im Chromium Bugs Tracker gemeldet. Zitieren einer Antwort auf diesen Fehlerbericht:
Der Hintergrundfilter filtert alles dahinter, bis hin zur „Hintergrundwurzel“, die aus mehreren Triggern besteht. Einer dieser Auslöser ist ein weiteres Hintergrundfilterelement.
Also im Grunde, wenn Sie hinzufügen backdrop-filter Für ein Element wird es zum neuen Hintergrundstamm: Verschachtelte Hintergrundfilter werden NICHT auf seine Vorfahren angewendet, da sie nicht über den Stamm „sehen“ können.
<elem1>
<!-- Here, backdrop filter will apply to elem1, -->
<!-- as it is an ancestor of elem2 -->
<elem2 style="backdrop-filter: ...">
<!-- Here, backdrop filter will apply to elem2, -->
<!-- but not elem1, as elem2 is now the new Backdrop root -->
<elem3 style="backdrop-filter: ...">
</elem3>
</elem2>
</elem1>
Chrome folgt tatsächlich einer W3C-Empfehlung (so scheint es zumindest). Wenn Sie die Motivation haben, können Sie den vollständigen Grund für dieses Verhalten unter lesen dieser W3C-Entwurf.
Warum die akzeptierte Antwort funktioniert
Der :before ist ein Pseudoelement, das heißt, es hat kein untergeordnetes Element. Selbst wenn es zum Hintergrundstamm wird, blockiert es daher nicht die Anwendung verschachtelter Filter auf seine Vorgänger.
Warum es in anderen Browsern funktioniert
Ab Mai 2023 konnte ich dieses Verhalten auf Chrome, Safari und Firefox testen. Nur Chrome scheint diesem W3C-Entwurf zu folgen, da Elemente in Safari und Firefox korrekt unscharf gemacht wurden. Den Antworten auf den Fehlerbericht zufolge weichen Safari und Firefox jedoch von den Spezifikationen ab.
Zusammenfassung
Wenn Sie möchten, dass ein Element mit einem Hintergrundfilter verschachtelte Hintergründe zulässt (z. B. eine transparente Navigationsleiste mit einem Dropdown-Menü, die beide einen Unschärfe-/Transparenzeffekt haben), sollten Sie den Filter auf ein Pseudoelement anwenden, wie @Michał vorgeschlagen hat :
Hinweis: Dies ist nur erforderlich, wenn der übergeordnete Container verschachtelte Elemente mit einem Hintergrundfiltersatz enthält, nicht jedoch bei „Blätter“-Elementen.
14528700cookie-checkDer Hintergrundfilter funktioniert nicht für verschachtelte Elemente in Chromeyes
backdrop-filter
hat schlechte Unterstützung: kann ich benutzen.– Dämonenbestie
2. April 2020 um 18:18 Uhr
Haben Sie versucht, das zu verwenden?
-webkit-
Präfix?– Dämonenbestie
2. April 2020 um 18:19 Uhr
Außerdem funktioniert es einwandfrei auf iOS Safari, Chrome und Firefox.
– Dämonenbestie
2. April 2020 um 18:21 Uhr
Ich verwende sowohl -webkit- als auch die normale Version. Seltsamerweise funktioniert es auf iOS Chrome, aber nicht auf Android Chrome und auch nicht auf Mac OS Chrome (alle aktuellen Versionen, die laut caniuse den Hintergrundfilter unterstützen sollten)
– Tonald Drump
2. April 2020 um 18:40 Uhr
Es handelt sich um einen verfolgten Fehler in Chrome, siehe: bugs.chromium.org/p/chromium/issues/detail?id=993971
– Maometto
9. Juni 2020 um 16:18