Softex CelwareTech Blog
バニラJS Webアプリ2026-05-29

スマホでは表をカード表示に変換するCSS

PCでは通常テーブル、スマホでは行単位のカード表示に切り替えて、計算結果表の横切れを防ぐCSSパターンです。

バニラJSCSSレスポンシブテーブルスマホ対応

はじめに

PC向けの横長テーブルは、スマートフォンでは横スクロールになりやすいです。

見積や計算結果の表では、横スクロールよりも1行ずつカード化した方が読みやすい場合があります。

この記事では、ココナラ見積・手取り・予算逆算ツールで使った、スマホ幅だけ表をカード表示に変換するCSSパターンを整理します。

使う場面

  • PCでは通常テーブル、スマホでは縦積みカードで見せたい業務UI
  • 金額、計算式、備考など列数が多い表
  • 横スクロールで重要な列が隠れると困る画面
  • レスポンシブデザインで計算結果を見やすくしたい場合

基本方針

PCでは通常のtableとして表示し、スマホ幅ではtabletheadtbodytrtdをブロック表示に切り替えます。

theadを隠す代わりに、td::beforeへ列見出しを出します。

@media (max-width: 720px) {
  .table-wrap {
    overflow: visible;
    border: 0;
  }

  table,
  thead,
  tbody,
  tr,
  td {
    display: block;
    width: 100%;
    min-width: 0;
  }

  thead {
    display: none;
  }

  tr {
    margin-bottom: 10px;
    border: 1px solid var(--line);
    border-radius: 6px;
    background: #fff;
    overflow: hidden;
  }
}

これで、1行が1枚のカードのように表示されます。

セルに見出しを付ける

theadを非表示にする場合でも、各セルの意味は残す必要があります。

@media (max-width: 720px) {
  td {
    display: grid;
    grid-template-columns: 7.5em minmax(0, 1fr);
    gap: 8px;
  }

  td:nth-child(1)::before { content: "項目"; }
  td:nth-child(2)::before { content: "金額"; }
  td:nth-child(3)::before { content: "計算式"; }
  td:nth-child(4)::before { content: "備考"; }

  td::before {
    color: #64748b;
    font-weight: 700;
  }
}

これにより、スマホでも「金額」「計算式」「備考」の意味を失わずに読めます。

向いている表と向かない表

この方法は、列数と列の意味が固定されている表に向いています。

一方、ユーザー操作で列数が変わる表や、列見出しが動的に変わる表では、CSSのnth-childだけでは管理しにくくなります。

その場合は、data-label属性を使って、HTML側から見出しを渡す方法もあります。

<td data-label="金額">11,605円</td>
td::before {
  content: attr(data-label);
}

注意点

  • PC側のmin-widthをスマホ幅で解除する
  • theadを隠す場合でも、td::beforeで列名を補う
  • 強調行や警告行は、スマホ表示でも意味が残るように背景色や上線を調整する
  • 表をカード化しても、読み上げやコピー用途で不自然にならないようにする

実例

ココナラ見積・手取り・予算逆算ツールでは、PCでは内訳詳細テーブル、スマホでは各行をカード状に表示して横切れを防いでいます。

公開アプリはこちら、ソースはGitHubで確認できます。

まとめ

横長テーブルをスマートフォンでそのまま表示すると、重要な列が隠れやすくなります。

列数が固定された計算結果表なら、スマホ幅だけ行単位のカード表示に変換することで、読みやすさを保ちながらPC表示も維持できます。

この技術で業務改善しませんか?

Excel VBA・GAS・Webアプリで業務の自動化ツールを開発しています。 「こんなことできる?」というご相談だけでもお気軽にどうぞ。

無料相談はこちら →