我想在选中复选框时将添加边框添加到复选框容器中。
目前,我有这个:
<label
htmlFor="choose-me"
className=
'flex w-fit items-center justify-evely p-3 border-2 border-grey-4 text-grey-8
peer-checked:bg-light-indigo peer-checked:text-medium-indigo peer-checked:border-medium-indigo'>
<input type="checkbox" id="choose-me" className="peer mr-3 " />
Check me
</label>
我想要的东西如下:
但是,当我将输入放入标签内部时,我无法更改标签样式。
3条答案
按热度按时间qojgxg4l1#
一个仅支持CSS的解决方案是使用
:has
伪选择器(注意:在Firefox中尚不支持)。只有当标签包含了一个已选中的复选框时,才会应用这些类。您可以在这里测试:https://play.tailwindcss.com/zidP4zm2Pq
支持
:has
的浏览器列表:www.example.comhttps://developer.mozilla.org/en-US/docs/Web/CSS/:has#browser_compatibilitydzjeubhm2#
使用useState处理活动状态:
在JSX中:
zbwhf8kr3#
首先,记住tailwind中的
peer
功能并不针对父元素(这是您目前拥有的),您只能针对彼此相邻的元素。此外,由于CSS
:peer
组合子的工作方式,您只能将 * previous * 组件作为目标,这意味着复选框必须出现在选中复选框时要影响的对等体的状态之前。下面是一个使用纯tailwind/css的示例,假设您不想在react组件中处理状态,正如@Vikesir的评论所述(尽管这也是我的第一个想法,而且是个好主意)。
你会注意到我在一个空的div中做了手脚,用它来模拟背景和边框的变化,我还把标签文本放在一个span中,以确保我可以改变它的z轴,这样复选框和文本都可以在处理状态变化的div上方看到。
如果您不希望代码中出现空的
div
,下面的版本使用了一个伪元素,该伪元素构建自保存标签文本的span: