К основному содержанию
скилл Claude Code CX Codex Cursor GitHub Copilot

tailwind-4 — скилл для Claude Code: правила Tailwind CSS 4

Скилл ведёт агента по стилизации на Tailwind CSS 4: что писать в className, когда нужен style, а когда cn(). Пригодится, если в проекте есть CSS-переменные и условные классы.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add prowler-cloud/prowler --skill tailwind-4 -a claude-code
Открыть на GitHub

Что делает tailwind-4

Скилл включается, когда агент правит стили на Tailwind CSS 4: классы в className, варианты, утилита cn(). В основе дерево решений. Есть класс в Tailwind — пиши его в className. Значение меняется в рантайме: уходи в style. Нужны условные классы: бери cn().

Дальше идут жёсткие запреты с примерами. Не тащить var(--...) и hex-цвета в className: вместо bg-[#1e293b] берётся семантический класс вроде bg-slate-800. Утилиту cn() скилл описывает как обёртку над clsx и tailwind-merge. Оба пакета должны быть в проекте, сам скилл их не ставит — это первое, что стоит проверить.

Отдельный блок про библиотеки, которые не принимают className: для графиков вроде Recharts предлагаются константы с var() в пропсах style и fill. Потом паттерны вёрстки: flex, grid, отступы, типографика, состояния, тёмная тема. Arbitrary values вроде w-[327px] разрешены для разовых размеров, но не для цветов. Если cn() в проекте не заведён, примеры с условными классами придётся переписать под свою обёртку.

Какие задачи решает

  • выбрать между className, style и cn() для конкретного элемента
  • убрать var(--...) и hex-цвета из className
  • смержить конфликтующие утилиты на кнопке с вариантами
  • прокинуть цвета темы в Recharts через константы
  • задать ширину или прозрачность из состояния без arbitrary-класса

Примеры запросов агенту

  • Перепиши стили карточки на Tailwind 4 и убери `var()` из `className`.
  • Собери классы для кнопки с вариантами primary и secondary через `cn()`.
  • Задай в Recharts цвета осей и сетки из CSS-переменных темы.

Как установить tailwind-4

1Через Skills CLI (Vercel)

npx skills add prowler-cloud/prowler --skill tailwind-4 -a claude-code

2Вручную: положить файлы

~/.claude/skills/tailwind-4/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/tailwind-4/

Из того же набора4

Весь набор →

Похожие

typeui-fundamentals typeui.sh Скилл задаёт агенту базовые правила UI/UX: визуальную иерархию, 4-пиксельную сетку, типографику и требования доступности WCAG. Выручает, когда в дизайн-системе нет готового ответа. Claude Code CX Codex Cursor +1 2 200установок react-native-brownfield-migration callstackincubator Помогает пошагово внедрять React Native или Expo в нативные приложения iOS и Android с помощью @callstack/react-native-brownfield. Claude Code CX Codex Cursor +1 5 200установок ios-hig-design wondelai Скилл помогает проектировать нативные iOS-интерфейсы в соответствии с Human Interface Guidelines Apple. Пригодится, когда вы делаете приложение для iPhone или iPad и хотите, чтобы оно выглядело как родное для платформы. Claude Code CX Codex Cursor +1 8 100установок engineering-skills Alireza Rezvani Каталог инженерных скиллов для Claude Code: помогает выбрать роль под задачу и загрузить только нужный SKILL.md. Подходит для архитектуры, тестов, DevOps и работы с данными. Claude Code 2 387установок threejs-game-ui-designer majidmanzarpour Скилл для проектирования игровых интерфейсов на Three.js: HUD, меню, экраны паузы и победы, адаптивная вёрстка для мобильных и десктопа. Помогает избежать наложений, обеспечить читаемость и согласованность со стилем игры. Claude Code CX Codex Cursor +1 3 300установок threejs-gameplay-systems majidmanzarpour Разворачивает игровой цикл на Three.js, Vite и TypeScript с контролем физики, ввода и камеры. Пригодится при сборке прототипов и настройке гейм-фила. Claude Code CX Codex Cursor +1 3 300установок frontend-design официальный anthropics Скилл задаёт осмысленное визуальное направление для новых интерфейсов и редизайна. Подойдёт, когда стандартный шаблонный UI не устраивает. Claude Code Claude.ai 1 025 790установок design-taste-frontend Leonxlnx Скилл задаёт арт-дирекцию для публичных страниц и рабочих экранов, а затем проверяет результат в браузере по скриншотам. Нужен, когда интерфейс выглядит шаблонным или недоработанным. Claude Code CX Codex Cursor +1 673 100установок

Вопросы о tailwind-4

Как установить tailwind-4 в Claude Code?

Командой npx skills add prowler-cloud/prowler --skill tailwind-4 -a claude-code. Файл скилла появится по пути ~/.claude/skills/tailwind-4/SKILL.md.

Что делает скилл tailwind-4?

Задаёт агенту правила работы с Tailwind CSS 4: дерево выбора между className, style и cn(), запрет var() и hex-цветов в классах, примеры для библиотек без поддержки className.

Что нужно, чтобы примеры с `cn()` заработали?

Пакеты clsx и tailwind-merge в проекте и сама функция cn(), собранная на их основе. Скилл показывает, как её устроить, но зависимости не устанавливает.

Исходный текст

SKILL.md · Apache-2.0
---
name: tailwind-4
description: >
  Tailwind CSS 4 patterns and best practices.
  Trigger: When styling with Tailwind (className, variants, cn()), especially when dynamic styling or CSS variables are involved (no var() in className).
license: Apache-2.0
metadata:
  author: prowler-cloud
  version: "1.0"
  scope: [root, ui]
  auto_invoke: "Working with Tailwind classes"
allowed-tools: Read, Edit, Write, Glob, Grep, Bash, WebFetch, WebSearch, Task
---

## Styling Decision Tree

```text
Tailwind class exists?  → className="..."
Dynamic value?          → style={{ width: `${x}%` }}
Conditional styles?     → cn("base", condition && "variant")
Static only?            → className="..." (no cn() needed)
Library can't use class?→ style prop with var() constants
```

## Critical Rules

### Never Use var() in className

```typescript
// ❌ NEVER: var() in className
<div className="bg-[var(--color-primary)]" />
<div className="text-[var(--text-color)]" />

// ✅ ALWAYS: Use Tailwind semantic classes
<div className="bg-primary" />
<div className="text-slate-400" />
```

### Never Use Hex Colors

```typescript
// ❌ NEVER: Hex colors in className
<p className="text-[#ffffff]" />
<div className="bg-[#1e293b]" />

// ✅ ALWAYS: Use Tailwind color classes
<p className="text-white" />
<div className="bg-slate-800" />
```

## The cn() Utility

```typescript
import { clsx } from "clsx";
import { twMerge } from "tailwind-merge";

export function cn(...inputs: ClassValue[]) {
  return twMerge(clsx(inputs));
}
```

### When to Use cn()

```typescript
// ✅ Conditional classes
<div className={cn("base-class", isActive && "active-class")} />

// ✅ Merging with potential conflicts
<button className={cn("px-4 py-2", className)} />  // className might override

// ✅ Multiple conditions
<div className={cn(
  "rounded-lg border",
  variant === "primary" && "bg-blue-500 text-white",
  variant === "secondary" && "bg-gray-200 text-gray-800",
  disabled && "opacity-50 cursor-not-allowed"
)} />
```

### When NOT to Use cn()

```typescript
// ❌ Static classes - unnecessary wrapper
<div className={cn("flex items-center gap-2")} />

// ✅ Just use className directly
<div className="flex items-center gap-2" />
```

## Style Constants for Charts/Libraries

When libraries don't accept className (like Recharts):

```typescript
// ✅ Constants with var() - ONLY for library props
const CHART_COLORS = {
  primary: "var(--color-primary)",
  secondary: "var(--color-secondary)",
  text: "var(--color-text)",
  gridLine: "var(--color-border)",
};

// Usage with Recharts (can't use className)
<XAxis tick={{ fill: CHART_COLORS.text }} />
<CartesianGrid stroke={CHART_COLORS.gridLine} />
```

## Dynamic Values

```typescript
// ✅ style prop for truly dynamic values
<div style={{ width: `${percentage}%` }} />
<div style={{ opacity: isVisible ? 1 : 0 }} />

// ✅ CSS custom properties for theming
<div style={{ "--progress": `${value}%` } as React.CSSProperties} />
```

## Common Patterns

### Flexbox

```typescript
<div className="flex items-center justify-between gap-4" />
<div className="flex flex-col gap-2" />
<div className="inline-flex items-center" />
```

### Grid

```typescript
<div className="grid grid-cols-3 gap-4" />
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6" />
```

### Spacing

```typescript
// Padding
<div className="p-4" />           // All sides
<div className="px-4 py-2" />     // Horizontal, vertical
<div className="pt-4 pb-2" />     // Top, bottom

// Margin
<div className="m-4" />
<div className="mx-auto" />       // Center horizontally
<div className="mt-8 mb-4" />
```

### Typography

```typescript
<h1 className="text-2xl font-bold text-white" />
<p className="text-sm text-slate-400" />
<span className="text-xs font-medium uppercase tracking-wide" />
```

### Borders & Shadows

```typescript
<div className="rounded-lg border border-slate-700" />
<div className="rounded-full shadow-lg" />
<div className="ring-2 ring-blue-500 ring-offset-2" />
```

### States

```typescript
<button className="hover:bg-blue-600 focus:ring-2 active:scale-95" />
<input className="focus:border-blue-500 focus:outline-none" />
<div className="group-hover:opacity-100" />
```

### Responsive

```typescript
<div className="w-full md:w-1/2 lg:w-1/3" />
<div className="hidden md:block" />
<div className="text-sm md:text-base lg:text-lg" />
```

### Dark Mode

```typescript
<div className="bg-white dark:bg-slate-900" />
<p className="text-gray-900 dark:text-white" />
```

## Arbitrary Values (Escape Hatch)

```typescript
// ✅ OK for one-off values not in design system
<div className="w-[327px]" />
<div className="top-[117px]" />
<div className="grid-cols-[1fr_2fr_1fr]" />

// ❌ Don't use for colors - use theme instead
<div className="bg-[#1e293b]" />  // NO
```

© prowler-cloud · Apache-2.0 · prowler-cloud/prowler

Смотрите также

Спонсоры проекта

Компании, которые помогают держать аналитику открытой