Parece que a sobreposição da Apple é mais do que apenas uma transparência. Alguma idéia de como obter esse efeito com CSS e possivelmente com JS?
Parece que a sobreposição da Apple é mais do que apenas uma transparência. Alguma idéia de como obter esse efeito com CSS e possivelmente com JS?
Respostas:
É possível com CSS3:
#myDiv {
-webkit-filter: blur(20px);
-moz-filter: blur(20px);
-o-filter: blur(20px);
-ms-filter: blur(20px);
filter: blur(20px);
opacity: 0.4;
}
Exemplo aqui => jsfiddle
-moz-filter: blur()
. Em vez disso, você precisa usar um filtro SVG, consulte minha resposta para obter detalhes.
http://codepen.io/Edo_B/pen/cLbrt
Usando:
é isso aí.
Eu também acredito que isso poderia ser feito dinamicamente para qualquer tela se estiver usando a tela para copiar o domínio atual e desfocá-lo.
[Editar] No futuro (móvel) Safari 9, haverá -webkit-backdrop-filter
exatamente isso. Veja esta caneta que fiz para mostrá-la.
Pensei nisso nas últimas 4 semanas e criei esta solução.
[Editar] Eu escrevi um post mais aprofundado sobre CSS-Tricks
Essa técnica está usando regiões CSS, portanto, o suporte ao navegador não é o melhor no momento. ( http://caniuse.com/#feat=css-regions )
A parte principal desta técnica é separar o conteúdo do layout usando a região CSS. Primeiro defina um .content
elemento com flow-into:content
e, em seguida, use a estrutura apropriada para desfocar o cabeçalho.
A estrutura do layout:
<div class="phone">
<div class="phone__display">
<div class="header">
<div class="header__text">Header</div>
<div class="header__background"></div>
</div>
<div class="phone__content">
</div>
</div>
</div>
As duas partes importantes desse layout são .header__background
e .phone__content
- esses são os contêineres para os quais o conteúdo deve fluir.
Usando regiões CSS, é simples como flow-from:content
( .content
está fluindo para a região nomeada content
)
Agora vem a parte complicada. Queremos sempre transmitir o conteúdo através do .header__background
arquivo porque essa é a seção em que o conteúdo será manchado. (usando webkit-filter:blur(10px);
)
Isto é feito através transfrom:translateY(-$HeightOfTheHeader)
do .content
para garantir que o conteúdo vai fluir sempre que o .header__background
. Essa transformação sempre oculta algum conteúdo abaixo do cabeçalho. Corrigir isso é fácil adicionar
.header__background:before{
display:inline-block;
content:'';
height:$HeightOfTheHEader
}
para acomodar a transformação.
Atualmente, ele está trabalhando em:
Agora isso é possível com o FireFox, graças ao atributo de estilo do elemento .
Esse atributo experimental permite usar qualquer conteúdo HTML como imagem de plano de fundo. Portanto, para criar o plano de fundo, você precisa de três sobreposições:
-moz-element
plano de fundo que define o conteúdo. Observe que o FX não suporta o filter: blur()
atributo, portanto, precisamos de um SVG.Então, junte:
Filtro de desfoque SVG (funciona em FX, outros navegadores poderiam usar filter:blur()
):
<svg>
<defs>
<filter id="svgBlur">
<feGaussianBlur stdDeviation="10"/>
</filter>
</defs>
</svg>
Estilo de desfoque CSS:
.behind-blur
{
filter : url(#svgBlur);
opacity: .4;
background: -moz-element(#content);
background-repeat: no-repeat;
}
Finalmente 3 camadas:
<div class="header" style="background-color: #fff"> </div>
<div class="header behind-blur"> </div>
<div class="header">
Header Text, content blurs behind
</div>
Então, para mudar isso, basta definir o background-position
(exemplo em jQuery, mas você pode usar qualquer coisa):
$('.behind-blur').css({
'background-position': '-' + left + 'px -' + top + 'px'
});
Confira esta página de demonstração.
Esta demonstração usa html2canvas para renderizar documentos como uma imagem.
http://blurpopup.labs.daum.net/
Essa caneta que encontrei no outro dia parecia fazer muito bem, apenas um pouco de css e 21 linhas de javascript. Eu não tinha ouvido falar do comando cloneNode js até encontrar isso, mas funcionou totalmente para o que eu precisava, com certeza.
http://codepen.io/rikschennink/pen/zvcgx
Detalhe: A. Basicamente, ele analisa a sua div de conteúdo e chama um cloneNode para criar uma duplicata que, em seguida, coloca dentro do estouro: objeto de cabeçalho oculto localizado na parte superior da página. B. Em seguida, ele simplesmente escuta a rolagem para que ambas as imagens pareçam coincidir e desfoque a imagem do cabeçalho ... e anexe o BAM. Efeito alcançado.
Não é realmente totalmente capaz de executar CSS, até que eles tenham o mínimo de capacidade de script embutido na linguagem.
O exemplo está aqui:
ontem fiz uma demonstração rápida que realmente faz o que você está falando. http://bit.ly/10clOM9 esta demo faz o paralaxe com base no acelerômetro, para que funcione melhor no próprio iPhone. Basicamente, apenas copio o conteúdo que estamos sobrepondo em um elemento de posição fixa que fica desfocado.
nota: deslize para cima para ver o painel.
(Eu usei ids css horríveis, mas você entendeu)
#frost{
position: fixed;
bottom: 0;
left:0;
width: 100%;
height: 100px;
overflow: hidden;
-webkit-transition: all .5s;
}
#background2{
-webkit-filter: blur(15px) brightness(.2);
}
#content2fixed{
position: fixed;
bottom: 9px;
left: 9px;
-webkit-filter: blur(10px);
}
Não tenho muita certeza disso, acredito que o CSS não é capaz de fazer isso no momento
No entanto, Chris Coyier publicou um blog sobre uma técnica antiga com várias imagens para obter esse efeito, http://css-tricks.com/blurry-background-effect/
Verifique este http://codepen.io/GianlucaGuarini/pen/Hzrhf Parece que faz o efeito sem duplicar a imagem de plano de fundo do elemento em si. Veja os textos estão borrando também no exemplo.
Vague.js
var vague = $blurred.find('iframe').Vague({
intensity:5 //blur intensity
});
vague.blur();
A partir de hoje, 11 de abril de 2020 , isso é facilmente possível com a backdrop-filter
propriedade CSS, que agora é um recurso estável no Chrome, Safari & Edge.
Eu queria isso em nosso aplicativo móvel híbrido, também disponível no Android / Chrome Webview e Safari WebView.
Basta adicionar a propriedade CSS:
.my-class {
backdrop-filter: blur(30px);
background: transparent; // Make sure there is not backgorund
}
Veja-o trabalhando nesta caneta ou tente a demonstração:
#main-wrapper {
width: 300px;
height: 300px;
background: url("https://i.picsum.photos/id/1001/500/500.jpg") no-repeat center;
background-size: cover;
position: relative;
overflow: hidden;
}
.my-effect {
position: absolute;
top: 300px;
left: 0;
width: 100%;
height: 100%;
font-size: 22px;
display: flex;
justify-content: center;
align-items: center;
color: black;
-webkit-backdrop-filter: blur(15px);
backdrop-filter: blur(15px);
transition: top 700ms;
}
#main-wrapper:hover .my-effect {
top: 0;
}
<h4>Hover over the image to see the effect</h4>
<div id="main-wrapper">
<div class="my-effect">
Glossy effect worked!
</div>
</div>
Vamos dar um exemplo do aplicativo McDonald's, porque é bastante colorido. Tirei a captura de tela e a adicionei como pano de fundo no body
aplicativo.
Eu queria mostrar um texto em cima dele com o efeito brilhante. Usando backdrop-filter: blur(20px);
a sobreposição acima, pude ver isso: 😍
backdrop-filter
ainda não funciona automaticamente no Firefox. Duvido que os usuários ativem as opções para ativar backdrop-filter
deliberadamente apenas para ver esse efeito.
Eu tenho usado filtros svg para obter efeitos semelhantes para sprites
<svg id="gray_calendar" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 48 48 48">
<filter id="greyscale">
<feColorMatrix type="saturate" values="0"/>
</filter>
<image width="48" height="10224" xlink:href="tango48i.png" filter="url(#greyscale)"/>
</svg>
<feGaussianBlur stdDeviation="10"/>
exemplo de Keith .<image ...>
tag para aplicá-la a qualquer imagem ou até mesmo usar várias imagens.Isso pode ajudá-lo!
Isso muda dinamicamente o plano de fundo, apenas o IOS
.myBox {
width: 750px;
height: 500px;
border: rgba(0, 0, 0, 0.5) 1px solid;
background-color: #ffffff;
}
.blurBg {
width: 100%;
height: 100%;
overflow: hidden;
z-index: 0;
}
.blurBg img {
-webkit-filter: blur(50px);
margin-top: -150px;
margin-left: -150px;
width: 150%;
opacity: 0.6;
}
Aqui está minha opinião sobre isso com o jQuery. A solução não é universal, o que significa que seria necessário ajustar algumas posições e outras coisas, dependendo do design real.
Basicamente, o que eu fiz foi: ao disparar clone / remova todo o plano de fundo (o que deveria estar desfocado) para um contêiner sem conteúdo desfocado (que, opcionalmente, oculta o estouro se não tiver largura total) e posicione-o corretamente. Advertência é que, no redimensionamento da janela, a divisão borrada não corresponderá ao original em termos de posição, mas isso pode ser resolvido com algumas funções de redimensionamento na janela (sinceramente, não posso me preocupar com isso agora).
Eu realmente aprecio sua opinião sobre esta solução!
obrigado
Aqui está o violino , não testado no IE.
HTML
<div class="slide-up">
<div class="slide-wrapper">
<div class="slide-background"></div>
<div class="blured"></div>
<div class="slide-content">
<h2>Pop up title</h2>
<p>Pretty neat!</p>
</div>
</div>
</div>
<div class="wrapper">
<div class="content">
<h1>Some title</h1>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque molestie magna elit, quis pulvinar lectus gravida sit amet. Phasellus lacinia massa et metus blandit fermentum. Cras euismod gravida scelerisque. Fusce molestie ligula diam, non porta ipsum faucibus sed. Nam interdum dui at fringilla laoreet. Donec sit amet est eu eros suscipit commodo eget vitae velit.</p>
</div> <a class="trigger" href="#">trigger slide</a>
</div>
<svg version="1.1" xmlns="http://www.w3.org/2000/svg">
<filter id="blur">
<feGaussianBlur stdDeviation="3" />
</filter>
</svg>
CSS
body {
margin: 0;
padding: 0;
font-family:'Verdana', sans-serif;
color: #fff;
}
.wrapper {
position: relative;
height: 100%;
overflow: hidden;
z-index: 100;
background: #CD535B;
}
img {
width: 100%;
height: auto;
}
.blured {
top: 0;
height: 0;
-webkit-filter: blur(3px);
-moz-filter: blur(3px);
-ms-filter: blur(3px);
filter: blur(3px);
filter: url(#blur);
filter:progid:DXImageTransform.Microsoft.Blur(PixelRadius='3');
position: absolute;
z-index: 1000;
}
.blured .wrapper {
position: absolute;
width: inherit;
}
.content {
width: 300px;
margin: 0 auto;
}
.slide-up {
top:10px;
position: absolute;
width: 100%;
z-index: 2000;
display: none;
height: auto;
overflow: hidden;
}
.slide-wrapper {
width: 200px;
margin: 0 auto;
position: relative;
border: 1px solid #fff;
overflow: hidden;
}
.slide-content {
z-index: 2222;
position: relative;
text-align: center;
color: #333333;
}
.slide-background {
position: absolute;
top: 0;
width: 100%;
height: 100%;
background-color: #fff;
z-index: 1500;
opacity: 0.5;
}
jQuery
// first just grab some pixels we will use to correctly position the blured element
var height = $('.slide-up').outerHeight();
var slide_top = parseInt($('.slide-up').css('top'), 10);
$wrapper_width = $('body > .wrapper').css("width");
$('.blured').css("width", $wrapper_width);
$('.trigger').click(function () {
if ($(this).hasClass('triggered')) { // sliding up
$('.blured').animate({
height: '0px',
background: background
}, 1000, function () {
$('.blured .wrapper').remove();
});
$('.slide-up').slideUp(700);
$(this).removeClass('triggered');
} else { // sliding down
$('.wrapper').clone().appendTo('.blured');
$('.slide-up').slideDown(1000);
$offset = $('.slide-wrapper').offset();
$('.blured').animate({
height: $offset.top + height + slide_top + 'px'
}, 700);
$('.blured .wrapper').animate({
left: -$offset.left,
top: -$offset.top
}, 100);
$(this).addClass('triggered');
}
});