background-attachment: fixed で背景を固定表示した際に、iOSのSafariで固定されないということがあったので、その際の対応方法をメモしておきます。
サンプルコード
まずはうまくいかなかった例です。
<section class="section"> <div class="box"> 〜 略 〜 </div> </section>
.sectionに対して固定する背景を設定します。
.section { background: url(bg_sp.jpg) center top no-repeat fixed; background-size: 100% auto; } @media screen and (min-width: 768px), print { .section { background-image: url(bg_pc.jpg); background-size: cover; } }
これで基本的には問題なさそうだったのですが、iOSのSafariで背景の固定が効いていませんでした。
うまくいかなかった場合のデモページ
調べているとbackground-size と併用するとうまくいかないという情報をいくつか見かけたので、先ほどの例からbackground-sizeを外して試してみます。
.section { background: url(bg_sp.jpg) center top no-repeat fixed; } @media screen and (min-width: 768px), print { .section { background-image: url(bg_pc.jpg); } }
ただこの場合も同様に、背景の固定は効かないようでした。
うまくいかなかった場合のデモページ2
そもそもiOS Safariでbackground-attachment: fixed が対応していない?ような気がします。
Can I useなどには特にそれらしい記載はありませんでしたが、この不具合自体は数年前から報告されていて、現在も対応されていない状態のようです。
最終的に background-attachment: fixedは使用しないで、擬似要素をposition: fixedで固定表示にして、その要素に背景を設定するようにしました。
.section { position: relative; } .section:before { content: ''; display: block; position: fixed; top: 0; left: 0; width: 100%; height: 100vh; background: url(bg_sp.jpg) center top no-repeat; background-size: 100% auto; } @media screen and (min-width: 768px), print { .section:before { background-image: url(bg_pc.jpg); background-size: cover; } }
これでiOSのSafariでも背景の固定を確認できました。
対応後のデモページ
コメントが承認されるまで時間がかかります。