Appleのオーバーレイは単なる透明度ではないようです。CSSやおそらくJSでこの効果を実現する方法についてのアイデアはありますか?
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
-moz-filter: blur()
。代わりに、SVGフィルターを使用する必要があります。詳細については、私の回答を参照してください。
http://codepen.io/Edo_B/pen/cLbrt
使用:
それでおしまい。
また、キャンバスを使用して現在のdomをコピーしてぼかすと、どの画面でもこれを動的に実行できると思います。
[編集]将来(モバイル)Safari 9には-webkit-backdrop-filter
、まさにこれがあるでしょう。見せるために作ったこのペンを見てください。
私はこれを過去4週間考え、この解決策を思いつきました。
[編集]私はCSS-Tricksについてより詳細な記事を書きました
この手法はCSSリージョンを使用しているため、現時点ではブラウザのサポートは最適ではありません。(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
andであり、.phone__content
これらはコンテンツがフローするコンテナです。
CSSリージョンを使用すると、flow-from:content
(.content
名前付きリージョンに流れ込んでいますcontent
)
ここでトリッキーな部分があります。私たちは常にコンテンツを.header__background
は、コンテンツがぼかされるセクションだからです。(を使用webkit-filter:blur(10px);
)
これは、によって行われたコンテンツは常にかかわら流れますことを保証するために。この変換では、ヘッダーの下のコンテンツが常に非表示になります。これを修正すると簡単に追加できますtransfrom:translateY(-$HeightOfTheHeader)
.content
.header__background
.header__background:before{
display:inline-block;
content:'';
height:$HeightOfTheHEader
}
変換に対応します。
これは現在以下で動作しています:
これは、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を呼び出し、複製を作成して、ページの上部にあるoverflow:hiddenヘッダーオブジェクト内に配置します。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);
}
それについてはよくわかりませんが、CSSは現時点ではこれを行うことができないと思います
しかしクリスCoyierは、このような効果を達成するために、複数のイメージを持つ古い技術についてブログしている、http://css-tricks.com/blurry-background-effect/
これをチェック くださいhttp://codepen.io/GianlucaGuarini/pen/Hzrhf それ自体の下にある要素の背景画像を複製せずに効果があるようです。例でもテキストがぼやけています。
Vague.js
var vague = $blurred.find('iframe').Vague({
intensity:5 //blur intensity
});
vague.blur();
今日の2020年4月11日以降、これはbackdrop-filter
CSSプロパティを使用ます。これは、Chrome、Safari、およびEdgeの安定した機能です。
これをハイブリッドモバイルアプリに追加したかったので、Android / Chrome WebviewとSafari WebViewでも利用できます。
CSSプロパティを追加するだけです。
.my-class {
backdrop-filter: blur(30px);
background: transparent; // Make sure there is not backgorund
}
このペンで機能するか、デモを試す:
#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>
マクドナルドのアプリは非常にカラフルなので、例を挙げてみましょう。スクリーンショットを撮りbody
、アプリの背景に追加しました。
その上に光沢のあるテキストを表示したかったのです。backdrop-filter: blur(20px);
その上のオーバーレイで使用して、これを見ることができました:😍
backdrop-filter
ただし、Firefoxではまだ自動的に機能しません。ユーザーがbackdrop-filter
この効果を確認するためだけに意図的にアクティブ化するオプションをオンにすることはないでしょう。
私は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;
}
これがjQueryでの私の見解です。解決策は普遍的なものではありません。つまり、実際の設計によっては、位置やものの一部を微調整する必要があります。
基本的に私がしたことは:トリガーで背景全体(ぼかす必要がある)をぼやけていないコンテンツ(オプションで、全幅でない場合は非表示のオーバーフローがあります)のあるコンテナーにクローン/削除して、正しく配置します。警告は、ウィンドウのサイズ変更でぼやけたdivが位置に関して元の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>
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');
}
});