レスポンシブ対応のサイトを制作していると、テーブルの扱いに悩まされることが多いです。PCで見た時は問題なくても、スマホで見ると以下のように縦に伸びてしまい、非常に見難くなってしまったという経験はないでしょうか。
これを解決するために、CSSを使ってテーブル部分のみを横スクロールさせる方法をご紹介したいと思います。
動きについては、デモページを用意しましたので、ご確認いただければと思います。
ブラウザの幅を縮めると、横スクロールが出現します。
レスポンシブサイトでテーブルがはみ出てしまう場合に、CSSでテーブル部分だけ横スクロールさせる方法
まずは、テーブルをtable-scrollというクラスで内包します。
<div class="table-scroll"> <table> <tr> <th>項目1</th> <th>項目2</th> <th>項目3</th> <th>項目4</th> <th>項目5</th> <th>項目6</th> <th>項目7</th> <th>項目8</th> <th>項目9</th> <th>項目10</th> </tr> <tr> <td>内容1内容1</td> <td>内容2内容2</td> <td>内容3内容3</td> <td>内容4内容4</td> <td>内容5内容5</td> <td>内容6内容6</td> <td>内容7内容7</td> <td>内容8内容8</td> <td>内容9内容9</td> <td>内容10内容10</td> </tr> </table> </div>
CSS側は以下のように指定しましょう。
.table-scroll {
width: 100%;
overflow-y: hidden;
overflow-x: auto;
-ms-overflow-style: -ms-autohiding-scrollbar;
-webkit-overflow-scrolling: touch;
}
table{
border-collapse: collapse;
}
th,td{
border: solid 1px #ccc;
padding: 8px;
white-space: nowrap;
}
th{
background: #aaa;
color: #fff;
}
テーブル内のテキストが折り返さないように「white-space: nowrap;」を指定し、テーブル全体に「-webkit-overflow-scrolling」を指定することでスクロールを実現しています。
スクロール可能であることを示すために、常にスクロールバーを表示しておきたい場合は、以下のCSSも追加します。
.table-scroll::-webkit-scrollbar {
height: 8px; /* スクロールバーの高さ */
}
.table-scroll::-webkit-scrollbar-thumb {
background: #aaa; /* スクロールバーの色 */
}
.table-scroll::-webkit-scrollbar-track {
background: #ccc; /* スクロールバーの背景色 */
}
iOSでスクロールバーが表示されない場合は、.table-scrollに指定されている「-webkit-overflow-scrolling: touch;」を削除すると表示されるようになります。iOSでは”惰性スクロール”と”常時スクロールバー表示”が両立できない様です。
あとがき
CSSのみの調整なので、手軽に対策できますね。横スクロールで対処するという方法もあるということで、スマホサイトでのテーブルの扱いに困ったらぜひ参考にしてください。



記事大変参考にさせてもらいました。
ブログにて試しました。
スクロールさせたいページは思ったように出来たのですが、他のページで支障がでます。
そこで助けて貰えたらなとおもいましてメールしました。
支障のあるページのテーブルにはカエレバの画像リンクを挿入してるんですが、この画像の表示が上手くできません。
なにか策はありませんか?