Tailwind
下载并配置Tailwind
安装步骤
1
Step 1: 安装必要的依赖包
使用 npm 安装 Tailwind CSS 及其依赖:
npm install -D tailwindcss postcss autoprefixer
2
Step 2: 初始化 Tailwind CSS
生成 Tailwind CSS 和 PostCSS 配置文件:
npx tailwindcss init -p
3
Step 3: 配置模板路径
配置 tailwind.config.js 文件:
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ['./public/index.html', './src/**/*.{html,js,ts,jsx,tsx,vue}'],
corePlugins: {
// 小程序不需要 preflight,因为这主要是给 h5 的,如果你要同时开发小程序和 h5 端,你应该使用环境变量来控制它
preflight: false,
},
plugins: [],
};
4
Step 4: 添加 Tailwind 指令
在你的主 CSS 文件(Taro中通常是 app.less|scss|css)中添加 Tailwind 的基础指令:
@tailwind base;
@tailwind components;
@tailwind utilities;
常用配置
自定义主题(可选)
你可以在 tailwind.config.js 中自定义颜色、字体等;此处使用了 shadcn 的解决方案:
添加 css 变量:
@tailwind base;
@tailwind components;
@tailwind utilities;
.light {
--background: 0 0% 100%;
--foreground: 240 10% 3.9%;
--card: 0 0% 100%;
--card-foreground: 240 10% 3.9%;
--popover: 0 0% 100%;
--popover-foreground: 240 10% 3.9%;
--primary: 142.1 76.2% 36.3%;
--primary-foreground: 355.7 100% 97.3%;
--secondary: 240 4.8% 95.9%;
--secondary-foreground: 240 5.9% 10%;
--muted: 240 4.8% 95.9%;
--muted-foreground: 240 3.8% 46.1%;
--accent: 240 4.8% 95.9%;
--accent-foreground: 240 5.9% 10%;
--destructive: 0 84.2% 60.2%;
--destructive-foreground: 0 0% 98%;
--border: 240 5.9% 90%;
--input: 240 5.9% 90%;
--ring: 142.1 76.2% 36.3%;
--radius: 0.3rem;
--chart-1: 12 76% 61%;
--chart-2: 173 58% 39%;
--chart-3: 197 37% 24%;
--chart-4: 43 74% 66%;
--chart-5: 27 87% 67%;
}
.dark {
--background: 20 14.3% 4.1%;
--foreground: 0 0% 95%;
--card: 24 9.8% 10%;
--card-foreground: 0 0% 95%;
--popover: 0 0% 9%;
--popover-foreground: 0 0% 95%;
--primary: 142.1 70.6% 45.3%;
--primary-foreground: 144.9 80.4% 10%;
--secondary: 240 3.7% 15.9%;
--secondary-foreground: 0 0% 98%;
--muted: 0 0% 15%;
--muted-foreground: 240 5% 64.9%;
--accent: 12 6.5% 15.1%;
--accent-foreground: 0 0% 98%;
--destructive: 0 62.8% 30.6%;
--destructive-foreground: 0 85.7% 97.3%;
--border: 240 3.7% 15.9%;
--input: 240 3.7% 15.9%;
--ring: 142.4 71.8% 29.2%;
--chart-1: 220 70% 50%;
--chart-2: 160 60% 45%;
--chart-3: 30 80% 55%;
--chart-4: 280 65% 60%;
--chart-5: 340 75% 55%;
}
page {
.light();
color: hsl(var(--foreground));
background: hsl(var(--background));
}
/** @type {import('tailwindcss').Config} */
module.exports = {
theme: {
extend: {
transitionTimingFunction: {
'spring-bounce': 'cubic-bezier(0.175, 0.885, 0.32, 1.275)',
},
borderRadius: {
lg: 'var(--radius)',
md: 'calc(var(--radius) - 2px)',
sm: 'calc(var(--radius) - 4px)',
},
colors: {
background: 'hsl(var(--background))',
foreground: 'hsl(var(--foreground))',
card: {
DEFAULT: 'hsl(var(--card))',
foreground: 'hsl(var(--card-foreground))',
},
popover: {
DEFAULT: 'hsl(var(--popover))',
foreground: 'hsl(var(--popover-foreground))',
},
primary: {
DEFAULT: 'hsl(var(--primary))',
foreground: 'hsl(var(--primary-foreground))',
},
secondary: {
DEFAULT: 'hsl(var(--secondary))',
foreground: 'hsl(var(--secondary-foreground))',
},
muted: {
DEFAULT: 'hsl(var(--muted))',
foreground: 'hsl(var(--muted-foreground))',
},
accent: {
DEFAULT: 'hsl(var(--accent))',
foreground: 'hsl(var(--accent-foreground))',
},
destructive: {
DEFAULT: 'hsl(var(--destructive))',
foreground: 'hsl(var(--destructive-foreground))',
},
border: 'hsl(var(--border))',
input: 'hsl(var(--input))',
ring: 'hsl(var(--ring))',
chart: {
1: 'hsl(var(--chart-1))',
2: 'hsl(var(--chart-2))',
3: 'hsl(var(--chart-3))',
4: 'hsl(var(--chart-4))',
5: 'hsl(var(--chart-5))',
},
filter: {
'blur-20': 'blur(20px)',
'blur-25': 'blur(25px)',
},
},
},
},
}
常用插件
一些推荐的 Tailwind 插件:
# 图标插件,本网站的所有示例代码的图标都是使用此插件
npm install -D @iconify/tailwind
# 动画插件
npm install -D tailwindcss-animate
在 tailwind.config.js 中启用插件:
const { addDynamicIconSelectors } = require('@iconify/tailwind');
/** @type {import('tailwindcss').Config} */
module.exports = {
plugins: [
addDynamicIconSelectors(),
require('tailwindcss-animate'),
tailwindcssPlugin(function ({ addUtilities, addVariant }) {
// 添加自定义的实用工具类
addVariant('disabled', `&[disabled]`);
addUtilities({
'.flex-col-center': {
display: 'flex',
'align-items': 'center',
'justify-content': 'center',
'flex-direction': 'column',
},
'.flex-center': {
display: 'flex',
'align-items': 'center',
'justify-content': 'center',
'flex-direction': 'row',
},
});
}),
],
}