CSS 系列 (2):Table 固定左邊欄位 (Fixed Column)

EJ Feng
Apr 21, 2021

--

Table 左右滑動的時候,讓最左邊的欄位固定住。

目標的效果

假設有一個 table 長這個樣子:

因為資料欄位太多了,導致需要在 table 左右滑動才能看到一行完整的資料 row。可是這樣就導致,滑到後面會變成有點不知道在看哪一個,因為用來辨認的 ID 編號不見了:

因此!如果把最左邊的欄位(ID 編號)固定起來,這樣在左右滑動的時候,都可以辨認現在在看的資料是對應哪一個 ID 的,比較不會迷失方向,效果如下面兩張圖:

我這邊基本上是用 Bootstrap 的 table 去改的,然後也有用到 Bootstrap 的 table-hover 效果。

HTML 的部分

首先要有一個 <div> 把 <table> 包起來。

<table> 的 class “table table-hover” 是 Bootstrap 提供的 table 的 class,會有一些 table 的基本樣式。

而 <table> 的 class “table_v2_2” 則是我自己修改的一些 table 樣式,就只是把預設的 Bootstrap table 樣式調整成另外一個設計的樣式而已。那究竟調整了什麼會在下面的「CSS 的部分」提供,但這裡的調整基本上是跟本篇主題無關的,沒有改也沒關係。

在 <table> 上設了一個 “min-width” 是因為不想讓欄位內的文字,在視窗大小改變的時候,被壓縮到太窄,會不好看。

<div> 的 class “x_scroll table_fix_col_166” 是自訂的,是本篇主題的主要 CSS,一樣在接下來的「CSS 的部分」解說。

CSS 的部分

.x_scroll 是一個自訂的 class,用來做 overflow-x: scroll 的設定。

.table_fix_col_166 也是一個自訂的 class,取名表示是「固定 166px 寬的欄位」。配合 Bootstrap 的 .table 需要做以下的 CSS 調整。其中 166px 就是想要固定的欄位寬度,在這個例子中因為只有固定第一個欄位,所以設定 :first-child 而已。而 left: 15px 是受到 Bootstrap row 跟 col 的 grid system 影響(有把 <div> 放在 “row” 跟 “col” 裡面),row 會有個 margin-left: -15px 的設定,所以要再用 left: 15px 把欄位移過來,如果沒有用 Bootstrap 的 row 跟 col 就不用這個。

如果依照上面 .x_scroll 跟 .table_fix_col_166 的 CSS 設定,應該就可以達到目標效果。

.table_v2_2 雖是自訂的 class,但其實跟本篇主題無關,只是調整 table 的樣式,沒有改也沒關係。

結束!:D

--

--

EJ Feng
EJ Feng

Written by EJ Feng

各種技術研究紀錄:D

No responses yet