Appleのオーバーレイは単なる透明性以上のものと思われます。 CSSとおそらくJSでこの効果を達成する方法について何かアイデアはありますか?
CSS3でも可能です。
#myDiv {
-webkit-filter: blur(20px);
-moz-filter: blur(20px);
-o-filter: blur(20px);
-ms-filter: blur(20px);
filter: blur(20px);
opacity: 0.4;
}
ここでの例=> jsfiddle
http://codepen.io/Edo_B/pen/cLbrt
使用方法
それでおしまい。
また、キャンバスを使用して現在のDOMをコピーしてぼかしている場合は、どの画面でもこれを動的に実行できると思います。
[編集]将来の(モバイル)Safari 9では、まさにこれのために-webkit-backdrop-filter
があるでしょう。 this ペンをご覧ください。
私は過去4週間このことについて考え、この解決策を思い付きました。
[編集]私は CSS-Tricks についてもっと綿密な記事を書いた
この手法では CSS Regions を使用しているため、現時点ではブラウザのサポートは最適ではありません。 ( http://caniuse.com/#feat=css-regions )
この手法の重要な部分は、CSSリージョンを使用してレイアウトからコンテンツを分離することです。最初に.content
でflow-into: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>
このレイアウトの2つの重要な部分は.header__background
と.phone__content
です - これらはコンテンツが流れるべきコンテナです。
CSSリージョンを使うとflow-from:content
と同じくらい簡単です(.content
は名前付きリージョンcontent
に流れています)
今トリッキーな部分が来ます。常に.header__background
を通してコンテンツを流したいのです。それは、コンテンツが曖昧になる部分だからです。 (webkit-filter:blur(10px);
を使用)
これは、コンテンツが常に.content
を介して流れるようにするために、transfrom:translateY(-$HeightOfTheHeader)
the.header__background
によって行われます。この変換は、ヘッダーの下にあるコンテンツを常に非表示にします。これを修正すると簡単に追加できます
.header__background:before{
display:inline-block;
content:'';
height:$HeightOfTheHEader
}
変換に対応するため。
これは現在働いています:
これは、 element style属性のおかげで、FireFoxで可能になりました。
この実験的な属性を使用すると、背景画像として任意のHTMLコンテンツを使用できます。そのため、背景を作成するには3つのオーバーレイが必要です。
-moz-element
背景でオーバーレイします。 FXはfilter: blur()
属性をサポートしていないので、SVGが必要です。だから、まとめる:
SVGブラーフィルタ(FXで動作します、他のブラウザはfilter:blur()
を使うことができます):
<svg>
<defs>
<filter id="svgBlur">
<feGaussianBlur stdDeviation="10"/>
</filter>
</defs>
</svg>
CSSブラースタイル:
.behind-blur
{
filter : url(#svgBlur);
opacity: .4;
background: -moz-element(#content);
background-repeat: no-repeat;
}
最後に3層:
<div class="header" style="background-color: #fff"> </div>
<div class="header behind-blur"> </div>
<div class="header">
Header Text, content blurs behind
</div>
それからこれを動かすためにはbackground-position
を設定するだけです(jQueryのサンプルですが、あなたは何でも使用できます):
$('.behind-blur').css({
'background-position': '-' + left + 'px -' + top + 'px'
});
このデモページをチェックしてください。
このデモはドキュメントをイメージとしてレンダリングするためにhtml2canvasを使用します。
http://blurpopup.labs.daum.net/
私が先日見つけたこのペンは、ほんの少しのcssと21行のjavascriptでそれを美しくしているように見えました。これが見つかるまでcloneNode jsコマンドについて聞いたことはありませんでしたが、確かに必要なものに対しては完全に機能しました。
http://codepen.io/rikschennink/pen/zvcgx
詳細:A.基本的にあなたのコンテンツdivを見てそれのcloneNodeを呼び出すのでそれはそれからそれがそれがページの上に置かれているオーバーフロー:隠されたヘッダオブジェクトの中に置かれる複製を作る。 B.それから、両方の画像が一致しているように見え、ヘッダー画像をぼやけさせるように、スクロールを待機します。達成された効果.
それらが言語に組み込まれたわずかなスクリプト化可能性を得るまでは、CSSでは実際には完全には実行できません。
例はここにあります:
昨日、あなたが話していることを実際に行う簡単なデモを作成しました。 http://bit.ly/10clOM9 このデモは加速度計に基づいて視差を計算するので、iPhone自体で最もうまく機能します。基本的に、ぼかしている固定位置の要素に、オーバーレイしているコンテンツをコピーするだけです。
注意:パネルを見るには上にスワイプします。
(私は恐ろしいCSSのIDを使用しましたが、あなたはアイデアを得る)
#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);
}
これをチェックしてください http://codepen.io/GianlucaGuarini/pen/Hzrhf それ自身の下にある要素の背景画像を複製せずに効果があるようです。この例でもテキストがぼやけています。
Vague.js
var vague = $blurred.find('iframe').Vague({
intensity:5 //blur intensity
});
vague.blur();
それについてはあまり確信が持てません、私はCSSが現時点でこれを行うことができないと思います
しかしChris Coyierはそのような効果を達成するために複数の画像を使った古いテクニックについてブログに書いています http://css-tricks.com/blurry-background-effect/
私はsvgフィルタを使ってスプライトにも同様の効果を得ています
<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"/>
の例のように、必要なフィルタに変更するだけです。<image ...>
タグを使用して任意の画像に適用したり、複数の画像を使用したりすることもできます。これはあなたを助けるかもしれません!
.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;
}