Estou tendo problemas para aplicar um efeito de desfoque em uma div de sobreposição semitransparente. Eu gostaria que tudo atrás do div fosse desfocado, assim:
Aqui está um jsfiddle que não funciona: http://jsfiddle.net/u2y2091z/
Alguma ideia de como fazer isso funcionar? Eu gostaria de manter isso o mais simples possível e para vários navegadores. Aqui está o CSS que estou usando:
#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
fonte
fonte
CSS filter
não é compatível com Firefox, você não deveria usá-lo.Respostas:
Aqui está um exemplo que usa
svg
filtro.A ideia é usar um
svg
elemento com oheight
mesmo que o#overlay
e aplicar ofeGaussianblur
filtro nele. Este filtro é aplicado em umsvg
image
elemento. Para dar um efeito de extrusão, você pode usar umbox-shadow
na parte inferior da sobreposição.Suporte do navegador para
svg
filtros .Demo on Codepen
fonte
Para uma resposta mais simples e atualizada:
Observe que o suporte do navegador não é perfeito, mas na maioria dos casos um desfoque não é essencial.
fonte
Consegui reunir informações de todos aqui e de mais pesquisas no Google e encontrei o seguinte, que funciona no Chrome e no Firefox: http://jsfiddle.net/xtbmpcsu/ . Ainda estou trabalhando para que isso funcione no IE e no Opera.
A chave é colocar o conteúdo dentro do div ao qual o filtro é aplicado:
E então o CSS:
Portanto, a máscara tem os filtros aplicados. Além disso, observe o uso de url () para um filtro com uma
<svg>
tag para o valor - essa ideia veio de http://codepen.io/AmeliaBR/pen/xGuBr . Se acontecer de você reduzir seu CSS, pode ser necessário substituir todos os espaços na marcação do filtro SVG por "% 20".Agora, tudo dentro da máscara div está desfocado.
fonte
filter: url(...
. Remova isso e o Chrome o usará com sucessofilter: blur(10px);
.Se você está procurando uma abordagem confiável para vários navegadores hoje , não encontrará uma ótima. A melhor opção que você tem é criar duas imagens (isso pode ser automatizado em alguns ambientes) e organizá-las de forma que uma se sobreponha à outra. Criei um exemplo simples abaixo:
Embora eficaz, mesmo essa abordagem não é necessariamente ideal. Dito isso, ele produz o resultado desejado .
fonte
Aqui está uma solução possível.
HTML
CSS
Eu sei que o CSS pode ser simplificado e você provavelmente deve se livrar dos ids. A ideia aqui é usar um div como contêiner de recorte e, em seguida, aplicar desfoque na duplicata da imagem. Violino
Para fazer isso funcionar no Firefox, você teria que usar o hack SVG .
fonte
-webkit-
porque não está implementado nesses navegadores. É melhor colocar a declaração padrão no final - depois de todas as versões prefixadas.Em vez de adicionar outro fundo desfocado ao seu conteúdo, você pode usar o filtro de fundo . FYI IE 11 e Firefox podem não suportá-lo. Verifique caniuse .
Demo:
fonte
fonte
Eu vim com esta solução.
Clique para ver a imagem do efeito desfocado
É uma espécie de truque que usa um filho posicionado absolutamente
div
, define sua imagem de fundo igual à do paidiv
e então usa abackground-attachment:fixed
propriedade CSS junto com as mesmasbackground
propriedades definidas no elemento pai.Em seguida, você aplica
filter:blur(10px)
(ou qualquer valor) no div filho.ver no codepen
fonte
Esta é uma solução que funciona com fundos fixos. Se você tiver um fundo fixo e alguns elementos sobrepostos e precisar de fundos borrados para eles, esta solução funciona:
Imagem temos este HTML simples:
Um plano de fundo fixo para
<body>
ou o elemento wrapper:E aqui, por exemplo, temos um elemento sobreposto com um fundo branco transparente:
Agora precisamos usar exatamente a mesma imagem de fundo de nosso wrapper para nossos elementos de sobreposição também, eu a uso como uma
:before
classe psuedo:Como o plano de fundo fixo funciona da mesma maneira nos elementos wrapper e sobrepostos, temos o plano de fundo exatamente na mesma posição de rolagem do elemento sobreposto e podemos simplesmente desfocá-lo. Aqui está um violino que funciona, testado no Firefox, Chrome, Opera e Edge: https://jsfiddle.net/0vL2rc4d/
NOTA: No firefox há um bug que faz a tela piscar ao rolar e há fundos borrados corrigidos. se houver alguma correção, me avise
fonte
Isso fará com que o desfoque se sobreponha ao conteúdo:
fonte