So wenden Sie einen CSS-Filter auf ein Hintergrundbild an
-
21-12-2019 - |
Frage
Ich habe eine JPEG-Datei, die ich als Hintergrundbild für eine Suchseite verwende, und verwende CSS, um sie festzulegen, weil ich darin arbeite Backbone.js Kontexte:
background-image: url("whatever.jpg");
Ich möchte einen CSS 3-Unschärfefilter anwenden nur in den Hintergrund, aber ich bin mir nicht sicher, wie ich nur dieses eine Element stylen soll.Wenn ich es versuche:
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-o-filter: blur(5px);
-ms-filter: blur(5px);
filter: blur(5px);
knapp darunter background-image
In meinem CSS wird die gesamte Seite formatiert und nicht nur der Hintergrund.Gibt es eine Möglichkeit, nur das Bild auszuwählen und den Filter darauf anzuwenden?Gibt es alternativ eine Möglichkeit, die Unschärfe einfach für jedes andere Element auf der Seite zu deaktivieren?
Lösung
Schau dir das an Stift.
Sie müssen zwei verschiedene Container verwenden, einen für das Hintergrundbild und einen für Ihren Inhalt.
Im Beispiel habe ich zwei Container erstellt, .background-image
Und .content
.
Beide sind mit platziert position: fixed
Und left: 0; right: 0;
.Der Unterschied in der Anzeige ergibt sich aus der z-index
Werte, die für die Elemente unterschiedlich eingestellt wurden.
.background-image {
position: fixed;
left: 0;
right: 0;
z-index: 1;
display: block;
background-image: url('http://666a658c624a3c03a6b2-25cda059d975d2f318c03e90bcf17c40.r92.cf1.rackcdn.com/unsplash_527bf56961712_1.JPG');
width: 1200px;
height: 800px;
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-o-filter: blur(5px);
-ms-filter: blur(5px);
filter: blur(5px);
}
.content {
position: fixed;
left: 0;
right: 0;
z-index: 9999;
margin-left: 20px;
margin-right: 20px;
}
<div class="background-image"></div>
<div class="content">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis aliquam erat in ante malesuada, facilisis semper nulla semper. Phasellus sapien neque, faucibus in malesuada quis, lacinia et libero. Sed sed turpis tellus. Etiam ac aliquam tortor, eleifend
rhoncus metus. Ut turpis massa, sollicitudin sit amet molestie a, posuere sit amet nisl. Mauris tincidunt cursus posuere. Nam commodo libero quis lacus sodales, nec feugiat ante posuere. Donec pulvinar auctor commodo. Donec egestas diam ut mi adipiscing,
quis lacinia mauris condimentum. Quisque quis odio venenatis, venenatis nisi a, vehicula ipsum. Etiam at nisl eu felis vulputate porta.</p>
<p>Fusce ut placerat eros. Aliquam consequat in augue sed convallis. Donec orci urna, tincidunt vel dui at, elementum semper dolor. Donec tincidunt risus sed magna dictum, quis luctus metus volutpat. Donec accumsan et nunc vulputate accumsan. Vestibulum
tempor, erat in mattis fringilla, elit urna ornare nunc, vel pretium elit sem quis orci. Vivamus condimentum dictum tempor. Nam at est ante. Sed lobortis et lorem in sagittis. In suscipit in est et vehicula.</p>
</div>
Entschuldigung dafür Lorem Ipsum Text.
Aktualisieren
Dank an Matthew Wilcoxson für eine bessere Umsetzung mit .content:before
http://codepen.io/akademy/pen/FlkzB
Andere Tipps
Dadurch entfällt die Notwendigkeit eines zusätzlichen Elements und die Anpassung des Inhalts an den Dokumentenfluss erfolgt, anstatt wie bei anderen Lösungen fest/absolut zu sein.
Erreicht mit
.content {
overflow: auto;
position: relative;
}
Es ist ein automatischer Überlauf erforderlich, da sonst der Hintergrund oben um einige Pixel versetzt wird.
Danach brauchen Sie nur noch
.content:before {
content: "";
position: fixed;
left: 0;
right: 0;
z-index: -1;
display: block;
background-image: url('img-here');
background-size:cover;
width: 100%;
height: 100%;
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-o-filter: blur(5px);
-ms-filter: blur(5px);
filter: blur(5px);
}
BEARBEITEN Wenn Sie die weißen Ränder an den Rändern entfernen möchten, verwenden Sie eine Breite und Höhe von 110%
und eine linke und obere Seite -5%
.Dadurch wird Ihr Hintergrund etwas vergrößert, aber an den Rändern sollte keine Volltonfarbe einlaufen.
Aktualisierter Stift hier: https://codepen.io/anon/pen/QgyewB - Danke Chad Fawcett für den Vorschlag.
Wie in anderen Antworten angegeben, kann dies erreicht werden mit:
- .
- Eine Kopie des verschwommenen Bildes als Hintergrund.
- ein Pseudoelement, das filtriert werden kann, dann hinter dem Inhalt positioniert.
Sie können auch backdrop-filter
.
Es gibt eine unterstützte Eigenschaft namens generakodicetagcode, und ist derzeit Unterstützt in Chrom 76, Rand , Safari und iOS Safari (siehe caniuse.com für Statistiken).
von Mozilla devdocs :
Die Untertropfen-Filter-Eigenschaft sorgt für Effekte wie Unschärfe oder Farbe, die den Bereich hinter einem Element verschieben, das dann durch dieses Element gesehen werden kann, indem er die Transparenz / Deckkraft des Elements einstellt.
siehe caniuse.com für die Nutzungsstatistik.
Sie würden es wie so verwenden:
update (12/06/2019) : chromium wird mit backdrop-filter
versandt, der standardmäßig in der Version 76 aktiviert ist, in der ist vom 30.07.2019 .
update (01.06.2019) : das mozzilla firefox team hat angekündigt, es beginnt, dies bald daran zu arbeiten.
update (21.05.2019) : chromium nur angekündigt backdrop-filter
ist in Chrome Canary erhältlich, ohne dass "Experimentelle Webplattform mit experimenteller Webplattform aktivieren". Dies bedeutet, dass der backdrop-filter
in allen Chromplattformen sehr nahe ist.
Sie müssen Ihren HTML erneut strukturieren.Sie müssen das gesamte Element verwischen, um den Hintergrund zu verwischen.Wenn Sie also nur den Hintergrund verwischen möchten, muss es sein eigenes Element sein.
Bitte überprüfen Sie den folgenden Code: -
Das Folgende ist eine einfache Lösung für moderne Browser in reinem CSS mit einem „before“-Pseudoelement, wie die Lösung von Matthew Wilcoxson.
Um zu vermeiden, dass zum Ändern des Bildes und anderer Attribute in JavaScript auf das Pseudoelement zugegriffen werden muss, verwenden Sie einfach inherit
als Wert und greifen Sie über das übergeordnete Element (hier) darauf zu body
).
body::before {
content: ""; /* Important */
z-index: -1; /* Important */
position: inherit;
left: inherit;
top: inherit;
width: inherit;
height: inherit;
background-image: inherit;
background-size: cover;
filter: blur(8px);
}
body {
background-image: url("xyz.jpg");
background-size: 0 0; /* Image should not be drawn here */
width: 100%;
height: 100%;
position: fixed; /* Or absolute for scrollable backgrounds */
}
Im .content
Tab in CSS ändern Sie es in position:absolute
.Andernfalls ist die gerenderte Seite nicht scrollbar.
Obwohl alle genannten Lösungen sehr klug sind, schien alle geringfügigen Probleme oder potenziellen Effekten mit anderen Elementen auf der Seite auf der Seite zu haben, als ich sie ausprobierte.
Am Ende, um Zeit zu sparen, ging ich einfach zu meiner alten Lösung zurück: Ich habe paint.net und ging nach Effekten, Gaußschen Unschärfe mit einem Radius 5 bis 10 Pixel und reinigte das gerade als das Seitenbild.: -)
html:
generasacodicetagpre.css:
generasacodicetagpre.edit:
Ich habe es endlich funktioniert, aber die Lösung ist keineswegs unkompliziert!Hier sehen:
Alles, was Sie tatsächlich benötigen, ist "Filter":
generasacodicetagpre.
Natürlich handelt es sich hierbei nicht um eine CSS-Lösung, aber Sie können das CDN Proton damit verwenden filter
:
body {
background: url('https://i0.wp.com/IMAGEURL?w=600&filter=blurgaussian&smooth=1');
}
Es ist aus https://developer.wordpress.com/docs/photon/api/#filter
Ich habe dies nicht geschrieben, aber ich bemerkte, dass es ein Polyplavel für den teilweise unterstützten generationsporticeticetcode mit dem CSS-Sass-Compiler gab. Wenn Sie also eine Kompilierungs-Pipeline haben, kann es nett erreicht werden (es verwendet auch Typenkript):
.