iT邦幫忙

鐵人檔案

2026 iThome 鐵人賽
回列表
自我挑戰組

30 天打造 Accessible UI Kit:從 shadcn/ui 到自己的 Design System 系列

現在已經有 shadcn/ui 這麼方便的元件,為什麼還要打造自己的 UI Kit?

這 30 天,我將以 shadcn/ui 為起點,使用 React、TypeScript、Tailwind CSS 等技術,從元件的拆解、客製化到設計規範,逐步建立自己的 Design System。

過程中也會從實作理解鍵盤操作、Focus、ARIA、色彩對比等 Accessibility 議題,思考如何在客製化元件的同時保留良好的無障礙體驗。

希望 30 天後,不只是「會使用元件」,而是真正打造出一套能持續擴充的 Accessible UI Kit!

參賽天數 24 天 | 共 24 篇文章 | 0 人訂閱 訂閱系列文 RSS系列文
DAY 11

Day 11: Input:輸入框不只有一條框線

Button 終於在 Day 10 畢業了~ 🎓接下來開始進入表單元件。 第一個要處理的是幾乎所有系統都會出現的: <input /> 乍看之下...

2026-09-25 ‧ 由 juicy44528 分享
DAY 12

Day 12: Field:Label、Hint、Error 怎麼連在一起?

Day 11 完成了第一版 Input: <Input placeholder="請輸入 Email" /> Input 本身...

2026-09-26 ‧ 由 juicy44528 分享
DAY 13

Day 13: Textarea:不是把 Input 拉高就結束

前兩天已經完成: Day 11 → Input Day 12 → Field / Label / Description / Error 今天繼續擴充 CUI...

2026-09-27 ‧ 由 juicy44528 分享
DAY 14

Day 14: Checkbox、Radio、Switch:都是選擇,但意思不一樣

前幾天完成了: Day 11 → Input Day 12 → Field Day 13 → Textarea 今天開始處理另一類表單元件: Checkbox...

2026-09-28 ‧ 由 juicy44528 分享
DAY 15

Day 15: Select:不只是把選項藏進下拉選單

前幾天我們完成了 Input、Textarea、Checkbox、Radio Group 與 Switch,今天繼續擴充表單元件,來做一個互動稍微複雜一些的元件...

2026-09-29 ‧ 由 juicy44528 分享
DAY 16

Day 16: 把表單元件組起來:第一個完整 Form Pattern

前幾天我們陸續完成了: Input Field Textarea Checkbox Radio Group Switch Select 單獨看,每個元件都已...

2026-09-30 ‧ 由 juicy44528 分享
DAY 17

Day 17: Badge、Alert、Empty State:狀態不能只靠顏色表達

前幾天,我們花了不少時間處理表單。 從 Input、Field、Textarea,一路做到 Checkbox、Radio、Switch、Select,最後在 D...

2026-10-01 ‧ 由 juicy44528 分享
DAY 18

Day 18: Table:資料列表不是用一堆 `<div>` 排整齊就好

Day 17 做完 Badge、Alert 和 Empty State 之後,CUI 已經開始有能力表達「狀態」。 例如: &lt;Badge variant=...

2026-10-02 ‧ 由 juicy44528 分享
DAY 19

Day 19: Pagination:上一頁下一頁也是 Navigation

Day 18,我們完成了 CUI 的第一個 Table。 現在資料終於可以用真正具有語意的方式呈現: 姓名 申請項目 狀態...

2026-10-03 ‧ 由 juicy44528 分享
DAY 20

Day 20:組出第一個 Data List:元件開始真的拿來做系統

前幾天,我們開始離開單一元件的世界。 Day 17 做了: Badge Alert Empty State Day 18 做了: Table Day 19...

2026-10-04 ‧ 由 juicy44528 分享