Ich habe Probleme beim Anwenden eines Unschärfeeffekts auf ein halbtransparentes Overlay-Div. Ich möchte, dass alles hinter dem Div so verwischt wird:
Hier ist eine jsfiddle, die nicht funktioniert: http://jsfiddle.net/u2y2091z/
Irgendwelche Ideen, wie das funktioniert? Ich möchte dies so unkompliziert wie möglich halten und es browserübergreifend gestalten. Hier ist das CSS, das ich verwende:
#overlay {
position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;
background:black;
background:rgba(0,0,0,0.8);
filter:blur(4px);
-o-filter:blur(4px);
-ms-filter:blur(4px);
-moz-filter:blur(4px);
-webkit-filter:blur(4px);
}
html
css
blur
css-filters
Chad Johnson
quelle
quelle
CSS filter
Ihrer Information - wird in Firefox nicht unterstützt, Sie sollten es nicht verwenden.Antworten:
Hier ist ein Beispiel, das
svg
Filter verwendet.Die Idee ist, ein
svg
Element mit demheight
gleichen wie das zu verwenden#overlay
und denfeGaussianblur
Filter darauf anzuwenden . Dieser Filter wird auf einsvg
image
Element angewendet . Um einen extrudierten Effekt zu erzielen, können Sie einbox-shadow
am unteren Rand des Overlays verwenden.Browser-Unterstützung für
svg
Filter .Demo on Codepen
quelle
Für eine einfachere und aktuellere Antwort:
Beachten Sie, dass die Browserunterstützung nicht perfekt ist, aber in den meisten Fällen ist eine Unschärfe nicht unbedingt erforderlich.
quelle
Ich konnte Informationen von allen hier zusammenstellen und weiter googeln, und ich habe Folgendes gefunden, das in Chrome und Firefox funktioniert: http://jsfiddle.net/xtbmpcsu/ . Ich arbeite immer noch daran, dass dies für IE und Opera funktioniert.
Der Schlüssel ist, den Inhalt in das Div zu setzen, auf das der Filter angewendet wird:
Und dann das CSS:
Die Maske hat also die Filter angewendet. Beachten Sie auch die Verwendung von url () für einen Filter mit einem
<svg>
Tag für den Wert - diese Idee stammt von http://codepen.io/AmeliaBR/pen/xGuBr . Wenn Sie Ihr CSS minimieren, müssen Sie möglicherweise Leerzeichen im SVG-Filter-Markup durch "% 20" ersetzen.Jetzt ist alles im Maskendiv verschwommen.
quelle
filter: url(...
. Entfernen Sie das und Chrome verwendet erfolgreichfilter: blur(10px);
.Wenn Sie sich für einen zuverlässigen Cross-Browser - Ansatz suchen heute , werden Sie nicht ein große Liebe kennen lernen. Die beste Option besteht darin, zwei Bilder zu erstellen (dies kann in einigen Umgebungen automatisiert werden) und sie so anzuordnen, dass eines das andere überlagert. Ich habe unten ein einfaches Beispiel erstellt:
Auch wenn dieser Ansatz effektiv ist, ist er nicht unbedingt ideal. Davon abgesehen liefert es das gewünschte Ergebnis .
quelle
Hier ist eine mögliche Lösung.
HTML
CSS
Ich weiß, dass das CSS vereinfacht werden kann und Sie wahrscheinlich die IDs loswerden sollten. Die Idee hier ist, ein div als Zuschneidebehälter zu verwenden und dann Unschärfe auf Duplikate des Bildes anzuwenden. Geige
Damit dies in Firefox funktioniert, müssten Sie den SVG-Hack verwenden .
quelle
-webkit-
da diese in diesen Browsern nicht implementiert sind. Es ist besser, die Standarddeklaration am Ende zu setzen - nach allen vorangestellten Versionen.Anstatt Ihrem Inhalt einen weiteren unscharfen Hintergrund hinzuzufügen, können Sie den Hintergrundfilter verwenden . FYI IE 11 und Firefox unterstützen dies möglicherweise nicht. Überprüfen Sie caniuse .
Demo:
quelle
quelle
Ich habe diese Lösung gefunden.
Klicken Sie hier, um das Bild des verschwommenen Effekts anzuzeigen
Es ist eine Art Trick, bei dem ein absolut positioniertes untergeordnetes Element verwendet wird, das
div
Hintergrundbild dem übergeordneten Element entsprichtdiv
und dann diebackground-attachment:fixed
CSS-Eigenschaft zusammen mit denselbenbackground
Eigenschaften verwendet wird, die für das übergeordnete Element festgelegt wurden.Dann wenden Sie
filter:blur(10px)
(oder einen beliebigen Wert) auf das untergeordnete div an.Ansicht auf Codepen
quelle
Hier ist eine Lösung, die mit festen Hintergründen funktioniert. Wenn Sie einen festen Hintergrund haben und einige überlagerte Elemente haben und dafür unscharfe Hintergründe benötigen, funktioniert diese Lösung:
Bild wir haben dieses einfache HTML:
Ein fester Hintergrund für
<body>
oder das Wrapper-Element:Und hier haben wir zum Beispiel ein überlagertes Element mit einem weißen transparenten Hintergrund:
Jetzt müssen wir genau das gleiche Hintergrundbild unseres Wrappers auch für unsere Overlay-Elemente verwenden. Ich verwende es als
:before
Pseudo-Klasse:Da der feste Hintergrund sowohl in Wrapper- als auch in überlagerten Elementen auf dieselbe Weise funktioniert, befindet sich der Hintergrund in genau derselben Bildlaufposition wie das überlagerte Element und wir können ihn einfach verwischen. Hier ist eine funktionierende Geige, die in Firefox, Chrome, Opera und Edge getestet wurde: https://jsfiddle.net/0vL2rc4d/
HINWEIS: In Firefox gibt es einen Fehler , der den Bildschirm beim Scrollen flackern lässt, und es gibt feste unscharfe Hintergründe. Wenn es eine Lösung gibt, lass es mich wissen
quelle
Dadurch wird die Unschärfe über den Inhalt gelegt:
quelle