Contents - 目次
CSSで背景画像を複数指定したい。
backgroundプロパティで可能なはずだが…
CSS3以降からは背景画像の複数指定が可能となっている。ところが、時々うまく表示されないことがある。
例えば、下記のような書き方では、Chromeでは普通に2つ表示されるが、Safariでは1つの画像しか表示されない。
デザイン的にシンメトリーにしたいのに、片方が表示されないのでなんとかしたい。
CSS
例)
下記のコードではSafariが対応できない。ChromeはOK。
@keyframes exsample {
0% {
background:
url("assets/img/bg_paint_strokes_00.webp") no-repeat bottom 180px left -170px / 300px,
url("assets/img/bg_paint_strokes_00b.webp") no-repeat bottom 0 right -320px / 400px;
}
100% {
background:
url("assets/img/bg_paint_strokes_00.webp") no-repeat bottom 200px left -190px / 300px,
url("assets/img/bg_paint_strokes_00b.webp") no-repeat bottom 0 right -350px / 400px;
}
}
MDNサイトを参考にbackgroundのCSSを変更。
CSSの記述を変更。
MDNを参考に、以下のように書き方を変えても、やはりChromeでは表示されるのでPCは問題ないが、なぜかSafariがこの記述に対応していない。
SafariはiPhoneでのシェア率が高いのでちょっとやっかいだ。
CSS
例)
下記のコードではやはりSafariが対応できない。ただしChromeはOK。
(※backgroundを分割指定にしても変わらないということ。)
@keyframes exsample {
0% {
background-image:
url("assets/img/bg_paint_strokes_00.webp"),
url("assets/img/bg_paint_strokes_00b.webp");
background-repeat:
no-repeat,
no-repeat;
background-position:
bottom 180px left -170px,
bottom 0 right -320px;
background-size:
300px,
400px;
}
100% {
background-image:
url("assets/img/bg_paint_strokes_00.webp"),
url("assets/img/bg_paint_strokes_00b.webp");
background-repeat:
no-repeat,
no-repeat;
background-position:
bottom 200px left -190px,
bottom 0 right -350px;
background-size:
300px,
400px;
}
}
background複数指定と、animationとの組み合わせが原因だった。
原因はanimationプロパティとの組み合わせ。
今回はCSSアニメーションを使っていたので、この組み合わせを疑った。
そして一旦アニメーションを外してみたところ、Safariでも表示できた。
結果的に下記の記述で、ChromeでもSafariでも、意図通りに複数の背景画像のアニメーションが動いた。
解決方法。
CSS
例)
アニメーションのスタート部分、0%部分のコードを丸ごと元のセレクタにも記述したところ解決。
※注)
- animationもbackgroundも一括指定できるが、あえて分割指定している。今回の現象とはおそらく無関係。
- 2行目のdisplay〜7行目のmargin-topまでもおそらく今回の件とは無関係だが、実際に検証したコードなので間違いのないようにあえて残している。
- 当サイトのトップページで検証したので、もし実際の動きを確認されたい場合はこちらをご参照ください。両端の筆(stroke)の部分です。
.exsample {
display: flex;
justify-content: center;
align-items: center;
width: 100%;
height: 100vh;
margin-top: -200px;
animation-name: exsample;
animation-duration: 3s;
animation-timing-function: cubic-bezier(0.618, 0.2, 0.05, 1);
animation-delay: 1s;
animation-iteration-count: 1;
animation-direction: normal;
animation-fill-mode: forwards;
/* ここに@keyframesの0%の指定を追記する。 */
background-image:
url("assets/img/bg_paint_strokes_00.webp"),
url("assets/img/bg_paint_strokes_00b.webp");
background-repeat:
no-repeat,
no-repeat;
background-position:
bottom 180px left -170px,
bottom 0 right -320px;
background-size:
300px,
400px;
}
@keyframes exsample {
0% {
background-image:
url("assets/img/bg_paint_strokes_00.webp"),
url("assets/img/bg_paint_strokes_00b.webp");
background-repeat:
no-repeat,
no-repeat;
background-position:
bottom 180px left -170px,
bottom 0 right -320px;
background-size:
300px,
400px;
}
100% {
background-image:
url("assets/img/bg_paint_strokes_00.webp"),
url("assets/img/bg_paint_strokes_00b.webp");
background-repeat:
no-repeat,
no-repeat;
background-position:
bottom 200px left -190px,
bottom 0 right -350px;
background-size:
300px,
400px;
}
}
以上、参考になれば幸いです。
※Webデザインは実務数年、職業訓練校講師数年、フリーランス数年、計15年以上のキャリアがありますが、一気にがぁっと書いているので「です・ます調」ではありません。(元々はメモ書きでした。) ※事実や経験、調査や検証を基にしていますが、万一なにかしら不備・不足などがありましたらすみません。お知らせいただければ訂正いたします。 ※写真は主にUnsplashやPixabayのフリー素材を利用させていただいております。その他の写真や動画もフリー素材やパブリックドメイン、もしくは自前のものを使用しております。
CSS 関連メモ。
- CSSの一部が効かないときは、キャッシュやダークモードが原因かも。
- first-letterが効かないとき。覚えると便利なCSS擬似要素。
- rgb()で透明度も。CSSの新しい色指定と使い方の例。
- CSSでダークモード。prefers-color-schemeの使い方と効かないとき。
- CSSで縦書き。writing-modeの使い方。効かないときは?
- scroll-snap-typeの使い方。CSSでカルーセル。効かないときは?
- CSSのブレイクポイントの書き方。メディアクエリはいくつがおすすめ?
- CSS gapの使い方?Flexboxでレスポンシブ?効かないときは?
- CSSの変数と関数。覚えておくと便利なCSSプログラミング。
- CSS aspect-ratioの使い方。効かないときはどうする?
- text-overflowの使い方。CSSで文字数を制御。効かないときは?
- detailsとsummaryの使い方。HTML&CSS or jQueryアコーディオン。
- CSSブレンドモード。mix-blend-modeの例一覧。乗算やスクリーンを。
- counter-incrementの使い方。CSSで連番。増えない時の対処。コピペOK。
- CSS フォントサイズはどうする? remの基本かつ効果的な使い方。
- line-clampの使い方。CSSで複数行指定。効かないときは?
- CSSの@whenと@else。新しいブレイクポイントの設定方法?
- 縁取り文字はCSSのtext-strokeで可能。(非推奨の時代は終わり。)
- CSS変数の使い方例。:rootを使ってカスタムプロパティを覚える。
- CSSでフェードイン。JS不要、コピペ可。ちょっとリッチな雰囲気を。
- CSS カラーコードで透明度を指定したいとき。(16進数6つ+2つで。)
- CSS max-width レスポンシブ対応のピクセル指定は崩れる原因となる。
- CSSのobject-fitの使い方。トリミングやサイズの実装例。
- backgroundの複数指定が効かない時の確認事項。(CSSアニメーションとの組み合わせ。)
- CSS filterで色変更。色相・彩度・明度? filterプロパティでできること。
- CSS position: stickyの使い方。効かない!ときはここをチェック。