ロゴが帯になって流れ続ける ループの動き

通称:ループスライダーMarquee

帯にマウスを重ねると止まります。左上の「止める」でも止められます。ロゴの代わりに図形と架空の会社名を置いています。

取引先のロゴやカードを横一列の帯にして、止まらずに一定の速さで流し続けます。終わりと始まりが継ぎ目なくつながります。1枚ずつ止まって送るのは、次の無限カルーセルです。

自分のサイトの中身で、この形を作らせる指示文です。最初の「サイトの情報」を書き換えてから渡します。今あるページを直させるときは、その HTML を貼ります。

この形で作る
# 動かすもの(ここを書き換える)
- 動かす要素:〈例:各セクションの見出しとカード、商品の写真〉
- 今あるページ:〈今のページに付けるなら、その HTML と CSS を貼る。新しく作るなら空ける〉

# 動きの呼び名
一般に「ループスライダー」(Marquee)と呼ばれる動きです。

# 作ってほしい動き
Marquee(ロゴが帯になって流れ続ける)。取引先のロゴを横一列の帯にして、秒速 40px で流し続ける。帯は2段にし、上の段は右から左へ、下の段は左から右へ流す。終わりと始まりは継ぎ目なくつなぐ。

# 動き
- 流し方:ロゴの1組(ul)を複製して横に並べ、並べた全体を transform: translate3d(−1組の幅, 0, 0) まで linear で動かして、くり返す(animation-iteration-count: infinite)。1組の幅=ロゴの並びの幅+間隔 56px
- 継ぎ目:複製は、帯の幅を1組の幅で割って切り上げた数+1組。帯より短い組でも途切れない
- 速さ:動く時間=1組の幅 ÷ 40。ロゴの数や画面の幅が変わっても、秒速は同じにする。幅が変わったら数え直す
- 下の段は animation-direction: reverse で逆向きに流す

# 付ける場所
- トップページの「導入実績」の帯

# 守ってほしいこと
- 帯の上に「止める」ボタン(button)を置く。押すと止まり、文字と aria-label を「再開する」に替える。5秒を超えて動き続けるため必ず付ける
- 帯にマウスを重ねている間は止める(:hover で animation-play-state: paused)
- 帯が画面の外にある間は止める(IntersectionObserver。root: document を付ける)
- 複製した組は aria-hidden="true" と inert にし、読み上げ・Tab で2回たどらせない。帯は section に aria-label
- 動きを控える設定では流さず、複製を外して、ロゴを折り返して全部並べる。止めるボタンも出さない
- 動かすのは transform だけ。ロゴは img に alt(会社名)を付ける

# 軽さと配慮(どの動きでも守る)
- 動かすのは transform と opacity だけにする(top・left・width・height・margin は動かさない)
- 動きを控える設定(prefers-reduced-motion: reduce)のときは動かさず、最後の状態で表示する
- 画面に入ったかは IntersectionObserver で見る。scroll イベントで毎回位置を測らない
- JavaScript が動かない環境でも中身が見えるようにする(最初に隠す指定は、JavaScript が付ける class の下に書く)
- will-change を付けるなら動いている間だけにする

# 出力
- 足す CSS と JavaScript を分けて出す。ライブラリは使わない
- 時間・距離・速さの変わり方は CSS 変数にまとめ、あとから変えやすくする
- 今あるページを渡したときは、HTML に足す class や属性だけを書き、ほかの見た目は変えない

流れ続ける帯・めぐるカルーセル・浮き沈み・脈打つ輪・回る輪・移り変わる背景など、くり返し動き続ける動きを6種類の型に分け、AIへの指示文・試せる見本・コードを載せています。見本の下で速さや時間を変えると、指示文とコードも同じものに変わります。

ループの動きはどの型を選ぶか

ループの動きは、読み手が何もしなくても動き続けます。そのぶん、止める手段と止まる条件を先に決めておくことが大切です。横へ流れ続ける2つの型は、内容そのものを動かすので止めるボタンが要ります。その場で動き続ける4つの型は飾りや合図なので、付ける場所と数を絞ります。

