產生 CSS 核取方塊時,失敗發生在七個可預測的特定位置:格式錯誤的 HEX 顏色、需要整數卻輸入小數、幾何尺寸超出範圍、以 div 取代原生輸入、移除 label 或焦點指示器、在目的端樣式表中產生視覺漂移,以及 baseline 未模擬的互動狀態。這些失敗模式各自有已知成因、可辨識的徵兆,以及在將輸出貼入正式環境前可套用的單一修正方式。CSS 核取方塊產生器的設計目的,正是為了從源頭避免這些問題——它會驗證輸入的幾何尺寸、拒絕不完整的 HEX 值、保留原生輸入及其 label,並提供一個能在貼上後依然存活的 focus-visible 外框。它不會做的事情,則包括取代您真實表單的無障礙檢查、模擬 disabled 或 invalid 狀態,或是保護輸出在後續被編輯時不會遭到破壞。理解每個徵兆對應的是哪一種失敗,正是五分鐘修正與整個重設計之間的差別。

what can go wrong when i generate css checkbox when using css checkbox generator
產生 CSS 核取方塊時可能出錯的地方

產生器會拒絕的輸入

第一個出錯的地方就在輸入控制項本身。產生器對三件事非常嚴格:完整的六位數 HEX 顏色、大小與邊框必須為整數,以及每個數值欄位都必須落在範圍內。任何超出範圍的值都會被拒絕,而不是默默四捨五入或強制轉型,因此格式錯誤的值不會產生壞掉的程式碼——它根本不會產生任何程式碼。這種拒絕是刻意的設計,因為歷史上最常見的 off-by-one 像素錯誤與隱形的強調色,來源正是這種默默的四捨五入。

支援的範圍刻意訂得很緊。這樣的範圍符合原生核取方塊在視覺上的平衡,以及底層偽元素勾號在無抗鋸齒失真的情況下能夠呈現的結果。

控制項 接受的格式 範圍 常見錯誤
大小 整數像素 16 – 64 輸入 16.5 或 12
邊框 整數像素 1 – 6 輸入 0 或 0.75
圓角 百分比 0 – 50% 輸入 60% 或 4px
強調色 6 位數 HEX #000000 – #FFFFFF 3 位數縮寫、具名顏色、RGBA
背景顏色 6 位數 HEX #000000 – #FFFFFF 空字串、含 alpha 的 hex
勾號顏色 6 位數 HEX #000000 – #FFFFFF 在白色背景上使用粉彩色卻未做對比檢查

由於瀏覽器原生的色彩選擇器只會輸出有效的六位數 HEX 值,而數值輸入欄位會限制一般的鍵盤輸入,因此大多數使用者根本不會碰到這些失敗。它們通常發生在以下情況:有人從會輸出 RGBA 或縮寫格式的設計工具複製顏色,或是有人用程式控制這些輸入,送入了非整數的幾何值。

產生後容易遺失的原生語意

第二類失敗發生在程式碼被複製、並由開發者編輯以配合自家程式庫之後。產生器會保留一個巢狀於 label 元素中的原生 input type="checkbox",並加入一個對應所選強調色的 focus-visible 外框。每一個部分都扮演關鍵角色。移除或改寫其中任何一個,都會默默破壞某個產生程式碼並未對外宣稱的屬性。

最常見的默默損壞,就是將輸入換成一個樣式類似核取方塊的通用 div。這會破壞表單的參與——值不再送出、勾選狀態不再保存、輔助技術不再將此控制項朗讀為核取方塊。若是將輸入以 display: none 或 visibility: hidden 隱藏(而非以 appearance: none 樣式化),結果也一樣。MDN 上關於 appearance 屬性的文件說明了為何它才是正確的抑制機制:它會移除瀏覽器的繪製結果,同時保留元素的功能。

移除 label 的巢狀結構會破壞可存取名稱。可見的文字仍可點擊,但不再與輸入關聯,螢幕閱讀器會退而朗讀一個沒有描述的輸入。重新命名範例中的 label 文字是必要的,但保留 label 包裹層並非可選項目。

最後,移除或重新設定 :focus-visible 上的外框會破壞鍵盤導覽。產生的外框顏色預設會與強調色相符,但網站主題可能需要不同的顏色或寬度,才能在其實際環境下符合對比要求。請有意識地調整它——永遠不要直接刪除。

為何視覺輸出在目的端會漂移

第三類失敗是渲染漂移。產生器輸出的 CSS 在獨立環境中是正確的,但接收端的樣式表可能套用了全域重設、衝突的 box-sizing 規則,或改變核取方塊外觀的主題覆寫。產品行為文件中記載了幾個特定的漂移點,值得在上線前檢查。

輸出中包含 box-sizing: border-box,因此所選的像素尺寸會包含可見的邊框。若接收端的樣式表以不同的值全域重設 box-sizing,邊框就不再計入尺寸,核取方塊會變大。若 Tailwind 或 Bootstrap 的重設在產生的樣式載入之後,設定了 *, *::before, *::after { box-sizing: content-box; },也會發生同樣的情況。

