#65 背景全画面表示をぼやかせた後にクリアにしたい【ぴよぴよコーダーの開発日記】
まずは、背景を全画面表示にする
HTML
<html>
<head>
</head>
<body>
<header></header>
</body>
</html>
CSS
header {
height: 100vh;
background: url('sample.jpg') no-repeat top center / cover;
}
次に、ぼやかせる
CSSにfilter: blur(20px)を追加
header {
height: 100vh;
background: url('sample.jpg') no-repeat top center / cover;
filter: blur(20px);
}
デモ ← 四隅のフチが白っぽくぼやける
次に、四隅のフチが白くならないよう、要素の幅を大きくして※1、マイナスマージンをかける※2。親要素にoverflow:hiddenをかけて、マイナスマージン分をはみ出さないようにする※3。
HTML 親要素 wrapper を追加
<div class="wrapper">
<header></header>
</div>
CSS
header {
width: calc(100vw + 60px); //※1
height: calc(100vh + 60px);//※1
margin: -30px; //※2
background: url('sample.jpg') no-repeat top center / cover;
filter: blur(20px);
}
.wrapper {
overflow: hidden; //※3
}
blurが20pxだから 20*2で40px追加でいいかと思ったけど、40pxでもまだ白さが残ったので。さらに20px追加して60pxにしました。
デモ ← 四隅のフチが白っぽくぼやけない
後は、ぼやけをクリアにするアニメーションをつくる
CSS
header {
margin: -30px;
width: calc(100vw + 60px);
height: calc(100vh + 60px);
background: url('sample.jpg') no-repeat top center / cover;
animation: fadeoutBlur 3s ease-in-out;
}
@keyframes fadeoutBlur {
0%{
filter: blur(20px);
}
100%{
filter: blur(0);
}
}
デモ 3秒かけてゆっくりクリアになっていく 完成
完成かと思われたが、iOSで、まだ白っぽくなるので、アニメーションによるちらつきをなくすために、-webkit-transform: translateZ(0); を追加
CSS
header {
margin: -30px;
width: calc(100vw + 60px);
height: calc(100vh + 60px);
width: calc(100dvw + 60px); //iOS対応
height: calc(100dvh + 60px); //iOS対応
background: url('./img/m95.jpg') no-repeat 0 0 / cover;
-webkit-transform: translateZ(0); //iOS対応
animation: fadeoutBlur 3s ease-in-out;
}
参考
このページのヘッダー画像 ジョルジュ・スーラ「セーヌ川からの眺め」
この記事が気に入ったらサポートをしてみませんか?