mcpField
C
css-design-tdd

css-design-tdd

github.com/xiaolai设计与 UI87858 次安装今天更新
代码仓库

关于 css-design-tdd

这项技能将 RED–GREEN–REFACTOR 流程用于 CSS 设计系统维护,提供基于 Shell 的检查示例和清单,适合维护样式令牌与组件样式的开发者。

主要功能

  1. 01检查未定义的 CSS 变量
  2. 02审计回退值与硬编码颜色
  3. 03检查容器样式一致性
  4. 04审计焦点样式与令牌
  5. 05提供 CSS TDD 流程与清单

适用场景

  1. 01查找已使用但未定义的 CSS 变量
  2. 02修改样式前检查回退值
  3. 03审计容器间距是否一致
  4. 04核查焦点样式与令牌用法

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/xiaolai/vmark --skill css-design-tdd

安装后在 Claude Code 中输入/css-design-tdd确认已加载。

详细介绍

CSS 设计系统 TDD

概述

将 TDD 原则应用于 CSS 设计系统工作:

  1. RED:运行检查,找出当前问题
  2. GREEN:修复 CSS,使其通过检查
  3. 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(修复问题)

针对每种问题类别:

  1. 阅读目标文件,了解上下文
  2. 进行最小限度的修复(添加回退值、使用令牌等)
  3. 重新运行对应检查,验证修复结果

修复工作流示例:

# 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