新視野行銷企劃

CSS 美化清單與表格的設計實例

扁平化風格的教學封面圖,展示以 CSS 美化清單與表格的設計實例,畫面包含列表符號、表格樣式與互動畫面,搭配藍橘配色與繁體中文標題《CSS 美化清單與表格的設計實例》,整體風格現代且專業,適用於網頁設計教學文章。
在前端開發中,HTML 的清單(<ul>, <ol>)和表格(<table>)往往以預設樣式呈現,功能齊全卻略顯樸素。中級開發者常希望透過 CSS 為這些元素增添美感和互動性,讓內容更易讀、更吸引人。例如,只需短短幾十行 CSS,就能讓呆板的表格煥然一新!本文將透過多個實作範例,逐步展示如何運用 CSS(搭配一點點 JavaScript)來美化清單項目符號、打造水平導航列、自訂排序列表,以及設計出具有斑馬紋、懸停高亮、可折疊功能與響應式排版的表格。這些範例範圍涵蓋從簡單的樣式調整到進階的互動效果,讓你在實踐中掌握為清單和表格增色的技巧。同時,我們將遵循自然且一致的教學風格,避免生硬的說明,帶領你以輕鬆的語調進入 CSS 設計的世界。

使用 CSS 自訂清單項目符號樣式

預設的清單項目符號(bullet)雖實用,但未必符合每個網站的設計風格。我們可以利用 CSS 提供的屬性來調整清單符號的外觀:包括 list-style-type(符號類型)list-style-position(符號位置)以及 list-style-image(自訂符號圖片)。透過這些屬性,開發者能將圓點改成方塊、羅馬數字,甚至替換為自訂圖示。然而,傳統的 list-style-image 在控制符號位置和大小方面有局限,通常建議改用 CSS 背景相關屬性實現更精細的控制。

更進一步,現代 CSS 引入了 ::marker 偽元素,讓我們可以直接選取並樣式化列表項目的符號部分。這意味著我們能輕鬆改變符號的顏色、字體大小,甚至內容字元。例如,將符號替換成特殊字元或表情符號都不再是難事。以下範例演示如何將無序清單的項目符號自訂為一個彩色符號,並調整其大小和間距:

HTML:一個帶有幾個清單項目的無序清單
<ul class="fancy-list">
  <li>首頁</li>
  <li>產品特色</li>
  <li>定價方案</li>
  <li>聯絡我們</li>
</ul>
CSS:使用 ::marker 來設定清單符號的樣式
.fancy-list {
  list-style: none;          /* 移除預設項目符號 */
  padding-left: 1.2em;       /* 左側留白以容納自訂符號 */
}
.fancy-list li::marker {
  content: "◆ ";             /* 將符號替換成菱形符號,後方加空格 */
  font-size: 1.2em;          /* 符號放大為原來的1.2倍 */
  color: #e67e22;            /* 符號顏色採用亮橘色 */
}

在上述範例中,.fancy-list 將 list-style 設為 none 以移除瀏覽器預設的項目符號,轉而由 li::marker 來定義符號的內容和樣式。我們使用了 "◆" 作為新的符號字元,並調整其大小與顏色,使其更醒目。padding-left 則確保清單項目的文字不會被新的符號壓貼在左邊界上。效果如下:每個清單項目前會出現一個亮橘色的菱形符號,為原本平淡的清單增添一抹亮色。如果需要支援更舊的瀏覽器(不支援 ::marker),可以改用在 li 上設定 background-image 來實現類似效果。

打造水平導航列

清單不僅可以呈現項目列表,還能用來構建導覽選單。利用 CSS,將垂直清單改造成水平方向排列的導航列,不僅提升美觀度,也方便用戶瀏覽網站各個頁面。我們可以透過將 <li> 設為行內水平佈局,以及樣式化連結的方式,實現一個簡潔的水平選單。

HTML:將 <ul> 清單用於網站導覽列
<ul class="nav-bar">
  <li><a href="#">首頁</a></li>
  <li><a href="#">關於我們</a></li>
  <li><a href="#">服務項目</a></li>
  <li><a href="#">聯絡</a></li>
