省略記号(…)付きページネーションを作る方法【HTML/CSS/JavaScript・サンプルコード付き】

ページネーション

省略記号(…)付きページネーションを作る方法

省略記号(…)付きページネーションを作る方法を紹介します。このサンプルでは、No.1〜No.20までの20枚の記事カードを用意し、1ページにつき2枚ずつ表示します。全10ページのページ番号をすべて並べるのではなく、現在のページや先頭・最後のページを残しながら、途中のページ番号を「…」で省略して表示します。ページ数が多い一覧でも、ページネーションが横に長くなりすぎるのを防げます。

1ページ目ではNo.1とNo.2、2ページ目ではNo.3とNo.4というように、20枚の記事カードを10ページに分けて表示します。現在のページに合わせて表示するページ番号と省略記号の位置が自動で変わるため、前半・中央・後半のどのページを表示しているか確認しながら移動できます。記事数が多いブログの記事一覧、ECサイトの商品一覧、管理画面のデータ一覧、会員サイトのコンテンツ一覧など、ページ数が増えやすい画面で利用できます。

HTMLでは20枚の記事カードとページ番号を表示する領域を配置し、CSSではカード、ページ番号、省略記号のデザインを整えます。JavaScriptでは1ページに表示する件数を2件に設定し、現在のページに該当するカードだけを表示するとともに、現在位置に合わせて必要なページ番号と「…」を生成します。記事カードの内容や枚数、1ページに表示する件数などを用途に合わせて変更でき、レスポンシブにも対応しているため、スマートフォン・タブレット・PCで利用できます。

コードについて 本記事のコードはサンプルコードです。ご利用前に必ず動作確認を行ってください。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。

デモ

記事一覧

20枚の記事カードを1ページにつき2枚ずつ表示します。

No.1
サンプル記事 1

1件目のサンプル記事です。ここに記事の説明文を表示します。

No.2
サンプル記事 2

2件目のサンプル記事です。ここに記事の説明文を表示します。

No.3
サンプル記事 3

3件目のサンプル記事です。ここに記事の説明文を表示します。

No.4
サンプル記事 4

4件目のサンプル記事です。ここに記事の説明文を表示します。

No.5
サンプル記事 5

5件目のサンプル記事です。ここに記事の説明文を表示します。

No.6
サンプル記事 6

6件目のサンプル記事です。ここに記事の説明文を表示します。

No.7
サンプル記事 7

7件目のサンプル記事です。ここに記事の説明文を表示します。

No.8
サンプル記事 8

8件目のサンプル記事です。ここに記事の説明文を表示します。

No.9
サンプル記事 9

9件目のサンプル記事です。ここに記事の説明文を表示します。

No.10
サンプル記事 10

10件目のサンプル記事です。ここに記事の説明文を表示します。

No.11
サンプル記事 11

11件目のサンプル記事です。ここに記事の説明文を表示します。

No.12
サンプル記事 12

12件目のサンプル記事です。ここに記事の説明文を表示します。

No.13
サンプル記事 13

13件目のサンプル記事です。ここに記事の説明文を表示します。

No.14
サンプル記事 14

14件目のサンプル記事です。ここに記事の説明文を表示します。

No.15
サンプル記事 15

15件目のサンプル記事です。ここに記事の説明文を表示します。

No.16
サンプル記事 16

16件目のサンプル記事です。ここに記事の説明文を表示します。

No.17
サンプル記事 17

17件目のサンプル記事です。ここに記事の説明文を表示します。

No.18
サンプル記事 18

18件目のサンプル記事です。ここに記事の説明文を表示します。

No.19
サンプル記事 19

19件目のサンプル記事です。ここに記事の説明文を表示します。

No.20
サンプル記事 20

20件目のサンプル記事です。ここに記事の説明文を表示します。

ページ番号をクリックしてください。現在のページに合わせてページ番号の一部が「…」で省略され、記事カードが2枚ずつ切り替わります。

コードをコピーして使おう!

<!DOCTYPE html>
<html lang="ja">
<head>

  <!-- 文字コード -->
  <meta charset="UTF-8">

  <!-- スマートフォン対応 -->
  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <!-- ページタイトル。用途に合わせて自由に変更できます -->
  <title>省略記号(…)付きページネーション</title>

  <!-- ページネーションと記事カードのデザインを設定するCSS -->
  <link rel="stylesheet" href="style.css">

