Mam plik JPEG, którego używam jako obraz tła dla strony wyszukiwania, i używam CSS, aby go ustawić, ponieważ pracuję w kontekstach Backbone.js :
background-image: url("whatever.jpg");
Chcę zastosować filtr rozmycia CSS 3 tylko do tła, ale nie jestem pewien, jak stylizować tylko ten jeden element. Jeśli spróbuję:
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-o-filter: blur(5px);
-ms-filter: blur(5px);
filter: blur(5px);
tuż pod background-image
moim CSS, stylizuje całą stronę, a nie tylko tło. Czy istnieje sposób, aby wybrać tylko obraz i zastosować do niego filtr? Alternatywnie, czy istnieje sposób, aby po prostu wyłączyć rozmycie dla każdego innego elementu na stronie?
Odpowiedzi:
Sprawdź ten długopis .
Będziesz musiał użyć dwóch różnych pojemników, jednego na obraz tła, a drugiego na zawartość.
W tym przykładzie utworzyłem dwa kontenery
.background-image
i.content
.Oba są umieszczone przy pomocy
position: fixed
ileft: 0; right: 0;
. Różnica w ich wyświetlaniu wynika zz-index
wartości, które zostały ustawione inaczej dla elementów.Przepraszamy za tekst Lorem Ipsum .
Aktualizacja
Podziękowania dla Matthew Wilcoxson za lepszą implementację przy użyciu
.content:before
http://codepen.io/akademy/pen/FlkzBźródło
długopis
Zniesienie potrzeby stosowania dodatkowego elementu, wraz z dopasowaniem zawartości do przepływu dokumentu, a nie ustaleniem / absolutem, jak w przypadku innych rozwiązań.
Osiągnięty przy użyciu
Automatyczna funkcja przepełnienia jest wymagana, w przeciwnym razie tło zostanie przesunięte o kilka pikseli u góry.
Po tym po prostu potrzebujesz
EDYCJA Jeśli chcesz usunąć białe obramowania z krawędzi, użyj szerokości i wysokości
110%
oraz lewej i górnej krawędzi-5%
. Powoduje to nieznaczne powiększenie tła - ale nie powinno być żadnego jednolitego koloru krwawiącego z krawędzi.Zaktualizowano pióro tutaj: https://codepen.io/anon/pen/QgyewB - Dziękuję Chad Fawcett za sugestię.
źródło
width
iheight
do,110%
a następnie dodać przesunięcie-5%
dotop
ileft
zcontent:before
klasy.Jak stwierdzono w innych odpowiedziach, można to osiągnąć za pomocą:
Możesz także użyć
backdrop-filter
Istnieje obsługiwana właściwość o nazwie
backdrop-filter
, która jest obecnie obsługiwana w Chrome 76, Edge , Safari i iOS Safari ( statystyki - patrz caniuse.com ).Od devdocs Mozilli :
Zobacz caniuse.com dla statystyk użytkowania.
Użyłbyś go w ten sposób:
Aktualizacja (12.06.2019) : Chromium będzie dostarczane z
backdrop-filter
domyślnie włączoną wersją 76, która ma się ukazać 30/07/2019 .Aktualizacja (01.06.2019) : Zespół Mozzilla Firefox ogłosił, że wkrótce rozpocznie prace nad jego wdrożeniem.
Aktualizacja (21.05.2019) : Chromium, które właśnie ogłoszono,
backdrop-filter
jest dostępne na kanale Chrome bez włączania flagi „Włącz eksperymentalne funkcje platformy internetowej”. Oznacza to, żebackdrop-filter
jest bardzo blisko do wdrożenia na wszystkich platformach chrome.źródło
Aby to zrobić, musisz zmienić strukturę HTML . Musisz zatrzeć cały element, aby zatrzeć tło. Więc jeśli chcesz rozmazać tylko tło, musi to być jego własny element.
źródło
Sprawdź poniższy kod: -
źródło
Poniżej przedstawiono proste rozwiązanie dla współczesnych przeglądarek w czystym CSS z pseudoelementem „przed”, podobnie jak rozwiązanie Matthew Wilcoxson.
Aby uniknąć konieczności dostępu do pseudoelementu w celu zmiany obrazu i innych atrybutów w JavaScript, po prostu użyj
inherit
jako wartości i uzyskaj do nich dostęp za pośrednictwem elementu nadrzędnego (tutajbody
).źródło
W
.content
zakładce w CSS zmień to naposition:absolute
. W przeciwnym razie renderowana strona nie będzie przewijana.źródło
Chociaż wszystkie wymienione rozwiązania są bardzo sprytne, wszystkie wydawały się mieć drobne problemy lub potencjalnie powodować efekt z innymi elementami na stronie, gdy je wypróbowałem.
W końcu, aby zaoszczędzić czas, po prostu wróciłem do mojego starego rozwiązania: użyłem Paint.NET i przeszedłem do Effects, Gaussian Blur o promieniu od 5 do 10 pikseli i właśnie zapisałem to jako obraz strony. :-)
HTML:
CSS:
EDYTOWAĆ:
W końcu udało mi się go uruchomić, ale rozwiązanie nie jest wcale proste! Spójrz tutaj:
źródło
Wszystko czego potrzebujesz to „filtr”:
źródło
Oczywiście nie jest to rozwiązanie CSS, ale możesz użyć protonu CDN z
filter
:Pochodzi z https://developer.wordpress.com/docs/photon/api/#filter
źródło
localhost
podczas testowania?Nie napisałem tego, ale zauważyłem, że istnieje polifill dla częściowo obsługiwanego
backdrop-filter
przy użyciu kompilatora CSS SASS, więc jeśli masz potok kompilacji, można go ładnie osiągnąć (używa również TypeScript):https://codepen.io/mixal_bl4/pen/EwPMWo
źródło
źródło
Ta odpowiedź dotyczy projektu materiałowego poziomego układu kart z dynamiczną wysokością i obrazem.
Aby zapobiec zniekształceniom obrazu spowodowanym dynamiczną wysokością karty, możesz użyć zastępczego obrazu tła z rozmyciem, aby dostosować się do zmian wysokości.
Wyjaśnienie
<div>
klasie owijki , który jest schematu flexbox.<a>
, klasa łącza , jest umieszczony w stosunku .<div>
klasy rozmycia i z<img>
klasy pic , który jest klarowny obraz.width: 100%
, ale pic klasy ma wyższą kolejność stosu, tj.z-index: 2
Co umieszcza ją powyżej symbolu zastępczego.Kod
źródło
Teraz staje się to jeszcze prostsze i bardziej elastyczne dzięki CSS GRID. Trzeba tylko nakładać się na rozmyte tło (imgbg) z tekstem (h2)
i css:
źródło
źródło
Bez użycia pseudoklasy z
źródło
Jeśli chcesz przewijać zawartość, ustaw pozycję zawartości na absolutną:
Nie wiem, czy to było tylko dla mnie, ale jeśli nie, to jest poprawka!
Również ponieważ tło jest stałe, to znaczy, że masz „paralaksy” efekt! Więc teraz ta osoba nie tylko nauczyła cię, jak robić rozmyte tło, ale jest to także efekt tła paralaksy!
źródło