</ul>
CSS:透過 display 和邊距調整,打造水平排列
.nav-bar {
  list-style: none;               /* 移除項目符號 */
  padding: 0;
  margin: 0;
  background-color: #34495e;      /* 導覽列背景色 */
  text-align: center;             /* 讓項目在水平方向置中 */
}
.nav-bar li {
  display: inline-block;          /* 將每個清單項目橫向排列 */
  margin: 0 15px;                 /* 每個清單項目左右間距 */
}
.nav-bar a {
  color: #ecf0f1;                 /* 連結文字採用淺色,與深色背景對比 */
  text-decoration: none;          /* 去除預設底線 */
  padding: 10px 0;
  display: inline-block;
}
.nav-bar a:hover {
  color: #ffffff;                 /* 滑鼠懸停時文字顏色變純白 */
  border-bottom: 2px solid #ecf0f1; /* 懸停時在下方繪製細線強調 */
}

在這段 CSS 中,我們將清單的 <li> 設為 inline-block 並取消其預設的樣式,使其在同一行順序排列。導覽列容器(.nav-bar)使用深色背景並將內容置中,每個清單項目之間加入左右邊距以避免過於擁擠。連結部分,採用淺色字體並取消底線,以簡潔易讀為原則。當使用者將滑鼠懸停(hover)在連結上時,我們改變文字顏色並在底部加上一條細細的亮色底線,作為視覺反饋,提示該選項可點擊。這種水平導航清單在版面上看起來整齊一致,又具備互動效果,能讓使用者清楚辨識各個導覽項目。

創意的排序列表樣式

有序清單(<ol>)會自動產生編號,但預設格式通常只是單純的數字加句點。我們可以透過 CSS 計數器(counter)和偽元素來創造更有設計感的編號樣式。例如,將編號放入彩色圓圈中、改變字體大小,或者使用羅馬數字等。以下範例展示如何使用 CSS 計數器來客製化 <ol> 的編號,讓排序清單既美觀又清晰:

HTML:一個描述步驟的有序清單
<ol class="steps-list">
  <li>註冊帳號</li>
  <li>填寫個人資料</li>
  <li>確認電子郵件</li>
  <li>開始使用服務</li>
</ol>
CSS:使用 counter-reset 和 counter-increment 搭配偽元素
.steps-list {
  counter-reset: step-counter;   /* 重置計數器 */
  list-style: none;              /* 移除預設編號樣式 */
  padding: 0;
}
.steps-list li {
  counter-increment: step-counter;            /* 遇到一個<li>,計數器+1 */
  margin: 0.5em 0 0.5em 2.5em;                /* 下方加入適度間距,左側留空放置編號 */
  position: relative;                        /* 讓子元素定位相對於<li> */
}
.steps-list li::before {
  content: counter(step-counter);            /* 插入計數器當前值作為內容 */
  position: absolute;
  left: -2.5em;                              /* 將編號定位在項目左側 */
  top: 50%;
  transform: translateY(-50%);               /* 垂直置中 */
  background: #3498db;                       /* 藍色圓形背景 */
  color: #fff;
  font-weight: bold;
  width: 1.8em; height: 1.8em;               /* 圓的尺寸 */
  line-height: 1.8em;                        /* 文字垂直置中 */
  text-align: center;                        /* 文字水平置中 */
  border-radius: 50%;                        /* 圓形 */
}

上述 CSS 做了以下幾件事:首先,.steps-list 重置了一個名為 step-counter 的計數器,並去除預設的清單編號。接著,每個 .steps-list li 元素在出現時會透過 counter-increment 將 step-counter 自增1。利用 li::before 偽元素,我們插入一個內容為當前計數值的圓形徽章。透過絕對定位和負的 left 位移,這個圓形會出現在清單項目的左側。藍色背景配上白色粗體數字,形成明顯的對比,使步驟編號清晰可見。同時,我們將圓形設置為1.8em的寬高並使用 border-radius: 50% 使其成為完美的圓形,並透過 line-height 和 text-align 讓數字在圓形內垂直水平居中。整體效果是,每個步驟前都有一個帶編號的藍色圓圈,為有序清單增添專業且美觀的版面設計。

值得注意的是,我們完全透過 CSS 達成這個效果,而非改動 HTML 結構。這意味著清單在語意上仍保持有序列表的結構,利於可及性和SEO,同時在視覺呈現上更符合設計需求。

表格斑馬紋與懸停效果

表格是呈現結構化資料的利器,但預設樣式下,大量數據的表格容易讓人眼花撩亂。加入斑馬紋(Zebra Stripes)樣式與滑鼠懸停高亮,可以顯著提升表格的可讀性。斑馬紋指的是交替行背景色,使相鄰列呈現不同底色,如同斑馬條紋,讀者更容易分辨對應的橫列數據。而懸停高亮則是在使用者將滑鼠移到某行時,暫時改變該行背景,以突出所選列。

