如何設計 user friendly 的 table

table 不是拿來炫技用的

愷開
De-Magazine
4 min readNov 23, 2017

--

最近在後台頻繁有使用表格的需求,如何設計對使用者良好的 table 是一項挑戰,尤其在資料筆數多、欄位多的情況下,使用者很容易就會被額外的元素吸引。

而在現代 div 排版盛行的影響下,使用 table 很容易就被當成二流的前端工程師。

其實對於呈現資料上,table 仍然是個相當有效的排版方式,且他們具有的特色可以幫助我們排版更加輕鬆。

HTML 中的 <table>

在 HTML 當中 <table> 由幾個標籤組成:

  • <thead>:定義表頭標題
  • <tr>:定義表頭的 row
  • <th>:定義標題
  • <tbody>:定義表格內容
  • <tfoot>:定義表格的結尾部份

盡量不要拉滿整個 table 寬度

讓 table 當中內容自行決定寬度。如果拉滿寬度的話,使用者很容易因為兩個 column 之間的距離間隔太長而不容易閱讀。

選擇顯示欄位

如果資料的欄位太多(例如超過 10 個以上),可以透過 checkbox 等方式讓使用者選擇希望顯示的欄位。

加入 <caption>

在表格當中可以加入 <caption>,方便標注表格的 title。例如:

透過 caption-side: top | bottom 可以做定位。

移除不必要的顏色與 border

雖然乍看之下色彩繽紛,但對於使用者來說,border 和背景顏色都可能造成視覺雜訊,雖然是看似貼心的設計,但可能難以找到想要的資料。

使用簡單的灰階做辨識,並消除(或者調淡)邊界的顏色,去除不必要的視覺雜訊,讓使用者更容易找到資料。

表頭跟內容對齊

一般來說文字會靠左對齊,而數字則是靠右對齊。

提供簡單的排序與搜尋

對於後台來說,使用者可能會頻繁搜尋表格內的資料,一個方式是每次都用 ajax 請求更新資料,或者在前端實作。我們可以提供簡單的排序功能,方便使用者快速地找到資料,或是提供簡易的搜尋功能。

題外話:排序其實可以直接使用 element.appendChild 來做,如果 appendChild 的節點已經出現在 parent 當中,會直接替換位置而不會加入一個新的 node。

考慮簡單的 @print

對於像是出帳系統、記錄等等,營運人員除了在網頁上觀看外,也有可能需要將表格內容列印下來,這時可以使用 @media print 的方式處理列印的細節,例如 font-size 的設定可能要用 pt 表示、將顏色改為黑白、縮短間距等等,都是需要考慮的細節。

responsive table

傳統的 table 在做手機版支援時,通常是使用水平滾動的方式來顯示。不過在手機上頻繁滾動對使用者來說仍然不是個理想的操作。

可以利用 data attribute 搭配 CSS 的 pseudo 完成。在手機上,我們將每一個 row 的顯示改為垂直。像這樣:

轉為

這樣即使在手機上也不需要滾動了。

結論

table 在資料呈現上相當方便,寬度的計算、等高都已經幫我們實作完成,在製作後台時,table 也幾乎是觀看資料時不可或缺的排版之一。

table 的設計上也有一些眉角可以注意,本篇文章提供了幾個製作 table 時需要注意的地方以及簡單的實作,未來如果有其他事項也會逐一加入。

--

--

愷開
De-Magazine

https://blog.kalan.dev 軟體工程師 / Working in Fukuoka, Japan。平時喜歡用程式探索各種可能性,用網頁說故事、創造工具,邁向更好的生活。