</head>
<body>

  <!--
    ページネーション全体。
    ここは記事一覧とページネーションをまとめる部分です。
  -->
  <div class="ellipsis-pagination_wrap">

    <!-- 一覧のタイトル。用途に合わせて自由に書き換えられます -->
    <div class="ellipsis-pagination_title">
      記事一覧
    </div>

    <!-- 一覧の説明文。表示する内容に合わせて変更できます -->
    <p class="ellipsis-pagination_text">
      20枚の記事カードを1ページにつき2枚ずつ表示します。
    </p>

    <!--
      ページ分割する記事一覧。
      この中のarticle要素が実際にページネーションで切り替わります。
      タイトルや説明文は自由に書き換えられます。
      article要素を追加・削除すると記事カードの総数を変更できます。
    -->
    <div class="ellipsis-pagination_list">

      <!-- 1件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.1</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 1</div>
        <p class="ellipsis-pagination_card-text">
          1件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 2件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.2</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 2</div>
        <p class="ellipsis-pagination_card-text">
          2件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 3件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.3</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 3</div>
        <p class="ellipsis-pagination_card-text">
          3件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 4件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.4</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 4</div>
        <p class="ellipsis-pagination_card-text">
          4件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 5件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.5</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 5</div>
        <p class="ellipsis-pagination_card-text">
          5件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 6件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.6</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 6</div>
        <p class="ellipsis-pagination_card-text">
          6件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 7件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.7</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 7</div>
        <p class="ellipsis-pagination_card-text">
          7件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 8件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.8</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 8</div>
        <p class="ellipsis-pagination_card-text">
          8件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 9件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.9</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 9</div>
        <p class="ellipsis-pagination_card-text">
          9件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 10件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.10</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 10</div>
        <p class="ellipsis-pagination_card-text">
          10件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 11件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.11</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 11</div>
        <p class="ellipsis-pagination_card-text">
          11件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 12件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.12</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 12</div>
        <p class="ellipsis-pagination_card-text">
          12件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 13件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.13</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 13</div>
        <p class="ellipsis-pagination_card-text">
          13件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 14件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.14</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 14</div>
        <p class="ellipsis-pagination_card-text">
          14件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 15件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.15</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 15</div>
        <p class="ellipsis-pagination_card-text">
          15件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 16件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.16</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 16</div>
        <p class="ellipsis-pagination_card-text">
          16件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 17件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.17</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 17</div>
        <p class="ellipsis-pagination_card-text">
          17件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 18件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.18</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 18</div>
        <p class="ellipsis-pagination_card-text">
          18件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 19件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.19</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 19</div>
        <p class="ellipsis-pagination_card-text">
          19件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

      <!-- 20件目の記事カード -->
      <article class="ellipsis-pagination_card" data-ellipsis-pagination-card>
        <div class="ellipsis-pagination_number">No.20</div>
        <div class="ellipsis-pagination_card-title">サンプル記事 20</div>
        <p class="ellipsis-pagination_card-text">
          20件目のサンプル記事です。ここに記事の説明文を表示します。
        </p>
      </article>

    </div>

    <!--
      ページ番号を表示する場所。
      ページ番号と省略記号(…)はscript.jsで自動生成されます。
    -->
    <nav
      class="ellipsis-pagination_nav"
      data-ellipsis-pagination-nav
      aria-label="ページネーション">
    </nav>

  </div>

  <!-- ページネーションの切り替え処理 -->
  <script src="script.js"></script>

</body>
</html>
コードをコピーする場合 使用するコードのタブを選び、「このタブをコピー」をクリックすると、現在表示中のコードをコピーできます。
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
A

Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。

InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。

ファイル構成と設置方法

このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLにはNo.1〜No.20までの20枚の記事カードと、ページネーションを表示する領域を配置します。CSSでは記事カード、ページ番号、省略記号(…)のデザインを設定し、JavaScriptでは記事カードを1ページにつき2枚ずつ表示して、現在のページに合わせてページ番号と省略記号を自動生成します。

sample/
├── index.html
├── style.css
└── script.js

各ファイルの役割
index.htmlは記事一覧とページネーションの基本構造を作るファイルです。サンプルでは20枚の記事カードを配置しています。No.1〜No.20の番号、記事タイトル、説明文は自由に書き換えられます。記事カードを追加・削除すると、JavaScriptがカード総数から必要なページ数を自動計算します。

