关于 css-design-tdd
这项技能将 RED–GREEN–REFACTOR 流程用于 CSS 设计系统维护,提供基于 Shell 的检查示例和清单,适合维护样式令牌与组件样式的开发者。
主要功能
- 01检查未定义的 CSS 变量
- 02审计回退值与硬编码颜色
- 03检查容器样式一致性
- 04审计焦点样式与令牌
- 05提供 CSS TDD 流程与清单
适用场景
- 01查找已使用但未定义的 CSS 变量
- 02修改样式前检查回退值
- 03审计容器间距是否一致
- 04核查焦点样式与令牌用法
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ xiaolai/ vmark --skill css-design-tdd安装后在 Claude Code 中输入/css-design-tdd确认已加载。
详细介绍
CSS 设计系统 TDD
概述
将 TDD 原则应用于 CSS 设计系统工作:
- RED:运行检查,找出当前问题
- GREEN:修复 CSS,使其通过检查
- REFACTOR:确认没有回归问题,并进行清理
可用的检查
1. 未定义变量检查
查找已使用但从未定义的 CSS 变量:
# Extract all var(--name) usages
grep -rhoE 'var\(--[a-zA-Z0-9-]+' src/**/*.css | sort -u | sed 's/var(//' > /tmp/css-vars-used.txt
# Extract all --name: definitions
grep -rhoE '^[[:space:]]*--[a-zA-Z0-9-]+:' src/**/*.css | sed 's/://' | sed 's/^[[:space:]]*//' | sort -u > /tmp/css-vars-defined.txt
# Find undefined (used but not defined)
comm -23 /tmp/css-vars-used.txt /tmp/css-vars-defined.txt
2. 缺少回退值检查
查找容器块中未指定回退值的 var(--name):
# Blockquote variables without fallback
grep -n 'var(--[^,)]*)[^,]' src/components/Editor/editor.css | grep -E 'blockquote|alert|details'
# All containers - should have fallbacks for --list-indent, etc.
grep -rn 'var(--list-indent)' src/**/*.css # Should be var(--list-indent, 1em)
3. 硬编码颜色检查
查找应替换为令牌的十六进制颜色或 rgba 颜色:
# Hex colors outside :root definitions
grep -rn '#[0-9a-fA-F]\{3,6\}' src/**/*.css | grep -v ':root' | grep -v 'var(--'
# Hardcoded rgba (should be tokens in dark mode)
grep -rn 'rgba(255, 255, 255' src/**/*.css | grep -v ':root'
4. 容器一致性检查
验证容器块是否使用一致的值:
# Check margins across containers
echo "=== MARGINS ==="
grep -rn 'margin:.*em' src/components/Editor/editor.css src/plugins/alertBlock/*.css src/plugins/detailsBlock/*.css
# Check padding
echo "=== PADDING ==="
grep -rn 'padding:' src/components/Editor/editor.css src/plugins/alertBlock/*.css src/plugins/detailsBlock/*.css | head -20
# Check list multipliers
echo "=== LIST MULTIPLIERS ==="
grep -rn 'list-indent.*\*' src/**/*.css
5. 焦点指示器检查
查找未设置焦点样式的交互元素:
# Find elements with hover but no focus-visible
for file in src/**/*.css; do
if grep -q ':hover' "$file" && ! grep -q ':focus-visible\|:focus' "$file"; then
echo "Missing focus: $file"
fi
done
6. 令牌使用审计
检查特定令牌的使用是否一致:
# Radius token usage
echo "=== RADIUS ==="
grep -rn 'border-radius:' src/**/*.css | grep -v 'var(--radius'
# Shadow token usage
echo "=== SHADOWS ==="
grep -rn 'box-shadow:' src/**/*.css | grep -v 'var(--shadow\|var(--popup-shadow'
TDD 工作流
阶段 1:RED(建立基线)
# Run all checks, save baseline
echo "=== CSS TDD BASELINE ===" > /tmp/css-baseline.txt
echo "Date: $(date)" >> /tmp/css-baseline.txt
# Run each check category
echo -e "\n### Undefined Variables ###" >> /tmp/css-baseline.txt
# ... run check 1 ...
echo -e "\n### Missing Fallbacks ###" >> /tmp/css-baseline.txt
# ... run check 2 ...
# Count issues
echo -e "\n### Summary ###" >> /tmp/css-baseline.txt
wc -l /tmp/css-baseline.txt
阶段 2:GREEN(修复问题)
针对每种问题类别:
- 阅读目标文件,了解上下文
- 进行最小限度的修复(添加回退值、使用令牌等)
- 重新运行对应检查,验证修复结果
修复工作流示例:
# Before: verify issue exists
grep -n 'var(--list-indent)' src/components/Editor/editor.css
# Make fix in editor.css (add fallback)
# var(--list-indent) → var(--list-indent, 1em)
# After: verify issue resolved
grep -n 'var(--list-indent)' src/components/Editor/editor.css # Should show fallbacks
阶段 3:REFACTOR(确认没有回归问题)
# Run full check suite again
# Compare to baseline - issues should decrease, not increase
# Visual verification
pnpm dev # Check in browser: light mode, dark mode, all container types
检查脚本
快速检查(在更改前后运行)
#!/bin/bash
# scripts/css-quick-check.sh
echo "=== CSS Quick Check ==="
echo -e "\n1. Missing Fallbacks:"
grep -rn 'var(--list-indent)[^,]' src/**/*.css 2>/dev/null | grep -v '1em)' || echo " ✓ All fallbacks present"
echo -e "\n2. Hardcoded Dark Hover:"
grep -rn 'rgba(255, 255, 255, 0.08)' src/**/*.css 2>/dev/null | wc -l | xargs -I{} echo " {} occurrences (should be 0)"
echo -e "\n3. Container Margin Consistency:"
echo " Blockquote:" && grep -o 'margin:.*em' src/components/Editor/editor.css | grep -A1 blockquote | head -1
echo " Alert:" && grep -o 'margin:.*em' src/plugins/alertBlock/alert-block.css | head -1
echo " Details:" && grep -o 'margin:.*em' src/plugins/detailsBlock/details-block.css | head -1
echo -e "\n4. Focus States:"
for f in src/plugins/detailsBlock/*.css src/plugins/alertBlock/*.css; do
if ! grep -q 'focus-visible' "$f" 2>/dev/null; then
echo " Missing focus-visible: $f"
fi
done
echo -e "\nDone."
完整审计(在重大更改前运行)
#!/bin/bash
# scripts/css-full-audit.sh
echo "=== CSS Full Audit ==="
echo "Date: $(date)"
echo -e "\n## 1. Undefined Variables"
grep -rhoE 'var\(--[a-zA-Z0-9-]+' src/**/*.css 2>/dev/null | sort -u | sed 's/var(//' > /tmp/used.txt
grep -rhoE '^\s*--[a-zA-Z0-9-]+:' src/**/*.css 2>/dev/null | sed 's/://' | tr -d ' ' | sort -u > /tmp/defined.txt
comm -23 /tmp/used.txt /tmp/defined.txt
echo -e "\n## 2. Hardcoded Hex Colors (outside :root)"
grep -rn '#[0-9a-fA-F]\{3,6\}' src/**/*.css 2>/dev/null | grep -v ':root' | grep -v '\.svg' | wc -l
echo -e "\n## 3. Hardcoded Z-Index"
grep -rn 'z-index: [0-9]' src/**/*.css 2>/dev/null | grep -v 'var(--' | wc -l
echo -e "\n## 4. Border Radius Not Using Tokens"
grep -rn 'border-radius:' src/**/*.css 2>/dev/null | grep -v 'var(--radius' | grep -v '0' | wc -l
echo -e "\n## 5. Missing Focus Indicators"
for f in $(find src -name "*.css" 2>/dev/null); do
if grep -q ':hover' "$f" && ! grep -q ':focus' "$f"; then
echo " $f"
fi
done
echo -e "\nAudit complete."
容器块检查清单
修改容器块(blockquote、alert、details)时:
- Margin 使用
1em 0(保持一致) - Padding 使用令牌或
0.75em 1em模式 - 所有
var()调用都有回退值 - 交互元素已定义
:focus-visible - 存在嵌套内容规则(p、ul、ol、code、table)
- Border radius 使用
--radius-md - 颜色使用令牌(应用 CSS 中不使用硬编码的十六进制颜色)
与 pnpm check:all 集成
上述 CSS 检查脚本是内联示例,可直接在终端中运行或保存在本地。它们不是已提交的项目脚本。
参考文件
- 令牌定义:
src/styles/index.css - 设计系统规则:
.claude/rules/31-design-tokens.md - 组件模式:
.claude/rules/32-component-patterns.md - 容器审计:
dev-docs/audit/(位于仓库中)
评论
支持 Markdown