我們來看一個產品清單表格的範例,運用 CSS 達成斑馬紋和懸停效果:

HTML:一個基本的產品資訊表格
<table class="zebra-table">
  <thead>
    <tr>
      <th>產品名稱</th>
      <th>價格</th>
      <th>庫存</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>產品 A</td>
      <td>$120</td>
      <td>50</td>
    </tr>
    <tr>
      <td>產品 B</td>
      <td>$90</td>
      <td>20</td>
    </tr>
    <tr>
      <td>產品 C</td>
      <td>$150</td>
      <td>0</td>
    </tr>
    <tr>
      <td>產品 D</td>
      <td>$300</td>
      <td>10</td>
    </tr>
  </tbody>
</table>
CSS:設定表格的斑馬紋和懸停高亮效果
.zebra-table {
  width: 100%;
  border-collapse: collapse;   /* 合併邊框,消除儲存格之間的空隙 */
  font-family: sans-serif;
}
.zebra-table th, .zebra-table td {
  padding: 12px;              /* 內距讓內容不緊貼格線 */
  border: 1px solid #dddddd;  /* 淡淡的灰色邊框 */
  text-align: left;
}
.zebra-table tbody tr:nth-of-type(even) {
  background-color: #f9f9f9;   /* 偶數列背景設為淺灰 (斑馬紋) */
}
.zebra-table tbody tr:hover {
  background-color: #e8f6ff;   /* 懸停行背景設為淡藍,凸顯所在列 */
}
.zebra-table thead {
  background-color: #3498db;   /* 表頭背景色 */
  color: #fff;
}
.zebra-table thead th {
  font-weight: bold;
}

在這份樣式中,我們做了以下幾件事:

使用 :nth-of-type(even) 為偶數行(不含表頭)設定背景顏色為淡灰色,營造斑馬紋效果。如此一來,每隔一行的底色不同,用戶在橫向瀏覽時更容易對齊各欄資料,正如專業教程所建議,為每隔一行加上背景色能帶來賞心悅目的斑馬紋效果。

定義 tr:hover,當滑鼠懸停在某資料行時改變其背景為淡藍色,暫時突出該行。這能幫助使用者在查看寬表格時快速定位自己關注的那一列數據。

將表格的 <thead> 單獨樣式化,使用醒目的藍色背景搭配白色文字,並加粗表頭字體,使表格標題明顯區隔於資料區。也透過 border-collapse: collapse 讓表格儲存格的邊框合併,避免雙線邊框的視覺干擾,整體更為俐落。

添加這些樣式後,表格將變得更具結構美感:斑馬紋讓資料行有條不紊,懸停高亮提供動態反饋,使用者體驗大幅提升。

可折疊表格列設計

當表格內容龐大時,允許使用者展開或折疊部分資料列,可以讓版面更清爽,僅在需要時才查看詳細資訊。常見的做法是為表格加入可折疊列(Collapsible Row)的功能,例如點擊某行或按下箭頭圖示以顯示隱藏的附加資料。這裡我們介紹一種藉由 HTML5 <details> 元素實現簡易折疊效果的方法,以及如何以 JavaScript 實現更自訂的折疊行互動。

方法一:使用 <details> 元素(純 HTML/CSS)

HTML5 提供的 <details> 和 <summary> 元素讓我們能夠無需編寫 JavaScript,就實現基本的展開/收合效果。將 <details> 放入表格的某個儲存格中,點擊 <summary> 即可顯示隱藏內容。這種方式的優點在於語意良好且無須額外腳本:對於螢幕閱讀器等輔助技術也較友善,維護性高。以下是一個簡單範例:

HTML:使用 <details> 的可折疊表格
<table class="collapsible-table" width="100%">
  <thead>
    <tr><th>訂單編號</th><th>客戶</th><th>詳情</th></tr>
  </thead>
  <tbody>
    <tr>
      <td>#1023</td>
      <td>王小明</td>
      <td>
        <details>
          <summary>查看詳情</summary>
          <ul>
            <li>商品:紅色T恤</li>
            <li>數量:2</li>
            <li>小計:$40</li>
          </ul>
        </details>
      </td>
    </tr>
    <tr>
      <td>#1024</td>
      <td>李小華</td>
      <td>
        <details>
          <summary>查看詳情</summary>
          <p>此訂單包含特殊備註,需要人工確認。</p>
        </details>
      </td>
    </tr>
  </tbody>
