Community程式設計與開發github.com

yonathan-boop/Claude

人類與無障礙技能,專注於反垃圾內容。對比度、鍵盤、焦點與狀態,為真實使用者設計。內含對比度檢查工具。

Claude 是什麼?

這個技能(antislop-human)是 antislop 系統的一部分,旨在確保 AI 生成的 UI 不會因為對比度不足、鍵盤操作問題、焦點指示器缺失或狀態回報不完整而排除真實使用者。它與核心的 antislop.md 一起使用,提供人類友善的深度指引:包含 WCAG AA 標準的詳細對比度檢查(公式、參考表格與 Python 腳本)、鍵盤無障礙模式(如 focus outline 移除與滑鼠專屬互動的修正)、焦點與狀態的設計要求(包括非色彩回饋),以及行動端縮放與螢幕鍵盤覆蓋表單的處理。它支援 Claude Code 等代理平台,並在最後附上「人類技能檢查清單」,可作為核心交付閘門的補充,確保 UI 不只外觀美觀,也對所有人真正可用。

相容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/yonathan-boop/Claude/tree/HEAD/skills/antislop-human

Installed? Explore more 程式設計與開發 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜歡的 AI 中提問

開啟一個已預先載入此 Agent Skill 的新對話。

說明文件

antislop-human

反垃圾內容:AI 編碼代理規則。人類技能

屬於 antislop 系統的一部分。請與 antislop.md(核心)一同閱讀。此技能深入探討人類關懷:UI 必須讓不同眼睛、手部與設備配置的人都能使用。包含對比度、鍵盤、焦點、狀態,以及那些會排除使用者的行動端細節。

如何使用此技能

  • 與 antislop.md 一起載入,但凡任務涉及建置或編輯 UI 時。核心包含機制(目的測試、三層級、交付閘門);此技能則提供人類端的深度:UI 中會排除不同眼睛、手部與設備配置使用者的部分。
  • 每個條目都有相同的結構:說明(模式)、原因(它排除了誰,以及為何看起來未完成)、修正(改採的做法),並引用核心規則編號 R-XX。
  • 無障礙不是最後才加上的一串核取清單。它是核心承諾「UI 經得起考驗」(C-4)的一部分。核心中的交付閘門仍是閘門;本檔案結尾的「人類技能檢查清單」則是與之搭配執行的補充。
  • 對比度檢查工具(公式 + 參考表格 + 腳本)位於此技能中。對於所有無法肉眼驗證的顏色配對,請使用它。
  • 此技能僅保留那些會排除使用者的行動端細節:縮放,以及螢幕鍵盤。

色彩與對比度

低對比度文字

  • 說明: 淺灰色文字放在白色或接近白色的背景上,纖細的主體文字,選擇因為「優雅」而變淡的標籤,但難以閱讀。
  • 原因: 它排除了低視力使用者以及所有在強光下的人。這是一個未檢查標準的視覺選擇,正是此過濾器要捕捉的那種預設行為。
  • 修正: 符合 WCAG AA 最低標準(R-25):一般文字 4.5:1,大型文字(18px 以上)3:1。計算比例,不要目測。

照片或漸層上的文字

  • 說明: 白色文字直接放在圖片或漸層上,該區域某些部分較亮,僅在一個亮點檢查。
  • 原因: 對比度是區域性的。在圖片亮的區域,即使整體看起來仍「良好」,文字對比度仍會低於 4.5:1。R-25 要求測試文字覆蓋的整個區域,而不是單一點。
  • 修正: 在文字後面添加遮罩或純色區塊,然後驗證最差的位置,而不是最好的位置。如果文字區域的任何部分未通過,則該處理方式失敗。

灰色對灰色的幻覺

  • 說明: 宣稱「深灰配黑」或「淺灰配白」通過 AA 標準,但未經計算。
  • 原因: 這是最常見的無障礙幻覺。人眼會高估灰色配對的對比度,而代理會因為聽起來合理而重複此說法。#555555 配黑色的比例是 2.8:1。它未通過。
  • 修正: 切勿斷言配對通過。請執行對比度檢查工具(如下)或應用公式。若兩者皆不可行,請使用參考表格。

