- Web制作
 
カラム数の多い横長のテーブルを横スクロール表示して、スクロールヒントを表示する

目次
はじめに
コンテンツ量の多いテーブルを組む時にどのように表示したらユーザーにとって見やすいのか、特にスマホで見る時は画面の横幅がPCと比べ絶対的に狭いのでテーブルの部分だけ横にスクロールさせるという方法があります。
そんな時に「横スクロールして見てね」というアナウンスを表示させる便利なJavaScriptのライブラリがありますので、これを使用するとよりユーザーフレンドリーなテーブル表示ができます。
デモ
まずはデモをご覧ください。
| カラム1 | カラム2 | カラム3 | カラム4 | カラム5 | カラム6 | カラム7 | 
|---|---|---|---|---|---|---|
| 行1 | テキストテキストテキスト | テキストテキストテキスト | テキストテキストテキスト | テキストテキストテキスト | テキストテキストテキスト | テキストテキストテキスト | 
| 行2 | テキストテキストテキスト | テキストテキストテキスト | テキストテキストテキスト | テキストテキストテキスト | テキストテキストテキスト | テキストテキストテキスト | 
| 行3 | テキストテキストテキスト | テキストテキストテキスト | テキストテキストテキスト | テキストテキストテキスト | テキストテキストテキスト | テキストテキストテキスト | 
それでは作成する手順を説明していきます。
必要なファイルをダウンロードして読み込む
まずはライブラリの公式サイトから必要なファイルをダンロードします。
ダウンロード後、zipファイルを解凍し、「css」フォルダのなかから、「scroll-hint.css」を、jsフォルダの中から「scroll-hint.js」もしくは軽量版の「scroll-hint.min.js」を取り出します。
取り出したファイルを自サイト<head>タグ内読み込みます。
<link rel = "stylesheet" href = "css/scroll-hint.css" > <script src = "js/scroll-hint.js" ></script>
HTML
table の場合
// HTML
<div class="js-scrollable-wrap">
  <table class="js-scrollable">
    <tbody>
      <tr>
        <th>カラム1</th>
        <th>カラム2</th>
        <th>カラム3</th>
        <th>カラム4</th>
        <th>カラム5</th>
        <th>カラム6</th>
        <th>カラム7</th>
      </tr>
      <tr>
        <th>行1</th>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
      </tr>
      <tr>
        <th>行2</th>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
      </tr>
      <tr>
        <th>行3</th>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
        <td>テキストテキストテキスト</td>
      </tr>
    </tbody>
  </table>
</div>
<table class="js-scrollable">タグを<div class="js-scrollable-wrap">で囲ってあげます。
img の場合
// HTML
<div class="js-scrollable-wrap">
    <div class="js-scrollable">
        <img src="images/sample.png" alt="" />
    </div>
</div>
スクリプト
// JS
<script>
    window.addEventListener('DOMContentLoaded', function() {
        new ScrollHint('.js-scrollable', {
            i18n: {
                scrollable: 'スクロールできます'
            }
        });
    });
</script>
使えるオプションは以下の通りです。
| オプション名 | デフォルト値 | オプション説明 | 
|---|---|---|
| suggestClass | is-active | 要素がスクロールインされたときに追加されるクラス名 | 
| scrollableClass | is-scrollable | 要素がスクロール可能な場合に追加されるクラス名 | 
| scrollableRightClass | is-right-scrollable | 要素が右スクロール可能の場合に追加されるクラス名 | 
| scrollableLeftClass | is-left-scrollable | 要素が左スクロール可能の場合に追加されるクラス名 | 
| scrollHintClass | scroll-hint | 要素に追加するクラス名 | 
| scrollHintIconClass | scroll-hint-icon | アイコンに追加するクラス名 | 
| scrollHintIconAppendClass | scroll-hint-icon-white | アイコンに追加するクラス名 | 
| scrollHintIconWrapClass | scroll-hint-icon-wrap | アイコンのラッパーに追加するクラス名 | 
| scrollHintText | scroll-hint-text | テキストに追加するクラス名 | 
| remainingTime | -1 | スクロール ヒント アイコンを非表示にするタイミング (ミリ秒) | 
| scrollHintBorderWidth | 10 | 要素のシャドーボックスの境界幅 | 
| enableOverflowScrolling | true | iOS を使用し、値が true の場合、 -webkit-overflow-scrolling プロパティが要素に追加されます | 
| suggestiveShadow | false | 要素がスクロール可能な場合、暗示的な影を表示する | 
| applyToParents | false | JavaScript を親要素に適用する | 
| offset | 0 | スクロール可能の基準を変更できます | 
| i18n.scrollable | scrollable | ここからスクロール可能なテキストを変更できます | 
css
CSSは最低限下記の内容を書いておけばOKです。
table の場合
.js-scrollable-wrap {
	white-space: nowrap;
}
.js-scrollable {
	word-break: break-all;
	table-layout: fixed;
	display: block;
	overflow: scroll;
}
img の場合
.js-scrollable-wrap {
	white-space: nowrap;
}
.js-scrollable {
	word-break: break-all;
	table-layout: fixed;
	display: block;
	overflow: scroll;
}
.js-scrollable img {
    width: 600px;
    max-width: none;
}
まとめ
これでスマホでも見やすいテーブルが完成しました。
テーブルの横スクロールは場合によっては逆に見づらくなってしまうケースもありますので、ケースバイケースで使用しましょう。

名古屋の Web 制作会社で 9 年半働いた後フリーランスに。中小企業のWEBサイト制作実績 120 サイト以上。ディレクション、デザイン、コーディング、WordPress 構築まで手掛けます。Web制作に関わる情報やワーケーション日記などを執筆しています。