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

Tailwind CSS中:first-child与任意变体的工作原理疑问

理解Tailwind中[&:first-child]:text-red-500的真实逻辑

你之前对这个类的理解完全搞反了&的指向,核心要搞清楚Tailwind自定义选择器里&的含义:&代表的是拥有这个类的元素本身,而不是它的子元素。

拆解[&:first-child]:text-red-500的逻辑

这个类的意思是:当拥有该类的元素,是它父元素的第一个子元素时,才会应用text-red-500(文本红色)的样式。

对应到你的示例代码:

  • 外层div加了[&:first-child]:text-red-500,但这个div本身没有文本内容,它的子元素是两个ul。哪怕这个div是它父元素的第一个子元素,你也看不到红色效果,因为样式是作用在div本身的。
  • 第二个ul加了[&:first-child]:text-blue-500,但这个ul是div的第二个子元素,所以它不会触发这个样式;如果把这个ul挪到div的第一个位置,它就会变成蓝色文本。

编译后的CSS对照

Tailwind会把这个自定义类编译成常规CSS,比如[&:first-child]:text-red-500对应的CSS是:

.\[\&\:first-child\]\:text-red-500:first-child {
  color: rgb(239 68 68);
}

一眼就能看出来,样式是给拥有该类且是父元素第一个子元素的元素设置的。

如果你想实现“当前元素的第一个子元素变红”

如果你的需求是让加类的元素的第一个子元素文本变红,应该这样写:[&>*:first-child]:text-red-500。

它的逻辑是:&代表当前元素,>*代表当前元素的所有直接子元素,:first-child筛选出第一个子元素,最终编译后的CSS是:

.\[\&\>\*\:first-child\]\:text-red-500 > *:first-child {
  color: rgb(239 68 68);
}

这样你的外层div加这个类后,第一个ul的文本就会变成红色了。

内容的提问来源于stack exchange,提问作者Ben

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 12:48:26