如何製作固定第一列和第一欄的響應式表格 (Sticky Header / Column Responsive Table)?

我們可以運用 CSS 中的 position sticky 屬性來製作固定第一列和第一欄的響應式表格。

基礎 HTML 格式

<div class="table-responsive">
    <table>
        <thead>
            <tr>
                <th>Column</th>
                <th>Heading 1</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <th>Column Content</th>
                <td>Content</td>
            </tr>
        </tbody>
    </table>
</div>

固定第一列的做法

CSS 樣式如下,當中 th 設定為 position sticky 以及需要鎖定外部容器的高度是固定的重點。(可以使用 vh 動態單位避免真的寫死高度)

table thead th {
  background-color: #000;
  color: #fff;
  position: sticky;
  top: 0;
}

.table-responsive {
  overflow: auto;
  height: 80vh;
}

固定第一欄的做法

除了設定第一欄為 sticky 以外,設定高度是整個固定欄生效的主要原因。另外設定 thead tr 的 z-index 避免固定欄遮住固定列,如果你希望固定欄遮住固定列的話,可以不需要這個設定。

table {
   height: 80vh;
}

table > tbody > tr > td:nth-child(1),
table > tbody > tr > th:nth-child(1) {
  position: sticky;
  left: 0;
  background-color: #fff;
}

table thead tr {
  position: relative;
  z-index: 1;
}

codepen 範例:https://codepen.io/kurorido/pen/eYbKgJw