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

使用Tailwind创建radio输入框时,为何点击一个全部触发ring-2样式?

问题描述

用Tailwind创建了3个radio输入框,为每个radio设置了唯一ID,但点击其中一个选项时,所有输入框对应的label都会获得ring-2样式,请问这是什么原因?

原代码如下:

<div class="p-8">
  <form>
    <input class="peer sr-only" type="radio" value="yes" name="answer" id="answer_yes_1" />
    <label class="cursor-pointer rounded-lg border border-gray-300 px-8 py-2 text-neutral-500 focus:outline-none peer-checked:border-transparent peer-checked:shadow-lg peer-checked:ring-2 peer-checked:ring-black peer-checked:text-neutral-700" for="answer_yes_1">Classique</label>

    <input class="peer sr-only" type="radio" value="no" name="answer" id="answer_no_1" />
    <label class="cursor-pointer rounded-lg border border-gray-300 px-8 py-2 text-neutral-500 focus:outline-none peer-checked:border-transparent peer-checked:shadow-lg peer-checked:ring-2 peer-checked:ring-black peer-checked:text-neutral-700" for="answer_no_1">Immobilier professionnel</label>

    <input class="peer sr-only" type="radio" value="maybe" name="answer" id="answer_maybe_1" />
    <label class="cursor-pointer rounded-lg border border-gray-300 px-8 py-2 text-neutral-500 focus:outline-none peer-checked:border-transparent peer-checked:shadow-lg peer-checked:ring-2 peer-checked:ring-black peer-checked:text-neutral-700" for="answer_maybe_1">Programmes neufs</label>
  </form>
</div>
问题原因与解决办法

原因

Tailwind的peer类依赖通用兄弟选择器生效:peer-checked会选中所有在被勾选的peer元素之后的同级兄弟元素。当前结构中三个input是同级的,比如当第一个input被勾选时,后面的两个label也属于它的同级兄弟,因此会被错误地应用peer-checked的样式。

解决办法

将每组input和对应的label放入独立容器(如div)中,让每个label只成为对应input的直接兄弟,避免被其他input的peer-checked规则影响。

修正后的代码:

<div class="p-8">
  <form>
    <div>
      <input class="peer sr-only" type="radio" value="yes" name="answer" id="answer_yes_1" />
      <label class="cursor-pointer rounded-lg border border-gray-300 px-8 py-2 text-neutral-500 focus:outline-none peer-checked:border-transparent peer-checked:shadow-lg peer-checked:ring-2 peer-checked:ring-black peer-checked:text-neutral-700" for="answer_yes_1">Classique</label>
    </div>

    <div>
      <input class="peer sr-only" type="radio" value="no" name="answer" id="answer_no_1" />
      <label class="cursor-pointer rounded-lg border border-gray-300 px-8 py-2 text-neutral-500 focus:outline-none peer-checked:border-transparent peer-checked:shadow-lg peer-checked:ring-2 peer-checked:ring-black peer-checked:text-neutral-700" for="answer_no_1">Immobilier professionnel</label>
    </div>

    <div>
      <input class="peer sr-only" type="radio" value="maybe" name="answer" id="answer_maybe_1" />
      <label class="cursor-pointer rounded-lg border border-gray-300 px-8 py-2 text-neutral-500 focus:outline-none peer-checked:border-transparent peer-checked:shadow-lg peer-checked:ring-2 peer-checked:ring-black peer-checked:text-neutral-700" for="answer_maybe_1">Programmes neufs</label>
    </div>
  </form>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:05:15