CSS2022-06-01
返回首页

Tailwind CSS 3.0 新特性

Tailwind CSS 3.0 新特性

Tailwind CSS 3.0 带来了期待已久的 JIT 模式成为默认。

JIT 引擎

默认启用

JIT 现在是默认引擎:

// tailwind.config.js
module.exports = {
  // 不需要显式配置 JIT
  content: ['./src/**/*.{js,jsx,ts,tsx}'],
  theme: {
    extend: {},
  },
};

任意值

使用任意值,无需配置:

<div class="top-[117px] text-[#1da1f1]">
  自定义值
</div>

<div class="grid-cols-[1fr_500px_2fr]">
  自定义网格
</div>

任意变体

<!-- 任意选择器 -->
<div class="[&>*]:underline">
  所有子元素下划线
</div>

<!-- 响应式 + 任意 -->
<div class="md:[&>p]:text-lg">
  响应式子元素
</div>

新增功能

颜色系统

<!-- 更丰富的调色板 -->
<div class="bg-slate-500 text-cyan-300 border-sky-400">
  新颜色
</div>

Box Shadow 颜色

<div class="shadow-lg shadow-indigo-500/50">
  彩色阴影
</div>

Scroll Snap

<div class="snap-x snap-mandatory overflow-x-scroll">
  <div class="snap-center">Item 1</div>
  <div class="snap-center">Item 2</div>
</div>

Multi-column Layout

<div class="columns-2 gap-4">
  <p>内容自动分两列...</p>
</div>

Aspect Ratio

<!-- 原生 aspect-ratio -->
<div class="aspect-video">
  16:9 视频
</div>

<div class="aspect-square">
  1:1 正方形
</div>

Print 修饰符

<div class="print:hidden">
  打印时隐藏
</div>

<div class="print:text-black">
  打印时黑色文字
</div>

性能优化

更快的构建

# 开发模式
tailwindcss -i input.css -o output.css --watch

# 生产模式
tailwindcss -i input.css -o output.css --minify

更小的文件

JIT 只生成使用的样式:

/* 之前:几 MB */
/* 现在:几 KB */

配置改进

内联配置

<script>
tailwind.config = {
  theme: {
    extend: {
      colors: {
        brand: '#1da1f1',
      }
    }
  }
}
</script>

更好的类型支持

// tailwind.config.ts
import type { Config } from 'tailwindcss';

const config: Config = {
  content: ['./src/**/*.{js,jsx,ts,tsx}'],
  theme: {
    extend: {
      colors: {
        brand: '#1da1f1',
      },
    },
  },
};

export default config;

插件系统

创建插件

const plugin = require('tailwindcss/plugin');

module.exports = plugin(function({ addUtilities, addComponents, e, config }) {
  // 添加工具类
  addUtilities({
    '.text-shadow': {
      'text-shadow': '2px 2px 4px rgba(0,0,0,0.1)',
    },
    '.text-shadow-lg': {
      'text-shadow': '4px 4px 8px rgba(0,0,0,0.2)',
    },
  });

  // 添加组件
  addComponents({
    '.card': {
      backgroundColor: '#fff',
      borderRadius: '.5rem',
      padding: '1.5rem',
      boxShadow: '0 4px 6px -1px rgba(0, 0, 0, 0.1)',
    },
  });
});

使用插件

// tailwind.config.js
module.exports = {
  plugins: [
    require('@tailwindcss/forms'),
    require('@tailwindcss/typography'),
    require('@tailwindcss/aspect-ratio'),
    require('./my-plugin'),
  ],
};

实战技巧

悬停组合

<div class="group">
  <div class="group-hover:opacity-100 opacity-0">
    悬停显示
  </div>
</div>

深色模式

<!-- class 策略 -->
<div class="bg-white dark:bg-gray-800">
  自适应暗色模式
</div>
// tailwind.config.js
module.exports = {
  darkMode: 'class', // 或 'media'
};

动画

<div class="animate-pulse">
  脉冲动画
</div>

<div class="animate-bounce">
  弹跳动画
</div>

<div class="animate-spin">
  旋转动画
</div>

响应式设计

<!-- 移动优先 -->
<div class="text-sm md:text-base lg:text-lg xl:text-xl">
  响应式文字
</div>

<!-- 响应式容器 -->
<div class="container mx-auto px-4 md:px-6 lg:px-8">
  响应式容器
</div>

最佳实践

组织代码

<!-- 按属性分组 -->
<div class="
  /* 布局 */
  flex flex-col gap-4
  
  /* 尺寸 */
  w-full h-64
  
  /* 间距 */
  p-4 m-2
  
  /* 外观 */
  bg-white rounded-lg shadow-md
  
  /* 交互 */
  hover:shadow-lg transition-shadow
">
  内容
</div>

提取组件

// 提取常用组合
const Button = ({ children, className }) => (
  <button className={`
    px-4 py-2
    bg-blue-500 hover:bg-blue-600
    text-white font-medium
    rounded-lg
    transition-colors
    ${className}
  `}>
    {children}
  </button>
);

迁移指南

从 v2 迁移

# 更新依赖
npm install tailwindcss@latest

# 检查配置
npx tailwindcss migrate

注意事项

  • 颜色名称变化
  • 移除已废弃的工具类
  • 更新 content 配置

小结

Tailwind CSS 3.0 要点:

  • JIT 成为默认
  • 任意值支持
  • 更快的构建速度

升级后开发体验和性能都有显著提升。

TailwindCSS
返回首页