You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js中Tailwind CSS的&:hover特性失效且报错,求解决方案

解决Next.js中Tailwind CSS在CSS Modules里&:hover语法错误的问题

错误原因

你遇到的错误是因为CSS Modules要求选择器必须是“纯”的——即每个选择器必须直接关联到本地类或ID。用逗号合并&:hover, &.active的嵌套写法,不符合CSS Modules的纯选择器规则,因此触发语法错误。

解决方案

方案1:拆分嵌套选择器

把合并的选择器拆分为单独的嵌套规则,每个规则对应一个状态:

.iconWrapper {
  @apply cursor-pointer flex justify-center items-center h-10 w-10 rounded-md;

  &:hover {
    background-color: theme("colors.text2");
  }
  &.active {
    background-color: theme("colors.text2");
  }
  .icon {
    color: theme("colors.text1");
    font-size: 20px;
  }
}

这种写法完全符合CSS Modules的规则,同时保留了Tailwind的theme()函数和嵌套语法。

方案2:改用Tailwind工具类风格(更推荐)

直接用Tailwind的内置状态变体和工具类,减少嵌套写法,更贴合Tailwind的设计思路:

.iconWrapper {
  @apply cursor-pointer flex justify-center items-center h-10 w-10 rounded-md hover:bg-text2;
}

.iconWrapper.active {
  @apply bg-text2;
}

.iconWrapper .icon {
  @apply text-text1 text-2xl;
}

注意:要确保text2和text1已经在你的tailwindcss.config.js的colors配置中定义,否则hover:bg-text2这类工具类不会生效。

组件中正确应用active状态

在index.js组件里,需要把active类和iconWrapper类结合使用(CSS Modules会自动哈希化类名,避免冲突):

import styles from './index.module.css';

const Menu = ({ isActive }) => (
  <div className={`${styles.iconWrapper} ${isActive ? styles.active : ''}`}>
    <span className={styles.icon}>你的图标</span>
  </div>
);

export default Menu;

内容的提问来源于stack exchange,提问作者Deepak Anto J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 01:18:29