Javascript iOS 7';使用CSS的模糊叠加效果?
苹果的覆盖层似乎不仅仅是一种透明度。关于如何使用CSS和JS实现这种效果,有什么想法吗Javascript iOS 7';使用CSS的模糊叠加效果?,javascript,css,user-interface,blur,Javascript,Css,User Interface,Blur,苹果的覆盖层似乎不仅仅是一种透明度。关于如何使用CSS和JS实现这种效果,有什么想法吗 对此我不是很确定,我相信CSS目前无法做到这一点 然而,Chris Coyier在博客中介绍了一种使用多个图像的旧技术,以实现这种效果,CSS3可以: #myDiv { -webkit-filter: blur(20px); -moz-filter: blur(20px); -o-filter: blur(20px); -ms-filter: blur(20px); f
对此我不是很确定,我相信CSS目前无法做到这一点
然而,Chris Coyier在博客中介绍了一种使用多个图像的旧技术,以实现这种效果,CSS3可以:
#myDiv {
-webkit-filter: blur(20px);
-moz-filter: blur(20px);
-o-filter: blur(20px);
-ms-filter: blur(20px);
filter: blur(20px);
opacity: 0.4;
}
这里的示例=>昨天做了一个快速演示,它实际上实现了您所谈论的内容。 这个演示基于加速计进行视差测量,因此它在iPhone上的效果最好。我基本上只是把我们叠加的内容复制到一个固定位置的元素中,这个元素会变得模糊 注意:向上滑动以查看面板 (我使用了可怕的css id,但你明白了)
- 克隆要模糊的元素
- 将其附加到要位于顶部的图元(磨砂窗)
- 使用webkit过滤器模糊克隆元素
- 确保克隆的元素处于绝对位置
- 滚动原始元素的父元素时,捕获scrollTop和scrollLeft
- 使用requestAnimationFrame,现在将webkit转换动态设置为translate3d,x和y值设置为scrollTop和scrollLeft
- 确保在webkit浏览器中打开
- 滚动手机内部视图(最好使用苹果鼠标…)
- 请参见在操作中模糊页脚
我还相信,如果使用canvas复制当前dom并使其模糊,任何屏幕都可以动态执行此操作。查看此演示页面
此演示使用html2canvas将文档呈现为图像
多亏了style属性,FireFox现在可以做到这一点 此实验属性允许您使用任何HTML内容作为背景图像。因此,要创建背景,需要三个覆盖:
-moz元素
背景覆盖。请注意,FX不支持filter:blur()
属性,因此我们需要一个SVGfilter:blur()
):
最后三层:
<div class="header" style="background-color: #fff"> </div>
<div class="header behind-blur"> </div>
<div class="header">
Header Text, content blurs behind
</div>
[编辑]
在未来的(移动)Safari 9中,将有-webkit background filter
,用于此目的。看看我用来展示它的钢笔
在过去的4周里,我一直在思考这个问题,并提出了这个解决方案
[编辑]
我在网上写了一篇更深入的帖子
此技术正在使用,因此浏览器支持目前不是最好的。()
该技术的关键部分是使用CSS区域将内容从布局中分离出来。首先使用流到:content
定义.content
元素,然后使用适当的结构模糊标题
布局结构:
<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>
以适应变换
这项工作目前正在:
- Chrome 29+(启用“实验性webkit功能”/“启用-实验性-web-platform-features”)
- Safari 6.1种子6
- iOS7(速度慢且无滚动)
<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>
- viewBox属性将仅选择所包含图像中所需的部分
- 只需将过滤器更改为您想要的任何过滤器,例如Keith的
示例 - 使用
标记将其应用于任何图像,甚至可以使用多个图像 - 您可以使用js构建它,并将其用作图像或在css中使用id
直到他们在语言中内置了少量的脚本能力,才真正能够完全使用CSS。以下是我对jQuery的看法。解决方案不是通用的,这意味着必须根据实际设计调整一些位置和内容 基本上,我所做的是:在触发时克隆/删除整个背景(应该模糊的内容)到一个包含未模糊内容的容器中(如果不是全宽,则可以选择隐藏溢出),并正确定位。需要注意的是,在窗口上调整模糊div的大小将在位置上与原来的不匹配,但这可以通过一些窗口上调整大小的功能来解决(老实说,我现在不介意) 我非常感谢您对这个解决方案的意见 谢谢 这是未在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>
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');
}
});
看看这个
好像是真的
<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>
.header__background:before{
display:inline-block;
content:'';
height:$HeightOfTheHEader
}
<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>
<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>
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;
}
// 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');
}
});
var vague = $blurred.find('iframe').Vague({
intensity:5 //blur intensity
});
vague.blur();
.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;
}
.my-class {
backdrop-filter: blur(30px);
background: transparent; // Make sure there is not backgorund
}