跳至主要内容
💬 回報這一頁

Input 輸入框

單行文字輸入。

Storybook:文字與數值 Storybook:欄位狀態

何時不要用

✅ 這樣做

需要自由輸入的短文字。

🚫 不要這樣

數值請用 NumberInput; 在主檔表單裡,預設應該是 EditableField(唯讀優先), 不是一整片輸入框。

狀態

高度是 36px,而且不要改

Input、Select、EditableField 全部 36px(--size-control)。 把三種控制項排在同一列時,任何 1–2px 的差異都會被看見——而後台表單一定會這樣排。

placeholder 不是 label

✅ 這樣做

永遠有 <Label>。placeholder 放格式範例(「例:U-1042」)。

🚫 不要這樣

不要用 placeholder 當 label。使用者一開始打字它就消失了, 然後他忘記這格要填什麼——這是無障礙與可用性雙輸的做法。

錯誤態:FormField 把固定寫法接好

欄位錯誤是欄位層的語意事件:aria-invalid 讓邊框轉 --danger, 錯誤小字+圖示就地顯示在欄位下(色+圖示+文字三重編碼)。 聚焦環照常是中性的——語意用彩色、焦點用中性,同框不打架 (提醒色辭典的分工在欄位上的落地)。 錯誤欄不整格染紅:主訊號是邊框與文字,整格淡底會吃掉高飽和面積預算, 深色下還會讓邊框對底的對比掉到門檻以下(verify:color 有一條盯著)。

FormField 把「Label+aria-describedbyaria-invalid+錯誤小字」的固定寫法元件化—— id 連動自動接好,取用端不再手寫三條 aria、也就不會漏:

錯誤欄聚焦看看:danger 邊框(語意)與中性聚焦環(焦點)同框

2–20 個字

必須大於 0

多欄錯誤的彙總仍由區塊層的 Calloutlive)負責—— 它報「有幾個欄位要修」,不重複每一條內容;兩層是分工,不是取代。

取用

npx shadcn@latest add https://kielchang.github.io/dooping-design-book/r/input.json