peer选择器必须配合peer类和紧邻的后兄弟元素使用,控制源(如checkbox)加peer,目标元素用peer-checked等变体;不可用于前兄弟、父子或隔级元素,也不支持嵌套穿透。

peer选择器必须配合peer类和兄弟元素使用
Tailwind的peer不是独立生效的样式,它本身不产生任何CSS规则,只是给元素打上一个“可被邻近选择器定位”的标记。真正起作用的是peer-checked、peer-hover这类变体,它们只对**紧跟在peer元素之后的同级元素**生效。
常见错误是把 这是最常用场景:点击复选框时,让旁边的说明文字变色或高亮。关键在于结构顺序和类名组合。 注意三点: 单选按钮组常用于选项卡或设置项,用 结构上,每个 容易忽略的点: Tailwind没有 例如,你想让鼠标悬停在卡片整体时才显示删除按钮,该用 而如果你有一个开关 真正复杂的地方在于嵌套交互——比如一个peer加在目标元素上(比如想让按钮响应复选框状态,却给按钮加peer),结果样式完全不触发。正确做法是:控制源(如)加peer,被影响的目标(如或peer-checked:xxx等修饰。
peer必须出现在目标元素的**前一个兄弟节点**,不能隔标签,也不能是父/子关系peer-checked、peer-hover、peer-focus、peer-disabled、peer-required等,对应原生表单状态group + group-hover替代,但逻辑不同复选框联动文字颜色与背景的典型写法
<div class="flex items-center gap-2">
<input type="checkbox" class="peer hidden" id="agree"><label for="agree" class="peer-checked:text-blue-600 peer-checked:bg-blue-50 px-3 py-1 rounded text-sm">
我已阅读并同意条款
</label>
</div>
hidden必须加在上,否则默认复选框会显示,且peer类对可见表单控件更稳定peer-checked:前缀只能写在上,不能写在自己身上里还包了其他元素(比如图标),要确保peer-checked:类作用在最外层容器,否则内部子元素不会继承状态样式radio组中高亮当前选项卡片
peer可以避免JS,纯CSS实现“选中即高亮”效果。都要带peer,且每个对应的卡片必须紧跟其后:<div class="space-y-2">
<input type="radio" name="plan" value="basic" class="peer hidden" id="basic"><label for="basic" class="peer-checked:border-blue-500 peer-checked:ring-2 peer-checked:ring-blue-200 border p-4 rounded-lg cursor-pointer">
基础版
</label>
<input type="radio" name="plan" value="pro" class="peer hidden" id="pro"><label for="pro" class="peer-checked:border-blue-500 peer-checked:ring-2 peer-checked:ring-blue-200 border p-4 rounded-lg cursor-pointer">
专业版
</label>
</div>
radio必须有相同的name属性,否则无法互斥,peer-checked也不会正确切换peer-*:xxx去影响前面的兄弟(比如想让标题随radio变化,但标题在之前),这时得换用group或JS加cursor-pointer并确保足够尺寸,否则用户点不中为什么
peer-group不存在?别混淆peer和group
peer-group这个概念,这是初学者常搜错的关键词。两者解决的问题不同:group用于“父容器 hover 时影响子元素”,peer用于“前一个兄弟元素状态变化时影响后一个兄弟元素”。group:<div class="group p-4 border rounded">
<p>内容文本</p>
<button class="opacity-0 group-hover:opacity-100 transition-opacity">删除</button>
</div>
和它右边的描述块,才轮到peer。混用会导致样式完全不生效,因为它们依赖的DOM关系完全不同。peer-checked元素内部又包含需要响应hover的按钮,这时得叠加group,但peer本身不支持嵌套穿透。这种时候,CSS变量或轻量JS反而更可控。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