style.cssは記事一覧とページネーションのデザインを設定するファイルです。全体の余白、記事カードの枠線や角丸、ページ番号の大きさ、選択中のページ番号、省略記号(…)などの表示を変更できます。

script.jsはページ切り替えを行うファイルです。記事カードの総数から総ページ数を計算し、現在のページに該当するカードだけを表示します。また、現在位置に応じて必要なページ番号を表示し、途中のページ番号を「…」へ置き換えます。

設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを同じ階層で配置します。index.htmlからstyle.cssとscript.jsを読み込む構成になっているため、3ファイルを配置したあとsample/index.htmlをブラウザで開いてください。外部ライブラリやサーバーは必要ありません。

最初はNo.1とNo.2の記事カードが表示されます。ページ番号をクリックすると、選択したページに該当する2枚の記事カードへ切り替わります。全10ページを常に並べるのではなく、現在のページ位置に合わせて途中のページ番号が「…」へ変わります。

カスタマイズできる内容
index.htmlでは「記事一覧」のタイトル、説明文、No.1〜No.20の記事番号、記事タイトル、記事説明文を変更できます。記事カードのarticle要素を追加・削除すると、記事数に応じて総ページ数が自動計算されます。

style.cssでは全体の背景色や余白、記事カードの枠線、角丸、文字色、ページ番号の大きさ、ページ番号同士の間隔、選択中のページ番号の色、省略記号の文字サイズなどを変更できます。

script.jsではellipsisPaginationItemsPerPageを変更すると、1ページに表示する記事カードの件数を変更できます。例えば2を4へ変更すると、1ページにつき4枚の記事カードを表示します。記事カードの総数と表示件数から総ページ数を自動計算するため、HTMLへページ番号を手動で追加する必要はありません。

数値調整
style.css

margin:40px auto;
ページネーション全体の上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。

padding:32px;
ページネーション全体の内側余白です。値を大きくすると内容と枠線の間隔が広がり、小さくするとコンパクトになります。

border-radius:18px;
ページネーション全体を囲む部分の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。

font-size:22px;
「記事一覧」のタイトル文字サイズです。値を大きくすると文字が大きくなり、小さくすると控えめになります。

gap:16px;
記事カード同士の間隔です。値を大きくするとカード同士が離れ、小さくすると近くなります。

padding:24px;
記事カードの内側余白です。値を大きくすると文章と枠線の間隔が広がります。

border-radius:12px;
記事カードの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。

gap:10px;
ページ番号と省略記号の間隔です。値を大きくすると各項目の間隔が広がり、小さくすると狭くなります。

margin-top:28px;
記事カードとページネーションの間隔です。28pxを大きくすると上下の間隔が広がります。

min-width:48px;
ページ番号ボタンの最小横幅です。値を大きくするとボタンが横に広がります。

height:48px;
ページ番号ボタンの高さです。値を大きくするとボタンが高くなります。

border-radius:10px;
ページ番号ボタンの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。

transition:0.3s;
ページ番号へマウスを重ねたときの色が切り替わる時間です。値を大きくするとゆっくり、小さくすると速く切り替わります。

min-width:32px;
省略記号(…)を表示する部分の最小横幅です。値を大きくすると省略記号の左右の空間が広がります。

font-size:18px;
省略記号(…)の文字サイズです。値を大きくすると省略記号が大きく表示されます。

script.js

const ellipsisPaginationItemsPerPage = 2;
1ページに表示する記事カードの件数です。2を4へ変更すると1ページにつき4枚表示するなど、用途に合わせて変更できます。

let ellipsisPaginationCurrentPage = 1;
現在ページを管理する初期値です。このサンプルでは1ページ目から開始します。

ellipsisPaginationShowPage(1);
ページを開いた直後に表示するページです。1を変更すると最初に表示するページを変更できます。

レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%によってページネーション全体が親要素の横幅に合わせて表示され、ページ番号部分にはflex-wrap:wrap;を設定しているため、横幅が不足した場合は折り返して表示されます。

画面幅640px以下では、全体の余白をpadding:24px 18px;、記事カードをpadding:20px 16px;へ変更します。ページ番号ボタンは最小横幅と高さを44px、省略記号は最小横幅24px・高さ44pxへ調整しているため、スマートフォン・タブレット・PCで利用できます。


こちらもおすすめ


コメント