ネイティブ CSS で無限テキストカルーセルを実装する一般的な方法

ネイティブ CSS で無限テキストカルーセルを実装する一般的な方法

テキストカルーセルは私たちの日常生活で非常に一般的です。スーパーマーケットや実店舗の入り口には、テキストカルーセル付きの看板がよく見られます。この記事では、その実装ロジックを詳しく紹介します。

シナリオ

店舗のドアの看板には、水平に動くテキストでアナウンスを表示する必要があります (わかりやすいように境界線が追加されます)。

論理的な説明

無限のテキスト回転を実現するための主なロジックは 2 つあります。

  • テキストを水平に移動する
  • テキストは冒頭で終了

最初の実装方法は、CSS アニメーション transform: translateX(-50%) を使用することです。これは、それ自体の半分を左に移動することを意味します。

ポイント2の実装方法はポイント1と関連しています。デフォルトでは、CSS アニメーションは再生が完了した後に変化します。つまり、再生が完了すると位置が初期位置に変化します (変化は瞬時に完了し、肉眼では認識できません)。そのため、変化を使用してテキストの先頭と末尾を接続できます。

同一のテキストを 2 つ使用します。最初のテキストの再生が終了し、2 番目のテキストの再生が開始されると、アニメーションが突然変化し、最初のテキストの再生が再開されます。2 つのテキストの内容は同じであるため、ユーザーはそれに気づきません。

考える

この実装は現在一般的ですか?

この方法は実際にほとんどのニーズを解決しましたが、テキストが少ない場合やテキストの幅がウィンドウの幅よりも小さい場合は問題が発生します。私が描いた回転ロジック図は、その一例にすぎません。

テキストの幅がウィンドウの幅よりも小さい場合、これを実現するにはどうすればよいですか?

実際、原理は同じです。テキスト回転の中心的な機能の 1 つは、2 つの同一のテキストを持つことです。ただし、前提条件として、テキストの幅がウィンドウの幅よりも大きくなければなりません。

この前提条件をどのように達成するのでしょうか?

答えは、テキストの幅がウィンドウの幅よりも大きくなるまでテキスト全体をコピーし、それを 2 つの同一のテキストに処理することです。

要約する

無限テキスト回転のポイントは次のとおりです。

  • テキストの幅はウィンドウの幅よりも大きくする必要があります。テキストの幅が足りない場合は、テキストの幅がウィンドウの幅よりも大きくなるまでテキスト全体をコピーします。
  • 2つの同一のテキスト
  • 距離の50%を移動する

コード:

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
    <メタ文字セット="UTF-8" />
    <meta name="viewport" content="width=デバイス幅、初期スケール=1.0" />
    <title>テキスト無限カルーセル</title>
 
    <スタイル>
        体 {
            ディスプレイ: フレックス;
            コンテンツの中央揃え: 中央;
            アイテムの位置を中央揃えにします。
            高さ:100vh;
        }
 
        #包む {
            オーバーフロー: 非表示;
            位置: 相対的;
            幅: 200ピクセル;
            高さ: 20px;
            空白: ラップなし;
        }
 
        #内部 {
            位置: 絶対;
            アニメーション: スライド 5 秒 線形無限;
        }
 
        #初め{
            表示: インラインブロック;
            境界線: 1px 実線の赤;
        }
 
        #2番{
            表示: インラインブロック;
            境界線: 1px 緑;
        }
 
        @keyframes スライド {
            0% {
                変換: translateX(0);
            }
            100% {
                変換: translateX(-50%);
            }
        }
    </スタイル>
</head>
<本文>
<div id="wrap">
    <div id="内部">
        <span id="first">当店では主にラーメン、麺類、煮込み麺、丼ものを販売しております</span>
        <span id="second">当店では主にラーメン、麺類、煮込み麺、丼ものを販売しております</span>
    </div>
</div>
</本文>
</html>

これで、ネイティブ CSS で無限テキスト カルーセルを実装する一般的な方法についての記事は終了です。CSS で無限テキスト カルーセルを実装する方法に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

<<:  Ubuntu は、Mysql+Keepalived の高可用性実装 (デュアルアクティブ ホットスタンバイ) を構築します。

>>:  Webフロントエンド開発におけるエラーを見つけるための基本的な考え方

推薦する

幅と高さが可変の要素を中央に配置するための CSS ソリューション

1. 水平中央公開コード: html: <div class="parent&quo...

eject を使用せずに create-react-app の設定を変更する方法

1. イジェクトが推奨されないのはなぜですか? 1. eject を実行した後、どのような変化があり...

時間別にグループ化された MySQL クエリ ステートメント

年、月、週、日グループによる MySQL クエリ1. 学年別検索 SELECT DATE_FORMA...

ウェブページを作成する際に注意すべき点

--ホームページのバックアップ1.txtテキスト2. 画像をスキャンする3. PSDデザイン原画(A...

標準SQL更新ステートメントの3つの用途についての簡単な理解

1. 環境: MySQL-5.0.41-win32 Windows XP プロフェッショナル2. テ...

MySQL のタイムスタンプと日付時刻のタイムゾーンの問題によって生じる DTS の落とし穴の詳細な説明

目次MySQL で現在の時刻を表現するにはどうすればよいでしょうか?結論は確認するピットMySQL ...

Linux は、ディレクトリが存在するかどうかを判断するために if を使用します。

Linux で if を使用してディレクトリが存在するかどうかを判断する方法方法は次のとおりです。...

JavaScript の document.activeELement フォーカス要素の紹介

目次1. デフォルトの焦点はボディにあります2. テキストボックスのフォーカスを手動で取得する3. ...

Node.js で MySQL データベースにバッチデータを挿入する方法

プロジェクト(nodejs)では、一度に複数のデータをデータベースに挿入する必要があります。データベ...

Tomcat9 Windows サービスのインストールに関する詳細なチュートリアル

1. 準備1.1 service.bat を含む tomcat 圧縮パッケージをダウンロードします。...

CentOS7.5 の MySQL8.0.19 のインストールチュートリアルの詳細な手順

1. はじめにこの記事には MySQL インストール部分のスクリーンショットがないので、ある程度の基...

一般的なテーブルコンポーネントの Vue カプセル化の完全な手順記録

目次序文テーブル コンポーネントをカプセル化する必要があるのはなぜですか?ステップ1: 共通コンポー...

jQuery はテーブルのページング効果を実装します

この記事では、テーブルのページング効果を実現するためのjQueryの具体的なコードを参考までに紹介し...

検索データ表示を実装するJavaScript

この記事ではJavaScript検索のデータ表示コードを参考までに共有します。具体的な内容は以下のと...