</table>

上例中,每一列的「詳情」欄位都包含一個 <details> 元素。使用者點擊「查看詳情」時,隱藏在 <details> 裡的附加資訊(例如商品清單或備註)將展開顯示;再次點擊則收合。為了增強這個 UI,我們可以用 CSS 微調 <summary> 的樣式,例如改變游標、字體或加上指示箭頭符號:

CSS:美化 <details> 元素
.collapsible-table details summary {
  cursor: pointer;             /* 懸停時游標變成指尖,提高可點擊感 */
  color: #2980b9;
  font-weight: 500;
}
.collapsible-table details summary::after {
  content: " ▼";               /* 在摘要文字後加入下箭頭符號 */
}
.collapsible-table details[open] summary::after {
  content: " ▲";               /* 展開狀態時用上箭頭表示 */
}

透過以上樣式,未展開時「查看詳情」後方會附上一個向下的箭頭符號,提示點擊可展開;當內容展開 (<details open>) 後,箭頭變為向上,指示可點擊以收合。cursor: pointer 則確保使用者在滑鼠移過 <summary> 時出現指針狀游標,以符合可點擊元素的一般預期。

方法二:使用 JavaScript 切換表格列

若需要更複雜的折疊行互動(例如點擊整列任意處皆可展開,或一次收合其它展開的列),可以透過簡單的 JavaScript 操作 DOM 來達成。我們可以將額外資訊放在緊鄰主要列的隱藏 <tr> 中,並用按鈕或圖示觸發其顯示/隱藏。以下是概念性示例:

HTML + CSS + JavaScript:自訂折疊功能
<table class="toggle-table">
  <tbody>
    <tr class="main-row">
      <td>分組 A</td>
      <td>點擊展開詳情</td>
    </tr>
    <tr class="detail-row">
      <td colspan="2">分組 A 的詳細內容...</td>
    </tr>
    <!-- ...其他組別資料列... -->
  </tbody>
</table>

<style>
.detail-row { 
  display: none; /* 詳細內容列初始隱藏 */
}
</style>

<script>
document.querySelectorAll('.main-row').forEach(row => {
  row.addEventListener('click', () => {
    const detailRow = row.nextElementSibling;
    if (detailRow && detailRow.classList.contains('detail-row')) {
      // 切換顯示或隱藏下一列
      detailRow.style.display = detailRow.style.display === 'none' ? 'table-row' : 'none';
    }
  });
});
</script>

上述腳本為每個主資料列 .main-row 綁定點擊事件,透過切換緊接著的 .detail-row 的 CSS display 屬性,在 'none' 和 'table-row' 之間切換。這會使隱藏的詳細資料列在需要時出現、再次點擊時隱藏。此方式比 <details> 具有更高的自訂彈性:你可以自由控制展開動畫、一次只展開一行或多行、甚至改用圖示按鈕等。不過相對地也需要多寫幾行程式碼來管理這些狀態。

無論使用 <details> 還是額外的 JavaScript,可折疊表格列都能讓資訊呈現更具條理,使用者在需要時才查看詳情,使頁面不會被過量資訊淹沒。挑選哪種實現方式,取決於需求的複雜度與對無腳本環境或可及性的考量。

響應式表格設計

隨著行動裝置的普及,我們必須確保表格在小螢幕上同樣易於閱讀。響應式表格的目標是在窄螢幕時不至於出現內容溢出或難以瀏覽的情況。一種簡單而有效的方式是允許表格水平捲動:也就是當螢幕過小容納整個表格寬度時,自動出現橫向卷軸。藉此使用者可以左右捲動畫面查看完整表格,而不會破版。

實現方法相當直接:將表格包裹在一個帶有 overflow-x: auto 的容器中即可。例如:

HTML + CSS:響應式表格容器
<div class="table-responsive">
  <table>
    <!-- 表格內容 -->
  </table>
</div>

<style>
.table-responsive {
  max-width: 100%;
  overflow-x: auto;    /* 當超出寬度時,允許橫向捲動 */
}
</style>

上面的 .table-responsive 容器會在表格寬度超出容器時出現橫向滾動條。你可以將容器的 max-width 設為父元素的100%,確保其本身不會超出版型。在實際應用中,這種做法能快速讓傳統表格具備一定的響應式能力——縮小瀏覽器視窗時,表格內容仍可透過捲軸瀏覽,避免文字被壓縮到難以辨識或版面走樣。

