Eu tenho um arquivo JPEG que estou usando como imagem de fundo para uma página de pesquisa e estou usando CSS para defini-lo porque estou trabalhando nos contextos Backbone.js :
background-image: url("whatever.jpg");
Quero aplicar um filtro de desfoque CSS 3 apenas ao plano de fundo, mas não sei como estilizar apenas esse elemento. Se eu tentar:
-webkit-filter: blur(5px);
-moz-filter: blur(5px);
-o-filter: blur(5px);
-ms-filter: blur(5px);
filter: blur(5px);
logo abaixo background-image
no meu CSS, ele estiliza a página inteira, em vez de apenas o plano de fundo. Existe uma maneira de selecionar apenas a imagem e aplicar o filtro a isso? Como alternativa, existe uma maneira de desativar o desfoque de todos os outros elementos da página?
css
background-image
css-filters
Raposa
fonte
fonte
Respostas:
Confira esta caneta .
Você precisará usar dois contêineres diferentes, um para a imagem de plano de fundo e o outro para o seu conteúdo.
No exemplo, eu criei dois contêineres
.background-image
e.content
.Ambos são colocados com
position: fixed
eleft: 0; right: 0;
. A diferença em exibi-los deriva dosz-index
valores que foram definidos de maneira diferente para os elementos.Desculpas pelo texto Lorem Ipsum .
Atualizar
Agradecemos a Matthew Wilcoxson por uma melhor implementação usando
.content:before
http://codepen.io/akademy/pen/FlkzBfonte
caneta
Abolir a necessidade de um elemento extra, além de ajustar o conteúdo ao fluxo do documento, em vez de ser fixo / absoluto, como outras soluções.
Alcançado usando
O estouro automático é necessário, caso contrário, o fundo será deslocado por alguns pixels na parte superior.
Depois disso, você simplesmente precisa
EDITAR Se você estiver interessado em remover as bordas brancas das bordas, use a largura e a altura e as partes
110%
esquerda e superior-5%
. Isso aumentará um pouco seus fundos - mas não deve haver cores sólidas nas bordas.Caneta atualizada aqui: https://codepen.io/anon/pen/QgyewB - Obrigado Chad Fawcett pela sugestão.
fonte
width
eheight
para110%
e, em seguida, adicionar um deslocamento de e-5%
para a classe.top
left
content:before
Conforme declarado em outras respostas, isso pode ser alcançado com:
Você também pode usar
backdrop-filter
Existe uma propriedade suportada chamada
backdrop-filter
, e atualmente é suportada no Chrome 76, Edge , Safari e iOS Safari (consulte caniuse.com para estatísticas).Nos devdocs do Mozilla :
Veja caniuse.com para estatísticas de uso.
Você usaria assim:
Atualização (06/06/2019) : o Chromium é enviado com
backdrop-filter
ativado por padrão na versão 76, com vencimento em 30/07/2019 .Atualização ( 06/06/2019 ) : A equipe do Mozzilla Firefox anunciou que começará a trabalhar na implementação em breve.
Atualização (21/05/2019) : O Chromium acaba de anunciar
backdrop-filter
está disponível no chrome canary sem ativar o sinalizador "Ativar recursos experimentais da plataforma da Web". Isso significa quebackdrop-filter
está muito perto de ser implementado em todas as plataformas chrome.fonte
Você precisa reestruturar seu HTML para fazer isso. Você precisa desfocar todo o elemento para desfocar o fundo. Portanto, se você deseja desfocar apenas o fundo, ele deve ser seu próprio elemento.
fonte
Verifique o código abaixo: -
fonte
A seguir, é apresentada uma solução simples para navegadores modernos em CSS puro com um pseudo-elemento 'antes', como a solução de Matthew Wilcoxson.
Para evitar a necessidade de acessar o pseudo-elemento para alterar a imagem e outros atributos em JavaScript, basta usar
inherit
como valor e acessá-los através do elemento pai (aquibody
).fonte
Na
.content
guia CSS altere-o paraposition:absolute
. Caso contrário, a página renderizada não será rolável.fonte
Embora todas as soluções mencionadas sejam muito inteligentes, todas pareciam ter problemas menores ou possíveis efeitos colaterais com outros elementos da página quando eu os experimentei.
No final, para economizar tempo, simplesmente voltei à minha solução antiga: usei o Paint.NET e fui para Effects, Gaussian Blur com um raio de 5 a 10 pixels e salvei-o como imagem da página. :-)
HTML:
CSS:
EDITAR:
Finalmente consegui funcionar, mas a solução não é de maneira alguma direta! Veja aqui:
fonte
Tudo o que você realmente precisa é de "filtro":
fonte
Obviamente, essa não é uma solução CSS, mas você pode usar o CDN Proton com
filter
:É de https://developer.wordpress.com/docs/photon/api/#filter
fonte
localhost
durante o teste?Eu não escrevi isso, mas notei que havia um polyfill para o parcialmente suportado
backdrop-filter
usando o compilador CSS SASS; portanto, se você tiver um pipeline de compilação, ele poderá ser bem alcançado (ele também usa o TypeScript):https://codepen.io/mixal_bl4/pen/EwPMWo
fonte
fonte
Esta resposta é para um layout de cartão horizontal de Material Design com altura dinâmica e uma imagem.
Para evitar distorção da imagem devido à altura dinâmica do cartão, você pode usar uma imagem de espaço reservado em segundo plano com desfoque para ajustar as alterações de altura.
Explicação
<div>
com classe , que é um flexbox.<a>
, classe ligação , é posicionado em relação .<div>
classe de espaço reservado e uma foto de classe<img>
que é a imagem clara.width: 100%
, mas a classe pic tem uma ordem de pilha mais alta, ou sejaz-index: 2
, que a coloca acima do espaço reservado.Código
fonte
Agora, isso se torna ainda mais simples e flexível usando CSS GRID. Você só precisa sobrepor o fundo manchado (imgbg) ao texto (h2)
e o css:
fonte
fonte
Sem usar a pseudo-classe de
fonte
Se você deseja que o conteúdo seja rolável, defina a posição do conteúdo como absoluta:
Eu não sei se isso foi só para mim, mas se não, essa é a solução!
Além disso, como o plano de fundo é fixo, significa que você tem um efeito de "paralaxe" ! Portanto, agora, essa pessoa não apenas ensinou como criar um fundo desfocado, mas também é um efeito de paralaxe!
fonte