projectrules.ai

Using Tailwind v4

TailwindCSSCSSNextJSStylingDark Mode

Description

Inform model I'm using Tailwind v4

Globs

**/*
---
description: Inform model I'm using Tailwind v4
globs: **/*
---

# Using Tailwind v4

- This Next.js project is using Tailwind v4, which is released just now.
- The v4 is not in your embeded knowledge. See the following docs for latest information.
  - <https://tailwindcss.com/docs/upgrade-guide>
  - <https://ui.shadcn.com/docs/tailwind-v4>
- Tailwind v4.0 在 CSS 文件里的导入语句是 `@import 'tailwindcss';` 而不是 `@import '@tailwindcss/postcss';`

## 主要变化点

- **自定义变体语法**: 使用新的 `@custom-variant` 语法

  ```css
  @custom-variant dark (&:is(.dark *));
  ```

- **颜色格式**: 使用 OKLCH 颜色格式,提供更好的颜色表现

  ```css
  --background: oklch(1 0 0);
  --foreground: oklch(0.141 0.005 285.823);
  ```

- **主题内联**: 使用 `@theme inline` 定义主题变量

  ```css
  @theme inline {
    --color-background: var(--background);
    --color-foreground: var(--foreground);
    /* 其他变量 */
  }
  ```

- **导入语法**: 使用新语法导入样式表

  ```css
  @import 'tailwindcss';
  @plugin 'tailwindcss-animate';
  ```

## CSS变量命名约定

- 基础变量使用简单名称:`--background`, `--foreground`
- 主题变量使用 `--color-` 前缀:`--color-background`, `--color-foreground`
- UI组件变量使用对应名称:`--card`, `--primary`, `--accent`

## 黑暗模式实现

项目同时使用两种暗黑模式实现方式:

1. **Tailwind 原生**: 通过 `.dark` 类和自定义变体
2. **静态导出兼容**: 通过 `theme-switcher.js` 和直接 CSS 变量操作

在静态导出模式下,主题切换不依赖于客户端 JavaScript 框架,而是使用原生 DOM 操作。

## 样式文件结构

- `globals.css`: 主CSS文件,包含基础样式、主题变量和所有所需样式
- `theme-switcher.js`: 独立主题切换脚本,不依赖 React

## 使用建议

1. 使用HSL函数访问CSS变量:`hsl(var(--foreground))`
2. 为新组件添加暗黑模式样式时同时更新 `globals.css` 中的 `.dark`3. 新增颜色时优先考虑 OKLCH 格式,以获得更好的颜色表现