// この記事は、 note に投稿した記事の再掲です。
background-attachment: fixed;
を指定した親要素に対して transform
プロパティが使われていると fixed
がきかない様子。
transform
プロパティを設定すると、その子要素が全て relative
になってしまうのが原因ぽい?
「スクロールして、要素が画面の中に表示されたらフェードインする」って実装をしたときにハマったのでメモ。
HTML
<div class="contents">
<div class="bg-fixed"></div> <!-- fixedしたい背景要素は別にする -->
<div class="fade-in"> <!-- transformを利用する要素は背景要素は別にする -->
<p>Hello World!</p>
</div>
</div>
CSS
css
.contents {
position: relative;
}
// 背景要素をabsoluteにする
.bg-fixed {
position: absolute;
width: 100%;
height: 100%;
display: block;
left: 0;
top: 0;
background: url("bg.jpg") no-repeat center top fixed;
background-size: cover;
}
.fade-in {
opacity: 0;
transform: scale(0.8);
transition: all .3s ease;
}
// 要素がスクロールされて "visible" クラスを付与されたときに適応するスタイル
.fade-in.visible {
opacity: 1;
transform: scale(1);
}