变体 
变体 允许你对现有规则应用一些变化,就像 Tailwind CSS 中的 hover: 变体一样。
示例 
ts
variants: [
  // hover:
  (matcher) => {
    if (!matcher.startsWith('hover:'))
      return matcher
    return {
      // 切掉 `hover:` 前缀并传递给下一个变体和规则。
      matcher: matcher.slice(6),
      selector: s => `${s}:hover`,
    }
  },
],
rules: [
  [/^m-(\d)$/, ([, d]) => ({ margin: `${d / 4}rem` })],
]- matcher控制变体何时启用。如果返回值是一个字符串,它将被用作匹配规则的选择器。
- selector提供了自定义生成的 CSS 选择器的功能。
内部原理 
让我们来看看匹配 hover:m-2 时发生了什么:
- hover:m-2是从用户的用法中提取出来的
- hover:m-2被发送到所有变体进行匹配
- hover:m-2被我们的变体匹配,并返回- m-2
- 结果 m-2将用于下一轮的变体匹配
- 如果没有其他变体匹配成功,那么 m-2将继续匹配规则
- 我们的第一个规则被匹配,并生成了 .m-2 { margin: 0.5rem; }
- 最后,我们将变体的转换应用到生成的 CSS 上。在这种情况下,我们将 :hover添加到selector钩子前
因此,将生成以下 CSS:
css
.hover\:m-2:hover { margin: 0.5rem; }有了这个,我们可以让 m-2 只在用户悬停在元素上时应用。
Going further 
变体系统非常强大,无法在本指南中完全覆盖。你可以查看 默认预设的实现 以了解更多高级用法。