こんなとき 向いている動き 形の型(UIパターン集)
取引先や掲載メディアのロゴを、数の多さが伝わるように並べたいロゴが帯になって流れ続ける(ループスライダー)告知バー(流れる文字型)
お客さまの声や事例のカードを、1枚ずつ止めて読んでもらいたいカードが1枚ずつ送られてめぐる(無限カルーセル)ギャラリー(カルーセル型)・ファーストビュー(スライダー型)
ファーストビューのイラストやバッジに、やわらかい動きを足したいふわふわと浮き沈みする(ふわふわアニメーション)—
いちばん押してほしいボタンを1つだけ目立たせたいボタンのまわりに輪が広がる(パルスアニメーション)CTA
読み込みを待っていることを伝えたい読み込み中の輪が回る(ローディングスピナー)。ほかの待たせ方は読み込み中の動き—
1つのセクションの背景だけ、雰囲気を変えたい背景の色がゆっくり移り変わる(グラデーションアニメーション)—
背景に、色ではなく形や粒で動きを出したいブロブ・ウェーブ(SVG・図形の動き)・パーティクル背景(画像の動き)—

告知バーの流れる文字型は、文のお知らせを流すものです。ここのループスライダーは、ロゴやカードを帯にして流すもので、読ませるより数の多さを見せます。並び方のわかる一覧の読み込みには、部品の動きの読み込み中の仮の形が光る(スケルトンローディング)も向いています。

どの型でも守ること

  1. 5秒を超えて流れ続けるものには、止めるボタンを付ける。マーキーと無限カルーセルは、ほかの内容と並んで動き続けるので、button の「止める」を置き、押したら「再開する」に替えます。マウスを重ねている間も止めます。
  2. 画面の外では止める。IntersectionObserver で見張り、見えていない間は animation-play-state: paused にします。root: document を付けると、iframe の中や埋め込みでも同じように見張れます。
  3. 動きを控える設定では、止まった絵にする。マーキーはロゴを折り返して全部並べ、カルーセルは自動で送らず、そのほかは動きを外します(見本の「動きを控える設定で見る」で確かめられます)。
  4. 動かすのは transform と opacity だけ。背景のグラデーションも、background-position ではなく大きく作った面を transform で動かします。
  5. 付ける場所と数を絞る。脈打つボタンは1画面に1つ、浮かせる飾りは3つくらいまで、動く背景は1ページに1か所までにします。何でも動いていると、どこを見ればよいのかがわからなくなります。

よくある質問 (FAQ)

自動で始まり、5秒を超えて動き続けるなら必要です。ウェブのアクセシビリティの指針(WCAG 2.2 の「一時停止、停止、非表示」)では、ほかの内容と並んで自動で動き続けるものに、止める・隠す手段を求めています。動くものがあると本文に集中できない人や、流れるロゴの名前を読みたい人のためです。ここのコードでは、止めるボタンに加えて、マウスを重ねている間と画面の外にある間も止めています。

読ませるかどうかで分けます。マーキーは止まらずに流れ続けるので、1つずつ読ませるものには向かず、取引先のロゴのように「たくさんある」ことを見せる帯に使います。無限カルーセルは1枚ずつ送って止まるので、お客さまの声のように1枚ずつ読んでほしいカードに使います。どちらも、最後の次に先頭が切れ目なく続きます。

transform と opacity だけを動かし、画面の外で止めれば、ほとんど重くなりません。この2つはブラウザが描き直さずに動かせます。重くなりやすいのは、background-position や box-shadow を動かす作りと、見えていない場所でも動かし続ける作りです。ここのコードは、グラデーションも大きく作った面を transform で動かし、6型とも画面の外では止めています。

止め方と、速さの数字です。「ロゴを流して」「ふわふわさせて」だけだと、止める手段がない作りや、画面の外でも動き続ける作り、継ぎ目で途切れる作りになりがちです。ここの指示文は、止めるボタン・マウスを重ねたとき・画面の外・動きを控える設定のそれぞれでどうするかと、秒速や1往復の時間を数字で書き、Marquee のような英語の一般名も添えています。