Frontend Tailwind Best Practices

sergiodxa/agent-skills/skills/frontend-tailwind-best-practices

作者 sergiodxa40e21b46189d无许可证90 个星标收录于 2026年10月8日更新于 2026年10月8日仓库8个月前更新

Tailwind CSS patterns and conventions for frontend apps. Use when writing component styles, layouts, or working with CSS classes.

AI 生成的概览

面向前端组件的 Tailwind CSS 样式约定,涵盖布局、配色与响应式设计。

功能
提供十份规则文档,涵盖 Tailwind CSS 布局工具类、基于 gap 的间距、响应式堆叠、配色方案、使用 cn() 合并 className、className 属性类型、可供性类、断点、响应式文字以及输入能力。每条规则都给出错误与正确示例,并附反模式对照表。产出的是指导说明,而非代码成品。
适用场景
适用于使用 Tailwind CSS 编写组件样式或布局、处理响应式设计、使用配色方案,或在前端应用中合并 className 属性的场景。
运行要求
不含脚本,仅为说明性内容。假定项目使用 Tailwind CSS,并具备自定义堆叠工具类、cn() 合并辅助函数和设计令牌。

Tailwind CSS Best Practices

Styling patterns and conventions for frontend applications. Contains 10 rules covering layout utilities, affordances, color schemes, responsive design, and className handling.

When to Apply

Reference these guidelines when:

  • Writing component styles with Tailwind
  • Creating layouts (stacks, grids, centering)
  • Handling responsive design
  • Working with color schemes
  • Merging className props

Rules Summary

Layout Utilities (CRITICAL)

layout-stack-utilities - @rules/layout-stack-utilities.md

Use custom stack utilities instead of flex classes.

tsx
// Bad<div className="flex flex-col gap-4"><div className="flex flex-row gap-4">
// Good<div className="v-stack gap-4"><div className="h-stack gap-4">

Available utilities:

  • v-stack - Vertical stack (flex column)
  • h-stack - Horizontal stack (flex row)
  • v-stack-reverse - Reversed vertical stack
  • h-stack-reverse - Reversed horizontal stack
  • z-stack - Overlapping stack (grid-based, centers children on top of each other)
  • center - Center content both horizontally and vertically
  • spacer - Flexible spacer that fills available space
  • circle - Perfect circle with aspect-ratio 1/1
layout-prefer-gaps - @rules/layout-prefer-gaps.md

Use gap-* on parents instead of child margins.

tsx
// Bad<div>  <Item className="mb-4" />  <Item className="mb-4" /></div>
// Good<div className="flex flex-col gap-4">  <Item />  <Item /></div>
layout-responsive-stacks - @rules/layout-responsive-stacks.md

Switch layout direction at breakpoints.

tsx
// Mobile: vertical, Desktop: horizontal<div className="v-stack lg:h-stack gap-4">  <main className="grow">...</main>  <aside className="shrink-0 lg:w-80">...</aside></div>
// Mobile: horizontal, Desktop: vertical<div className="h-stack md:v-stack">

Color Schemes (CRITICAL)

color-schemes - @rules/color-schemes.md

Use class-based color schemes with a custom dark variant.

tsx
<button className="rounded-full bg-gray-900 px-4 py-2 text-white dark:bg-gray-100 dark:text-gray-900">  Toggle</button>

className Handling (CRITICAL)

classname-cn-utility - @rules/classname-cn-utility.md

Always use cn() to merge classNames in components.

tsx
import { cn } from "~/lib/cn";
function Button({ className, variant }: Props) {  return (    <button      className={cn(        "base-classes",        {          "variant-primary": variant === "primary",          "variant-secondary": variant === "secondary",        },        className, // external className always last      )}    />  );}
classname-prop-types - @rules/classname-prop-types.md

Use proper types for className props.

tsx
import type { ClassName, ClassNameRecord } from "~/lib/cn";
// Single elementtype Props = {  className?: ClassName;};
// Multiple elementstype Props = {  className?: ClassNameRecord<"root" | "label" | "input">;};
// Usage<Input className={{ root: "w-full", label: "font-bold" }} />;

Affordances (HIGH)

affordance-classes - @rules/affordance-classes.md

Define element-agnostic visual patterns that compose with utilities.

tsx
<label className="ui-button" htmlFor="document-upload">  Choose file</label>

Responsive Design (MEDIUM)

responsive-breakpoints - @rules/responsive-breakpoints.md

Use responsive prefixes with Tailwind defaults.

tsx
// Standard breakpoints (min-width)<div className="px-4 md:px-8 lg:px-12">
// Show/hide with standard breakpoints<div className="hidden md:block">Desktop only</div><div className="md:hidden">Mobile only</div>
responsive-text - @rules/responsive-text.md

Scale text responsively.

tsx
// Responsive font size<h1 className="text-2xl md:text-3xl lg:text-4xl">
// Responsive line height with text<p className="text-sm leading-5 md:text-base md:leading-6">
responsive-capabilities - @rules/responsive-capabilities.md

Design for input capabilities (pointer/hover) instead of device labels.

tsx
<button className="h-10 w-10 pointer-coarse:h-12 pointer-coarse:w-12">  <Icon /></button>

Anti-Patterns

Don'tDo
flex flex-colv-stack
flex flex-rowh-stack
flex items-center justify-centercenter
bg-gray-100bg-neutral-100
bg-[#hex]Use design tokens
className="..." without cn()cn("...", className)
Inline style for responsiveTailwind prefixes

Key Files

FilePurpose
tailwind.config.jsConfig, custom utilities, colors
app/styles/global.cssColor scheme CSS variables
app/styles/tailwind.cssAdditional utilities
app/utils/cn.tsclassName merge utility

来源与署名

来源:sergiodxa/agent-skills位于skills/frontend-tailwind-best-practices提交40e21b4

许可证: 无许可证

内容归原作者所有。SourceWeft 从公开仓库中收录这些内容。

举报或申请下架