從 CSS 核取方塊產生器 正確產生的 CSS 核取方塊,是真正的原生 input 元素,類型為 checkbox,以 appearance: none 進行樣式設定,並透過偽元素 (pseudo-element) 繪製勾號,僅在 input 處於勾選狀態時顯示,同時保留 focus-visible 外框給鍵盤使用者使用。「正確」代表以下三件事同時成立:每個選擇的值都落在產生器接受的有限範圍內、複製的 HTML 仍將 input 巢狀於 label 元素中並附帶真實的選項文字、以及貼上的樣式表保留了原生語意,使表單參與、鍵盤啟用與 disabled 行為在您的目標頁面中依然正常運作。CSS 核取方塊產生器的設計目的,就是讓這個組合在不依賴 JavaScript、腳本,或以 div 取代控制項的情況下得以實現——而這正是大多數「看起來正確,但實際出貨卻出錯」的自訂核取方塊所犯的錯誤。為確保您的輸出正確,請在複製前驗證輸入、將兩個區塊都複製到您自己的樣式表與表單中,然後針對鍵盤導覽、200% 縮放下的對比、強制色彩模式 (forced-colors mode),以及您真實表單實際需要的 disabled 與錯誤狀態,執行一次聚焦的驗證流程。

產生的核取方塊實際上需要具備哪些正確性
當人們詢問在使用 CSS 核取方塊產生器時,如何確保正確產生 CSS 核取方塊,他們的疑慮通常來自於已經親眼見過的三種結果之一:核取方塊在預覽中看起來正確,但在表單中失效;核取方塊無法通過鍵盤導覽;或是核取方塊的色彩一旦放在真實頁面背景上,就無法通過對比檢驗。這裡所說的「正確」,是輸入有效性、語意保留與視覺可及性的總和,而不僅僅是「預覽符合我的品牌」。
CSS 核取方塊產生器會為原生 HTML 核取方塊產生一個聚焦的自訂外觀。當外圍應用程式正確使用相關功能時,原生元素仍會提供勾選狀態、鍵盤焦點、表單參與與 disabled 行為。最後這個子句很重要:產生器無法修正一個把 input 連接錯誤的表單,而一個「正確」的 CSS 區塊被貼進損壞的 HTML 中,仍然是損壞的 HTML。將「正確性」視為整個堆疊的屬性,而非僅僅是樣式表的屬性,是區分乾淨產出與損壞產出的第一個習慣。
產生器強制執行的輸入規則
正確性從您餵給工具的值開始。產生器會驗證有限範圍的整數幾何與嚴格的六位數 HEX 色彩,實作方法對此也有明確說明:格式錯誤的色彩、需要整數卻出現小數、以及超出範圍的幾何值,都會被拒絕,而不是默默地產出誤導的程式碼。瀏覽器的色彩控制項在正常使用下會提供有效的值,而數值控制項會限制一般的指標與鍵盤輸入,這正是為什麼手動輸入的錯誤值通常根本不會出現在預覽中。
| 欄位 | 接受格式 | 範圍或規則 |
|---|---|---|
| 尺寸 | 整數像素 | 16 到 64 |
| 邊框 | 整數像素 | 1 到 6 |
| 圓角 | 百分比 | 0% 到 50% |
| 強調色 | 六位數 HEX | 完整數值,不可使用簡寫 |
| 背景色彩 | 六位數 HEX | 完整數值,不可使用簡寫 |
| 勾號色彩 | 六位數 HEX | 完整數值,不可使用簡寫 |
| 幾何總計 | 包含邊框 | 輸出中包含 box-sizing: border-box |
如果您的品牌需要 70 像素的方框、2.5 像素的邊框,或超過 50% 的圓角,產生器將不會產生這些值,而這個限制就是第一個正確性訊號。試圖手動將這些值強行寫入 CSS,正是原生 input 與其偽元素不再對勾選狀態應有的外觀達成一致的典型情況。
以正確的順序產生核取方塊
CSS 核取方塊產生器有清楚的工作流程:調整控制項、複製兩個程式碼區塊、替換範例標籤,然後在目標頁面中測試。請完全按照此順序操作;打亂順序正是人們最後得到一個「正確」的樣式表,卻被貼進一個標籤文字仍寫著「Option A」的表單的原因。
- 開啟 CSS 核取方塊產生器,一邊觀察即時預覽,一邊調整尺寸、邊框、圓角與三種色彩。使用滑鼠與空白鍵切換核取方塊,以確認勾選與未勾選狀態在您選擇的尺寸下都看起來正確。
- 點擊方框或其預覽標籤,以實際操作勾選與未勾選狀態。勾號是透過 ::after 偽元素繪製,僅在 input 被勾選時顯示,因此必須在兩種狀態下都進行視覺確認。
- 分別點擊 Copy CSS 與 Copy HTML。每次複製請求都會觸發各自的剪貼簿權限提示,成功訊息會指出複製的是哪一個輸出。若權限遭拒,兩個程式碼區塊都會保持可見,以便手動選取,而不是回報一個假成功。
- 在您真實的表單中,將範例標籤文字替換為對真實選項有意義的描述。請保持 input 巢狀於 label 元素內,如此點擊文字仍會切換控制項,且核取方塊具有可存取的名稱 (accessible name)。
- 將 CSS 貼到受控管的樣式表。如果範圍限定的 class 名稱 lizely-checkbox 與您的命名慣例衝突,可予以重新命名,但請保持規則主體完整無缺,使 box-sizing: border-box、cursor: pointer、勾選狀態的背景與邊框色彩、供偽元素使用的相對定位,以及帶有偏移的 focus-visible 外框都維持在一起。
- 在宣告產生結果正確之前,請執行下方的驗證流程。
基準涵蓋了什麼與未涵蓋什麼
正確產生的核取方塊並不會自動成為完整的核取方塊。產生器基準僅涵蓋未勾選、已勾選與 focus-visible 狀態。它不會模擬 indeterminate、invalid、required、disabled、read-only、高對比或強制色彩狀態。當真實產品需要這些狀態時,請新增並驗證它們。
| 狀態或條件 | 產生器是否涵蓋 | 在目標端的動作 |
|---|---|---|
| 未勾選 | 是 | 無 |
| 已勾選 | 是 | 無 |
| Focus-visible | 是 (外框色彩符合強調色) | 針對真實背景確認對比 |
| Disabled | 否 | 在樣式表中設定 input:disabled 樣式 |
| Invalid / 錯誤 | 否 | 搭配可見的錯誤文字與 input:invalid 樣式 |
| Required | 否 | 新增 required 屬性與可見標記 |
| Indeterminate | 否 | 僅能透過 JavaScript 設定;純 CSS 無法產生 |
| 強制色彩 | 否 | 於作業系統的強制色彩模式下測試;不要擊敗有用的覆寫 |
| 200% 縮放 | 未模擬 | 以手動方式於 200% 縮放下測試 |
focus-visible 外框是產生 CSS 的一部分,其色彩設定為符合您挑選的強調色,如 MDN appearance 參考文件所述。您的網站可能需要不同的外框色彩或寬度,以滿足在其實際環境中的對比需求,而這就是下一個正確性檢查。
目標表單的驗證檢查清單
嵌入的工具頁面包含許多可聚焦的控制項,因此預覽本身無法取代對目標表單順序與說明文字的測試。請依序走過此清單,在每個項目通過之前,不要將產生結果標記為正確。這與 產生 CSS 核取方塊後如何檢查結果中的更廣泛指引自然地相互搭配。
- 從表單的第一個欄位使用 Tab 鍵切換,確認核取方塊會接收到可見的焦點指示器。焦點並不會被產生的 CSS 移除,這點很重要,因為鍵盤使用者需要一個可見的指示,以得知哪個控制項會對空白鍵作出回應。
- 按下空白鍵以切換核取方塊。原生勾選狀態必須翻轉,且 ::after 偽元素勾號必須與 input 的 checked 屬性同時出現與消失。
- 針對您的最終主題,檢查強調色、背景、勾號、邊框、焦點指示器、周圍頁面、hover 狀態、錯誤文字與 disabled 狀態。視覺上吸引人的核取方塊並不會自動具備可及性。
- 使用 色彩對比檢查器,針對您的真實頁面背景,確認未勾選邊框、已勾選背景與焦點外框的對比,即時驗證每一組對比是否符合 AA 與 AAA 門檻。
- 在核取方塊處於未勾選與已勾選兩種狀態下提交表單。原生 input 必須仍將其值送至表單處理程式。
- 啟用您作業系統的高對比或強制色彩模式。作業系統與瀏覽器可能會因為使用者可及性設定而覆寫自訂色彩,這種行為可能是有益的,在沒有充分理由的情況下不應予以擊敗。請確認核取方塊仍可見,且勾號仍可清楚區分。
- 將頁面縮放至 200%,並再次以 Tab 鍵瀏覽表單。200% 縮放測試是「看起來正確」的核取方塊實際上失效的最常見位置之一。
- 縮放或調整大小,直到方框接近 16 像素(最小的支援尺寸),並確認勾號仍然清晰可辨。其寬度、高度與邊框粗細是根據所選方框尺寸縮放,並設有最小值以確保標記在最小支援尺寸下仍可見,但極端的邊框設定可能會因為反鋸齒而使某一側看起來略重。
Common Traps That Make a Generated Checkbox "Wrong"
Three traps account for most failed generations. First, leaving the example label in place. The example HTML pairs the input with visible label text inside a label element, but it ships as generic wording so the preview is meaningful without your content. Change it to describe the real choice; otherwise the control has a confusing or misleading accessible name, and screen readers will announce that generic text instead of the option the user is actually picking.
Second, treating the output as a finished stylesheet. It is a clean starting point. Paste it into a controlled stylesheet, rename the class if needed, preserve the native semantics, and validate the complete form with real content and assistive technology. Stripping the focus-visible outline, swapping the native input for a div, or replacing relative positioning without rethinking the pseudo-element offsets all break correctness even though the preview kept working.
Third, ignoring forced-colors mode. OS forced colors may override custom colors, and that behavior can be beneficial and should not be defeated without a strong reason. If you suppress it with a forced-colors media query that hard-resets every color, you can ship a checkbox that looks fine in your tests and disappears in a user's actual browser. The W3C CSS Basic User Interface Level 4 specification covers the appearance-switching behavior that makes forced-colors overrides possible.
When the Tool Has Done Its Job and When You Still Have Work
The generator's scope is narrow on purpose: bounded integer geometry, strict HEX colors, a native labeled checkbox, a pseudo-element checkmark scaled from the box size, a retained focus-visible outline, and preview output that matches the copied code. The output's box-sizing: border-box makes the selected size include the visible border, so a 24-pixel choice really is 24 pixels including the border. None of those choices are presented as externally mandated values, and the dimension and checkmark ratios are covered by exact string and geometry tests rather than claimed as a universal design standard.
If your real form needs animations, indeterminate state, custom keyboard handling beyond Space, or a control that looks identical across forced-colors, browsers, and zoom levels, the generator's output is a clean starting block rather than a finished product. That distinction is the difference between "I generated a checkbox" and "I generated a correct checkbox." Once you have walked the input rules, copied both code blocks, replaced the example label, and passed every item on the verification checklist in your real destination form, you have actually answered the question of how to make sure you generate a CSS checkbox correctly when using a CSS checkbox generator.
If you're weighing options, Make Sure Your CSS Cubic Bezier Output Is Correct covers this in detail.