Mill's Note

【CSS-rules】background-attachment

/

background-attachmentは、スクロール時の背景画像の動きを指定するプロパティ。
単体で指定したり、組み合わせたりする事で、独特の動きのある表現が可能になります。

background の種類

.用途親要素
1background-image背景画像、又は、グラデーションカンマで繋いで複数指定可
2background-attachment位置の表示方法固定(fix)するか要素と一緒にスクロールするか等
3background-position画像の初期位置最初に表示される位置
4background-size画像のサイズ要素に対する相対、又は、指定サイズ
5background-origin要素に対する配置(開始)位置背景の開始点(左上)を指定する
6background-clip画像自身の配置位置指定に合わせ要素内でクリップされる
7background-repeat画像の繰り返し繰り返しの有無、方向、配置を指定
8background-color背景色

background-attachment 指定できる値

値ごとに位置 (移動方法) が異なります。

.指定名位置説明サイズ基準
1background-attachment: local;要素内で移動内容と一緒に移動する要素
2background-attachment: scroll;要素内で固定要素内で固定されるが、要素と一緒に移動する要素
3background-attachment: fixed;ビューポートに固定要素が移動しても位置が変わらないビューポート
4scroll + local要素内で 固定+移動画像ごとに指定する

background-attachment サンプル

背景画像は個別に動かせるよう、以下の 2種類の画像を重ねがけしています。
共通となるcssはまとめて、それぞれclassを2重掛けにします。

  • bga1.png
  • サイズ:600×350px
  • タイプ:png24(透過)
  • bga2.png
  • サイズ:600×350px
  • タイプ:png8
共通CSSとHTMLを見る
CSS code
.bga {
  aspect-ratio: 2 / 1;  /* 縦横比 */
  width: 600px;         /* 横幅 */
  max-width: 100%;      /* 横幅 最大 */ 
  margin-bottom: 24px;
  overflow-y: auto;     /* 縦スクロール */
  border: solid 1px #ccc;
  background-image:     /* 背景画像 2重掛け */
    url("https://millmi.com/wp/wp-content/uploads/2024/09/bga1.png"),
    url("https://millmi.com/wp/wp-content/uploads/2024/09/bga2.png");
  background-color: #E4F9FF;
  background-size: 100% auto;   /* 背景画像 サイズ */
  background-repeat: no-repeat; /* 背景画像 繰り返し無 */
}
.bga p {
  margin: 20px 15px 10px 45%;
  font-size: 16px;
}
.bga p.f14 {font-size: 14px;}
HTML code
<div class="bga"> /* ←値に合わせclassを2重掛けにします */
  <p>むかしむかし、ひとりの貧しい王子がいました~~</p>
  <p>それにしても、この王子が皇帝のお姫さまにむ~~</p>
  <p>では、わたしたちは、そのお話を聞くことにし~~</p>
  <p class="f14">ブタ飼い ~~</p>
</div>

以下サンプルの要素やビューポートをスクロールしてみてください^^


1 – background-attachment: local;

テキストと一緒に移動。
サイズは要素に準じ、幅100% = 要素幅 となります。

むかしむかし、ひとりの貧しい王子がいました。王子は一つの国をもっていましたが、それはとても小さな国でした。でも、いくら小さいとはいっても、お妃きさきをむかえるのに、ふそくなほどではありませんでした。さて、この王子はお妃をむかえたいと思いました。

それにしても、この王子が皇帝のお姫さまにむかって、「わたくしと結婚してくださいませんか?」などと言うのは、あまりむてっぽうすぎるというものでした。けれども、王子は、思いきって、そうしてみました。なぜって、王子の名前は遠くまで知れわたっていましたし、それに、王子が結婚を申しこめば、よろこんで、はい、と、言いそうなお姫さまは、何百人もいたからです。ところで皇帝のお姫さまは、はい、と、言ったでしょうか?

では、わたしたちは、そのお話を聞くことにしましょう。

ブタ飼い (Hans Christian Andersen)/青空文庫

