最終更新:

【CSS】スマホ実機でTable横スクロールが効かない時


こんにちは、フリーランスエンジニアの太田雅昭です。

実機でスクロールが効かない問題

Web開発においてPCとスマホの表示確認は極めて重要です。PCでは意図した表示になっており、ブラウザのDevツールで横幅をスマホに合わせても問題なし。しかしながら、スマホ実機では表示がズレてしまう。こうした事象は開発現場では日常茶飯事です。

今回、Tableの横幅を長くし、wrapperで囲ってスクロール可能にしていた実装がありました。

<div class="table-wrapper">
  <table>
    <thead>
      <tr>
        <th>項目1</th>
        <th>項目2</th>
        <th>項目3</th>
        <!-- ... -->
      </tr>
    </thead>
    <tbody>
      <!-- テーブルの内容 -->
    </tbody>
  </table>
</div>
.table-wrapper {
  overflow-x: auto;
}

しかしながら、スマホ iPhone8の実機(あるいはXCodeのシミュレータ)ではなぜかスクロールできないという事態に直面しました。

原因の解説

この問題が発生する主な原因は、テーブルの幅が親要素の幅に自動的に収まろうとするという、テーブルのデフォルト動作にあります。

overflow-x: autoを指定しても、内部のテーブルが「私は親要素の幅に収まります」と主張してしまうため、スクロール領域が発生しないことがあります。

解決方法

.table-wrapper {
  overflow-x: auto;
  min-width: max-content; /* または具体的な値(例: 800px) */
}

min-width: max-contentを指定することで、テーブルがコンテンツの幅を保持し、縮小されないようになります。