壞掉的 CSS Checkbox Generator 結果,幾乎都能追溯到同一個缺失的部分:一個仍然接收 checked 狀態、鍵盤焦點,以及有意義標籤的原生 input。產生器會建立一個真實的 <input type="checkbox">,包在一個可見的 <label> 裡面,然後用 CSS 中的 appearance: none 搭配一個 ::after 偽元素來繪製方框和打勾記號。如果在貼上時改動了任何一個部分——把 input 換成 div、標籤關聯被中斷、偽元素的選擇器寫錯,或是焦點外框被移除——這個控制項就不再像原生 checkbox 一樣運作,而開始像一張圖片一樣。大多數「產生器壞了」的回報屬於以下三種情況之一:產生器刻意拒絕的錯誤顏色或幾何值、預覽外部環境移除了焦點或標籤語意,或是基準未模擬的狀態(disabled、invalid、indeterminate、forced-colors)。每一種都有具體的診斷方式,而本指南會帶你走過那些真正能讓結果「從畫面上錯誤」變成「在真實表單中可用」的檢查步驟。

輸入驗證:第一個該檢查的地方
這個 CSS Checkbox Generator 對接受與不接受的內容刻意嚴格,而這份嚴格正是出問題時第一個該檢查的地方。Size 接受 16 到 64 的整數像素。Border 接受 1 到 6 像素。Radius 接受 0 到 50 百分比。每個顏色都必須是完整的六位數 HEX 值。任何超出這些範圍,或非 HEX 的顏色字串,會被拒絕而非悄悄四捨五入或替換。這代表「空白預覽」並不是渲染失敗——這是產生器在告訴你輸入無效,而且原始程式碼區塊沒有被改變。瀏覽器的顏色選擇器在正常使用下會提供有效的六位數 HEX 值,所以最常見的被拒絕原因是手動輸入時省略了前綴井字號、縮短為三位數,或是包含了 alpha 通道。打開欄位,確認像 #1F6FEB 這樣的字串,預覽就會恢復。
同樣的原則也適用於幾何值。Size 為 15px、border 為 0,或是 radius 使用錯誤的單位填了 7,這些不會產生被裁切或四捨五入的輸出——會直接被拒絕。這是一個刻意的產品選擇:產生器寧可停止運作,也不願輸出與使用者請求不一致的程式碼。這樣的權衡是,這些邊界僅適用於本工具,並非通用的設計標準,所以在排解問題時,務必重新查看目前控制項的值,而不要憑對舊版的記憶。數值控制項會限制一般的滑鼠與鍵盤操作,這代表大多數驗證錯誤來自使用者手動輸入的字串,而非滑桿誤操作。
常見症狀與真正的成因
當產生的 checkbox 在真實表單中行為異常時,症狀通常看得到,但成因藏在更深的一層。下面的表格將最常見的抱怨對應到真正的根本原因,以及第一個該驗證的事項。
| 症狀 | 可能成因 | 第一個檢查項目 |
|---|---|---|
| 預覽為空或沒有變化 | HEX 格式錯誤或幾何值超出範圍 | 重新輸入六位數 HEX;確認 size 為 16–64、border 為 1–6、radius 為 0–50% |
| 勾選時打勾記號消失 | Input 被換成一般 div,或是 ::after 選擇器被覆寫 | 檢查渲染後的元素;保留原生 input 與原本的 class 名稱 |
| 按 Tab 鍵時沒有出現焦點外框 | 目的端樣式表中移除了 outline 顏色或 focus-visible 規則 | 保留 outline 可見;在套用目的端背景後重新測試 |
| 在 Windows 上顏色變成黑白 | 這是刻意啟用的 forced-colors 模式 | 用作業系統的高對比主題驗證;除非有充分理由,否則不要關閉它 |
| Disabled 狀態的打勾記號仍然會對點擊反應 | 整合時移除了 disabled 屬性 | 在 input 上保留 disabled;用 :disabled 選擇器設定樣式 |
以上是構成大多數「產生器壞了」回報的情況。統一的教訓是:如果預覽可以運作但目的端不行,那問題出在目的端,而不是產生器。大多數的退化發生在剪貼簿到部署的樣式表之間,而不是工具本身。
五個步驟修復壞掉的 Checkbox
當結果錯誤,而你一時看不出原因時,依序執行下列步驟。它的順序從最便宜的檢查到最昂貴的,每一步隔離一種失敗模式,讓你在找到原因時就能停下來。
- 重新驗證輸入。打開 CSS Checkbox Generator,重新輸入 size、border、radius,以及三個顏色。觀察即時預覽:如果控制項拒絕某個值,代表產生器正在做它的工作,你需要的是不同的數字,而不是不同的工具。
- 確認預覽通過鍵盤測試。點進預覽區域,按 Tab 鍵直到方框取得焦點,再按 Space 鍵切換。打勾記號應該會出現與消失,且焦點外框應該是可見的。如果 Space 鍵沒有作用,代表這個 input 已經不再是原生控制項。
- 把輸出貼到一個獨立的測試檔案中。在一份空白文件裡,使用程式碼區塊中完整的 CSS 與 HTML,不要附加其他樣式表。CSS 位於一個有範圍限制的 class 名稱之下;可以改名,但 CSS 與 HTML 之間的 class 必須對應。這一步可以區分「產生器輸出錯誤」與「我的樣式表錯誤」。
- 把範例 label 換成真實的表單選項。預設的 HTML 在 label 裡面包含佔位文字。必須保留 for 對應關係(或巢狀結構),而可見的文字必須描述真實的選項。少了這一步,checkbox 會沒有可存取名稱,螢幕閱讀器將讀不出任何有用的內容。
- 在目的端表單中以 200% 縮放與 forced-colors 進行測試。打開 checkbox 即將上線的頁面,將瀏覽器縮放至 200%,並切換作業系統的高對比模式。焦點外框必須在真實頁面背景上仍然可見,且標記必須在方框內仍然可見。如果產生的強調色與背景融為一體,請調整 outline 的顏色與寬度以符合對比需求。
為什麼預覽無法取代目的端測試
產生器頁面上的預覽,是把產生的樣式表套用在一個真實 input 上的忠實渲染,但它無法取代控制項最終要部署的表單環境。本工具不會模擬 indeterminate、invalid、required、disabled、read-only、high-contrast 或 forced-colors 等狀態。它不會考慮你頁面的實際背景、字型設定,或 CSS reset。它也不知道表單是否會被包在某個框架內,這個框架會把 input 包進額外的元件,或是用 props 取代屬性。
這是刻意的設計。一個乾淨的基準比起一個猜測所有可能目的端的產生器更容易整合。權衡在於,你必須自行加入並驗證那些缺少的狀態。官方的 CSS UI 規格——CSS Basic User Interface Level 4——描述了產生器用來抑制瀏覽器原生繪製的 appearance 屬性;標準層級的行為就是單一 input 元素保留 checked 狀態、焦點,以及表單參與,而這個契約只要周邊的應用程式有遵守就會持續成立。MDN appearance 參考文件記錄了 appearance 屬性及其相容性考量。
何時該停止編輯樣式表,改為編輯 HTML
有些症狀看起來像 CSS 問題,但實際上是 HTML 問題。如果點擊可見的 label 不會切換 checkbox,代表 input 與 label 失去了關聯——可能是巢狀結構錯誤,或是 for 與 id 的配對已經不再對應。如果 checkbox 不再隨表單一起送出,可能是某個祖先元素被改成 display: contents,因而失去了表單參與,或是 input 被重新配置到 form 元素之外。如果表單送出時值是空的,代表整合時 name 與 value 屬性被刪除了。這些都無法靠編輯樣式表來修復。
重跑產生器也無法解決這些問題,因為輸出是正確的;改變的是整合方式。最快的恢復路徑是,把部署中的 HTML 與工具產生的程式碼片段逐字元比對,並重新套用任何遺漏的屬性。一旦標記正確,現有的 CSS 就能正常運作而無需修改。一個常見的相關陷阱另外記錄在 使用 CSS Checkbox Generator 應避免的錯誤,其中更詳細地說明了相關的整合風險。
當標記看起來「不對」時的診斷方式
一個反覆出現的具體抱怨是,打勾記號看起來不均勻——某一邊比其他邊粗,或稍微傾斜。產生器用 ::after 偽元素繪製標記,僅使用右側與下方的邊框,旋轉 45 度,寬度、高度與邊框粗細則依所選的方框大小進行縮放。這些比例是刻意的產品選擇,並非通用的設計標準。在不常見的縮放等級、高密度螢幕上,或是在極端的邊框設定下,瀏覽器的反鋸齒可能讓某一條邊看起來稍微粗一些。在調整幾何值之前,請確認頁面處於 100% 縮放、裝置像素比為標準值,且邊框在 1–6 像素範圍內。如果問題在標準設定下仍然存在,將邊框減少一級比重畫標記更好;正是比例式的縮放讓標記在最小支援尺寸下仍然可見。
基於同樣的理由,請避免把 ::after 換成 SVG 的誘惑。偽元素正是讓產生的樣式表成為單一 CSS 區塊、不需要外部資源的原因;把它換成向量圖會多出一個請求、一個備用方案,以及一塊需要維護的可存取性介面。視覺上好看的 checkbox 不等於可存取的,所以排解問題的目標不是一張更漂亮的圖片——而是一個仍然能回應 Space 鍵、仍然會報讀自身名稱,且在使用者要求時仍能在 forced-colors 覆寫下存活的原生控制項。
如果你正在比較各種選項,簡化產生 CSS Cubic Bezier 的流程對此有詳細說明。