更進階的響應式表格設計可能會將表格轉換為其他佈局(例如將欄位堆疊顯示),但那通常需要更多 CSS 技巧甚至 JavaScript 來動態調整。本節提供的簡易方案,對大多數資料表格都適用且實作成本低,是提升表格在手機上可用性的重要技巧。

小結

從上述實例可以看到,只要靈活運用 CSS,我們就能將平凡的清單與表格轉化為美觀又實用的介面元件。透過自訂清單項目符號和編號,我們讓清單更契合設計風格;利用斑馬紋、懸停高亮等技巧,龐大的資料表格變得井然有序、易於閱讀;加入折疊功能和響應式排版,則進一步提升了資訊呈現的效率與裝置相容性。

在實作這些美化效果時,切記維持結構的語意正確,例如使用語義化的 HTML 元素(ul/ol/table 等)而非以樣式妥協結構,這樣既保留了良好的可及性,也方便日後維護和擴充。希望本文的步驟講解和程式範例能給你帶來啟發,讓你在前端開發中游刃有餘地打造出既好看又好用的清單與表格介面。

問與答

Q1: ::marker 偽元素是否支援所有 CSS 樣式?
A1: 並非全部。::marker 允許的樣式包括字型相關屬性、顏色、內容和一些動畫屬性等,但不支援例如背景、邊框等屬性。也就是說,你可以用它改變符號字體和顏色、甚至換掉符號字元,但若想給符號加上背景底色或圖片,::marker 無法辦到,此時需要透過其他方法(如在 li::before 中模擬符號)來實現。
Q2: 如何將上述表格樣式只套用在特定表格,而不影響頁面上其他表格?
A2: 最簡單的方法是利用 CSS 類別選擇器進行範圍限定。例如我們在範例中對表格使用了類別 .zebra-table、.collapsible-table 等,就是為了避免影響其他非目標表格。確保在 CSS 規則前加上對應的類別,如 .zebra-table tbody tr:nth-of-type(even) { ... },這樣樣式只會應用在帶有該類別的表格上,而不會干涉全域的預設表格樣式。
Q3: 在小螢幕上,允許表格橫向捲動是否足夠?能否讓表格欄位在行動裝置上自動重排?
A3: 讓表格可橫向捲動是一種通用且方便的解決方案。它保留了表格式佈局,只是在視窗不足時出現卷軸,使用者體驗通常尚可。不過,針對非常狹窄的螢幕或更佳的行動裝置體驗,可以考慮更進階的方案,例如將每列資料堆疊顯示(每個單元格在窄屏下以區塊形式呈現,前面加上欄位名稱標籤)等。這類實現需要更多的 CSS(例如使用媒體查詢及 ::before 來插入欄位名稱)或 JavaScript 動態調整 DOM。具體採用哪種方式取決於專案需求,如果表格欄位很多且結構複雜,堆疊顯示可能更易讀,但實作較繁瑣;反之,對大多數情況而言,簡單地允許橫向捲動已能兼顧閱讀性與開發效率。
Q4: 使用 <details> 實現可折疊內容有何需要注意的地方?
A4: <details> 元素非常方便,但需要注意瀏覽器相容性和預設樣式。一些舊版瀏覽器可能不支援 <details>,不過現今主流瀏覽器大多已支援。另外,<details> 和 <summary> 有內建樣式(例如會有箭頭圖示),你可以透過 CSS 覆蓋調整。如果希望控制展開/收合的動畫,也許需要搭配一些 CSS 動畫或 JavaScript。若你的折疊需求非常特別(例如點擊表格某列卻要展開另一處的內容),那 <details> 可能就無法勝任,得改用自訂腳本來實現。總的來說,在適合的情境下使用 <details> 能減少開發工作並提升無障礙體驗。只要測試確認樣式一致性,它會是實用的工具之一。

綜上所述,透過合理應用 CSS 的各種技巧,我們可以大幅提升清單與表格的視覺效果和使用體驗。希望這些問答也解答了實作過程中常見的疑惑,讓你在前端介面美化的旅程中更加游刃有餘。祝你在未來的專案中,打造出屬於自己風格的精美清單和表格設計!

CONTACT US

網站設計報價洽詢

請填寫您的資料,我們將儘快與您聯繫! 為必填