用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/Dev-Toolbelt/dev-team-agents --skill css-quality命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | css-quality |
| description | CSS quality — specificity, magic numbers, responsive. Agnostic. |
Before writing any CSS, identify what the project already uses:
| Signal | Strategy |
|---|---|
tailwind.config.*, @apply, utility classes in markup | Utility-first (Tailwind or equivalent) |
*.module.css imports, styles.module.* | CSS Modules |
styled-components, @emotion/styled, css template literals | CSS-in-JS |
.scss / .sass files, @mixin, @include | Sass/SCSS |
Global styles.css / main.css, BEM class names | Global CSS + BEM |
Never mix strategies in the same codebase unless the project explicitly documents it.
Every numeric value that carries design meaning must be a token or variable.
/* bad */
margin-top: 13px;
color: #3b82f6;
/* good */
margin-top: var(--spacing-3);
color: var(--color-primary);
Define tokens in a single source of truth (:root variables, a theme file, or Tailwind config). Duplication of raw values across files is a DRY violation.
!important!important signals a specificity conflict that should be solved at the source. The only accepted exceptions: third-party override utilities and print stylesheets.
Cap nesting at 3 levels. Deeper nesting creates high specificity that is hard to override and signals the component should be split.
/* bad — depth 4 */
.card .header .title span { }
/* good */
.card-title { }
Use min-width breakpoints unless the project documents a desktop-first baseline. Mobile-first produces less CSS and is easier to override progressively.
/* good */
.container { width: 100%; }
@media (min-width: 768px) { .container { width: 720px; } }
Any animation or transition must be wrapped in a prefers-reduced-motion guard.
@media (prefers-reduced-motion: no-preference) {
.card { transition: transform 200ms ease; }
}
will-change sparinglyDeclare will-change only immediately before an animation triggers, not as a permanent style. Overuse forces GPU layers and increases memory consumption.
@layer components class — not inline repetition across 10 filesstyles.module.css across componentscomposes: foo from '../other.module.css') — creates implicit couplingconst or a separate styles fileuseMemo or extract static styles outside the componentblock__element--modifier.card .button is coupling, not composition| Anti-Pattern | Problem |
|---|---|
color: red / margin: 5px hardcoded | Breaks design token consistency |
Overriding with !important | Masks a specificity bug |
| Mixing responsive strategies (some mobile-first, some desktop-first) | Unpredictable cascade |
Animating width, height, top, left | Triggers layout — animate transform and opacity instead |
| CSS reset inside a component | Bleeds into global scope; use scoped styles |
Selector like div > ul > li > a | Fragile — breaks with any markup change |