这里会使用 shadcn/ui 作为基础的样式,不会使用原始的 CSS。

定义项目

项目终归有一个主题。你要清楚你的目标客户是谁。这个网站要做什么。

主题与系统

颜色是使用 HSL 定义的,即色相、饱和度、亮度。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
@layer base {
:root {
--background: 0 0% 100%;
--foreground: 20 14.3% 4.1%;
--card: 0 0% 100%;
--card-foreground: 20 14.3% 4.1%;
--popover: 0 0% 100%;
--popover-foreground: 20 14.3% 4.1%;
--primary: 24.6 95% 53.1%;
--primary-foreground: 60 9.1% 97.8%;
--secondary: 60 4.8% 95.9%;
--secondary-foreground: 24 9.8% 10%;
--muted: 60 4.8% 95.9%;
--muted-foreground: 25 5.3% 44.7%;
--accent: 60 4.8% 95.9%;
--accent-foreground: 24 9.8% 10%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 60 9.1% 97.8%;
--border: 20 5.9% 90%;
--input: 20 5.9% 90%;
--ring: 24.6 95% 53.1%;
--radius: 0.75rem;
}

.dark {
--background: 20 14.3% 4.1%;
--foreground: 60 9.1% 97.8%;
--card: 20 14.3% 4.1%;
--card-foreground: 60 9.1% 97.8%;
--popover: 20 14.3% 4.1%;
--popover-foreground: 60 9.1% 97.8%;
--primary: 20.5 90.2% 48.2%;
--primary-foreground: 60 9.1% 97.8%;
--secondary: 12 6.5% 15.1%;
--secondary-foreground: 60 9.1% 97.8%;
--muted: 12 6.5% 15.1%;
--muted-foreground: 24 5.4% 63.9%;
--accent: 12 6.5% 15.1%;
--accent-foreground: 60 9.1% 97.8%;
--destructive: 0 72.2% 50.6%;
--destructive-foreground: 60 9.1% 97.8%;
--border: 12 6.5% 15.1%;
--input: 12 6.5% 15.1%;
--ring: 20.5 90.2% 48.2%;
}
}

shadcn UI 使用 CSS 自定义属性(CSS 变量)来定义其主题系统。以下是每个变量的含义和典型用法:

背景和前景

  • --background: 整个应用的主要背景色
  • --foreground: 主要文本颜色,通常在背景色上使用

卡片

  • --card: 卡片、面板等组件的背景色
  • --card-foreground: 卡片内的文本颜色

弹出框

  • --popover: 弹出菜单、工具提示等的背景色
  • --popover-foreground: 弹出元素内的文本颜色

主要强调色

  • --primary: 用于主要按钮、链接等重要交互元素
  • --primary-foreground: 在主要强调色上的文本颜色

次要强调色

  • --secondary: 用于次要按钮、标签等较不突出的元素
  • --secondary-foreground: 次要强调色上的文本颜色

柔和色

  • --muted: 用于背景较轻的区域,如禁用状态或次要信息
  • --muted-foreground: 用于柔和背景上的文本,通常较浅

强调色

  • --accent: 用于高亮显示特定元素,如选中状态
  • --accent-foreground: 强调色上的文本颜色

破坏性操作色

  • --destructive: 用于警告或删除按钮等危险操作
  • --destructive-foreground: 破坏性操作按钮上的文本颜色

其他

  • --border: 用于元素边框
  • --input: 输入框的边框或背景
  • --ring: 元素获得焦点时显示的轮廓环颜色
  • --radius: 控制元素的圆角半径

这些颜色变量的使用确保了整个界面的一致性,并且可以轻松地创建不同的主题变体(如暗色模式)。在实际应用中,可以根据需要微调这些颜色的使用位置。