非文字對比度

  • 說明: 互動元件(按鈕、圖示、輸入框邊框、焦點指示器、圖表區段)與其背景的區分低於 3:1。
  • 原因: 非文字 UI 透過形狀與邊緣傳達資訊。當邊緣只有細微色調時,低視力使用者無法找到控制項。相同的標準也適用於懸停和選中等狀態。
  • 修正: 為每個元件邊界和每個狀態指示器提供與相鄰顏色 3:1 的比例(WCAG 1.4.11)。將圖示與符合 4.5:1 的文字標籤配對。

對比度檢查工具

對比度檢查工具的大本營。分為三層,從最方便到最不方便:

腳本。 當腳本執行環境可用且檔案存在時,請執行它,而不是手動計算。腳本位於此技能的資料夾中(contrast-check.py,與此 SKILL.md 同一層)。在 macOS 和 Linux 上用 python3 執行,在 Windows 上用 python 執行:

python3 "${CLAUDE_SKILL_DIR}/contrast-check.py" "#FFFFFF" "#777777"
# 一般文字:失敗 (4.48 < 4.5)
# 大型文字:通過 (4.48 >= 3.0)

如果此代理中沒有 ${CLAUDE_SKILL_DIR} 變數,請直接將腳本路徑指向此技能的資料夾。腳本的存在是為了讓代理停止幻覺 AA。它接受兩個十六進位顏色,並輸出比例和兩種文字大小的判定結果。如果檔案遺失,下方的公式和表格本身已完整。切勿因為腳本而停滯。

公式(WCAG 2.x)。

  1. 對比度比例 = (L1 + 0.05) / (L2 + 0.05),其中 L1 是較亮的相對亮度,L2 是較暗的。
  2. 單一顏色的相對亮度 L:將每個通道轉換為 0-1(c = hex / 255),然後線性化:如果 c <= 0.03928,則 c_lin = c / 12.92;否則 c_lin = ((c + 0.055) / 1.055)^2.4。
  3. L = 0.2126*R + 0.7152*G + 0.0722*B。
  4. 比較未四捨五入的比例:一般文字為 4.5:1,大型文字為 3:1(18px 以上,依據 R-25)。僅在顯示時四捨五入,因此比例為 4.498:1 的配對顯示為 4.50,但仍未通過 4.5:1。最大比例為 21.0(白底黑字)。

參考表格(常見配對,使用公式計算):

配對(文字於背景上)比例一般文字 (4.5)大型文字 (3.0)
白底黑字21.00通過通過
黑底白字21.00通過通過
#333333 底白字12.63通過通過
#666666 底白字5.74通過通過
白底 #7777774.48失敗通過
#070707 底 #7777774.50失敗通過
#888888 底白字3.54失敗通過
#999999 底白字2.85失敗失敗
黑底 #5555552.82失敗失敗

#070707 底 #777777 這行是接近閾值的案例:4.4983:1 顯示為 4.50,但仍未通過 4.5:1。

將此表格視為合理性檢查,而非替代品。任何未列出的配對,或任何接近閾值的配對,都需透過公式或腳本進行檢查。

鍵盤

移除焦點外框

  • 說明: outline: none 或 outline: 0 且沒有替代的焦點樣式。
  • 原因: 鍵盤使用者看不到他們的位置。這是讓 UI 在沒有滑鼠時變得無法使用的最快方法,R-32 直接禁止此做法。
  • 修正: 保留或替換外框為可見的 :focus-visible 樣式,該樣式需符合相同的對比度標準(與相鄰元素 3:1)。切勿在沒有替代方案的情況下設定 outline: none。

僅限滑鼠的模式

  • 說明: 僅在懸停時開啟的選單、點擊開啟但無法用鍵盤開啟的下拉選單、沒有鍵盤替代方案的拖放功能。
  • 原因: 每一個都會排除鍵盤與輔助科技使用者(R-32)。如果一個控制項無法透過 Tab、Enter 或 Space 鍵到達和操作,它對一整群人而言就不存在。
  • 修正: 每個互動元素都能透過鍵盤到達和操作(R-32):遵循視覺順序的邏輯 Tab 順序、使用 Enter 或 Space 啟動、對話框可用 Escape 關閉(R-26)。

中斷的 Tab 順序

  • 說明: 因為 DOM 順序與視覺順序不符,焦點在頁面上跳來跳去、跳過內容,或落在隱藏元素上。
  • 原因: 讀取程式碼順序而非視覺順序的 Tab 順序會使導航變得無法預測(R-32)。使用者會失去他們的位置,頁面感覺故障。
  • 修正: 使原始碼順序與視覺順序一致,為長頁面添加跳過連結,並且切勿為真實內容設定 tabindex="-1",除非它是受控焦點陷阱(例如對話框)的一部分。