HTML code
<div class="bga bga1"> ~~~ </div>
CSS code
.bga1 {
  background-attachment: local;
}

2 – background-attachment: scroll;

要素内で固定されますが、要素が動くときは一緒に移動します。
サイズは要素に準じ、幅100% = 要素幅 となります。

むかしむかし、ひとりの貧しい王子がいました。王子は一つの国をもっていましたが、それはとても小さな国でした。でも、いくら小さいとはいっても、お妃きさきをむかえるのに、ふそくなほどではありませんでした。さて、この王子はお妃をむかえたいと思いました。

それにしても、この王子が皇帝のお姫さまにむかって、「わたくしと結婚してくださいませんか?」などと言うのは、あまりむてっぽうすぎるというものでした。けれども、王子は、思いきって、そうしてみました。なぜって、王子の名前は遠くまで知れわたっていましたし、それに、王子が結婚を申しこめば、よろこんで、はい、と、言いそうなお姫さまは、何百人もいたからです。ところで皇帝のお姫さまは、はい、と、言ったでしょうか?

では、わたしたちは、そのお話を聞くことにしましょう。

ブタ飼い (Hans Christian Andersen)/青空文庫

HTML code
<div class="bga bga2"> ~~~ </div>
CSS code
.bga2 {
  background-attachment: scroll;
}

3 – background-attachment: fixed;

ビューポートに固定され、要素が動いても位置は変わりません。

サイズと位置はビューポートが基準となり、幅100% = ビューポート幅 (top:0, left:0) となる為、注意が必要です。
分かりやすいよう、サンプルは 幅100%のまま にしています。

但し、position: fixed; 同様、要素に transform, filter 等を掛けると要素に固定され、 background-attachment: scroll; と同じ作動になります。

むかしむかし、ひとりの貧しい王子がいました。王子は一つの国をもっていましたが、それはとても小さな国でした。でも、いくら小さいとはいっても、お妃きさきをむかえるのに、ふそくなほどではありませんでした。さて、この王子はお妃をむかえたいと思いました。

それにしても、この王子が皇帝のお姫さまにむかって、「わたくしと結婚してくださいませんか?」などと言うのは、あまりむてっぽうすぎるというものでした。けれども、王子は、思いきって、そうしてみました。なぜって、王子の名前は遠くまで知れわたっていましたし、それに、王子が結婚を申しこめば、よろこんで、はい、と、言いそうなお姫さまは、何百人もいたからです。ところで皇帝のお姫さまは、はい、と、言ったでしょうか?

では、わたしたちは、そのお話を聞くことにしましょう。

ブタ飼い (Hans Christian Andersen)/青空文庫

HTML code
<div class="bga bga3"> ~~~ </div>
CSS code
.bga3 {
  background-attachment: fixed;
}

4 – scroll + local (2種類を重ねる)

背景画像を複数設定した場合、値をカンマ','で繋ぐ事で、背景画像ごとにbackground-attachment を対応させる事ができます。

サンプルは気球を固定、背景を移動にしていますが、使い方次第で色々面白い表現ができますよ^^

むかしむかし、ひとりの貧しい王子がいました。王子は一つの国をもっていましたが、それはとても小さな国でした。でも、いくら小さいとはいっても、お妃きさきをむかえるのに、ふそくなほどではありませんでした。さて、この王子はお妃をむかえたいと思いました。

それにしても、この王子が皇帝のお姫さまにむかって、「わたくしと結婚してくださいませんか?」などと言うのは、あまりむてっぽうすぎるというものでした。けれども、王子は、思いきって、そうしてみました。なぜって、王子の名前は遠くまで知れわたっていましたし、それに、王子が結婚を申しこめば、よろこんで、はい、と、言いそうなお姫さまは、何百人もいたからです。ところで皇帝のお姫さまは、はい、と、言ったでしょうか?

では、わたしたちは、そのお話を聞くことにしましょう。

ブタ飼い (Hans Christian Andersen)/青空文庫

HTML code
<div class="bga bga4"> ~~~ </div>
CSS code
.bga4 {
  background-attachment: scroll, local;
}