勾號是使用 ::after 偽元素繪製,僅在輸入被勾選時顯示。其寬度、高度與邊框粗細會依據選定的方塊尺寸,以刻意設定的比例縮放。在不常見的縮放等級、裝置像素比,或極端的邊框設定下,抗鋸齒可能會讓其中一條邊看起來比其他邊稍微粗一些。這是已知的渲染副作用,並非產生 CSS 中的錯誤。

作業系統的強制色彩——最常見的例子是 Windows 高對比模式——可能會覆寫自訂的強調色、背景與勾號顏色。CSS Basic User Interface Level 4 規格在 外觀切換章節中記載了這項行為。抑制 forced-colors 的覆寫通常是錯誤的做法;正確的方式是在該模式下驗證結果,並將其視為一項特性。

Baseline 未涵蓋的狀態與互動

第四類失敗是上線後最常見的:表單需要 baseline 並未模擬的狀態。產生器僅涵蓋三種狀態——未勾選、已勾選,以及 focus-visible。其他所有狀態都必須在目的端新增並測試。

狀態 Baseline 是否涵蓋 目的端需採取的動作
未勾選 是 無
已勾選 是 無
Focus-visible 是(外框顏色符合強調色) 如有必要,調整顏色或寬度以符合環境對比
Hover 否 在樣式表中新增 :hover 規則
Disabled 否 新增 :disabled 規則,並在設定該屬性後進行測試
Invalid / error 否 新增 :invalid 或 [aria-invalid="true"] 規則,並加上可見的錯誤文字
Required 否 新增 required 屬性,並在 label 中加上可見的標記
Indeterminate 否 透過 JavaScript 設定,並驗證視覺呈現
Forced-colors 模式 未模擬 在 Windows 高對比模式下測試,並決定保留或調整

視覺上美觀的核取方塊並不自動代表無障礙。強調色、背景、勾號、邊框、焦點指示器、周圍頁面、hover 狀態、錯誤文字與 disabled 狀態,都必須在最終主題中分別檢查。如需深入了解 disabled 與 error 之間的落差,請參閱CSS 核取方塊產生器:它是否涵蓋 disabled 與 error 狀態?。

如何在不踩到這些失敗點的情況下產生核取方塊

  1. 在瀏覽器中開啟 CSS 核取方塊產生器。不需要帳號或上傳——一切都在目前的分頁中執行。
  2. 使用瀏覽器的色彩控制項挑選每個顏色,而不是自行輸入。色彩選擇器只會輸出有效的六位數 HEX 值,因此格式錯誤的輸入會被機械性地預防。
  3. 在支援的範圍內設定大小 (16 – 64)、邊框 (1 – 6) 與圓角 (0 – 50%)。數值輸入會拒絕小數與超出範圍的值,因此您會看到拒絕訊息,而不是默默四捨五入。
  4. 點擊預覽中的核取方塊與範例 label 文字,在已勾選與未勾選狀態之間切換。兩者都應該有反應,因為 label 包住了輸入。
  5. 分別點擊 Copy CSS,再點擊 Copy HTML。每個按鈕各自要求剪貼簿權限。若權限被拒絕,兩個程式碼區塊仍會留在頁面上供手動選取,不會回報假成功。
  6. 將 CSS 貼入您的樣式表,並視需要重新命名 .lizely-checkbox 類別。請勿移除 box-sizing: border-box、cursor: pointer、相對定位,或 :focus-visible 外框。
  7. 貼上 HTML,然後將範例 label 文字替換為真實的表單選項。請保留 label 包裹層,讓可存取名稱得以保留。
  8. 使用鍵盤 Tab 與 Space、200% 縮放、hover 狀態、disabled 屬性,以及 forced-colors 模式測試目的端表單。在上線前補上任何缺少的狀態樣式。

在真實表單中測試每種失敗模式

最後一類失敗發生在 QA 階段,而不是程式碼審查階段。一個在獨立環境中看起來正確的產生核取方塊,在放進真實表單的那一刻就可能壞掉,因為周圍的環境加入了產生器從未見過的狀態、主題與鍵盤順序。

僅以鍵盤走過整個表單。Tab 到核取方塊,確認焦點外框在真實頁面背景下仍可見,按下 Space 切換,並確認螢幕閱讀器會朗讀可存取名稱與新狀態。若焦點外框消失,或朗讀內容缺失,代表 label 或焦點樣式在某個下游環節被移除了。

將表單的縮放設為 200%,檢查核取方塊與其 label 文字、以及任何錯誤文字之間的對齊。留意在非整數裝置像素比下,因抗鋸齒造成的勾號邊緣不均勻現象。這是已知的渲染副作用,並非產生 CSS 中的錯誤。

切換至 Windows 高對比模式或作業系統上同等的強制色彩設定,然後重新載入表單。若核取方塊消失或視覺上失去勾選狀態,代表系統覆寫機制正在執行它應有的功能——除非有書面記載的無障礙理由,否則請勿將其關閉。

最後,新增您表單實際使用的 disabled、invalid 與 required 狀態,並重新測試每一項。Baseline 並未模擬這些狀態;目的端的樣式表必須負責。如需產生後檢查項目的結構化清單,請參閱產生 CSS 核取方塊後的常見錯誤。