焦點與狀態

微弱或不可見的焦點指示器

  • 說明: 與背景顏色相同的焦點環、僅在懸停時出現的環,或者比 1px 邊框還細的指示器。
  • 原因: 焦點指示器是鍵盤使用者知道他們位置的方式。如果它未通過對比度標準或僅在懸停時顯示,則僅使用鍵盤的操作就會中斷(R-32, R-34)。
  • 修正: 每個互動元素上都有一個可見的焦點指示器,與相鄰顏色有 3:1 的對比度,在你提供的每個主題中都要有。在深色和淺色模式中檢查它。

僅用色彩的回饋

  • 說明: 成功、錯誤和狀態僅透過顏色傳達:紅色的錯誤文字、綠色的成功邊框、有顏色的標籤,沒有圖示、標籤或文字。
  • 原因: 它排除了色盲和低視力使用者,並且在強制色彩模式下完全消失。依賴於看到色調的狀態不是真正的狀態(C-4)。
  • 修正: 將每個顏色信號與文字、圖示或模式配對。錯誤狀態首先是文字:「密碼長度至少需要 8 個字元」,而不僅僅是紅色邊框。

缺少 UI 狀態

  • 說明: 沒有空白、載入或錯誤狀態的資料視圖,或者狀態存在但不可見:沒有文字的旋轉動畫、沒有說明的空白畫面。
  • 原因: R-27 要求這三種狀態;從無障礙角度來看,每個狀態都必須是可感知且資訊豐富的,而不只是裝飾性的。沒有上下文的載入旋轉動畫,對螢幕閱讀器使用者來說就像當機的頁面。
  • 修正: 每個資料視圖都有全部三種狀態(R-27),並且每個狀態都被宣告或可見:明確的空白訊息、帶有文字的載入狀態、以及說明發生什麼事以及如何繼續進行的錯誤狀態。

縮放與行動端使用

行動端的版面機制(斷點、縮放、網格、溢出、觸控目標)是 antislop-layoutmobile 的範圍。本節僅保留那些會排除使用者的行動端細節:縮放,以及螢幕鍵盤。

無法縮放的文字

  • 說明: 固定的像素字體大小,或者使用 overflow: hidden 的容器在 200% 縮放時裁剪文字。
  • 原因: 使用者必須能夠調整文字大小(WCAG 1.4.4)。如果縮放到 200% 會裁剪內容或強制水平滾動,則文字實際上無法調整大小。
  • 修正: 使用隨著縮放而重排的流動字型,不要在文字上使用會裁剪的容器,並驗證在窄視口上以 200% 縮放時版面仍能保持(R-35)。

行動鍵盤遮蓋表單

  • 說明: 視口底部的輸入框被螢幕鍵盤遮蓋,沒有滾動到視野中,也沒有為輸入框留下空間。
  • 原因: 使用者看不到也摸不到的表單,就是他們無法完成的表單。這是僅限行動端的排除情況(R-03)。
  • 修正: 當輸入框獲得焦點時,它應滾動到鍵盤上方進入視野,並有足夠的底部內邊距,使得焦點欄位永遠不會被遮蓋。在真實設備或模擬鍵盤上測試。

人類技能檢查清單

當任務涉及 UI 時,請與核心交付閘門一起執行這些檢查。所有答案必須是是:

  • 每個文字與背景的配對是否都已透過對比度檢查工具(公式、表格或腳本)驗證,包括圖片和漸層上的文字?(R-25)
  • 每個互動元件的邊界和狀態指示器是否都與其背景達到 3:1 的對比度?(非文字對比度)
  • 焦點指示器是否在所有主題的每個互動元素上都可見、高對比度且存在?(R-32, R-34)
  • 每個互動元素是否都能透過鍵盤到達和操作,對話框可透過 Escape 關閉,且沒有未經替代的 outline: none?(R-32, R-26)
  • 每個資料視圖的空白、載入和錯誤狀態是否存在且可感知,而非僅以顏色區分?(R-27, C-4)
  • 文字能否調整大小至 200% 而不被裁剪,且行動鍵盤是否從未遮蓋有焦點的輸入框?(R-35)

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

相關技能