Tailwind CSS:有没有办法定位下一个兄弟姐妹?

Posted

技术标签:

【中文标题】Tailwind CSS:有没有办法定位下一个兄弟姐妹?【英文标题】:Tailwind CSS : Is there a way to target next sibling? 【发布时间】:2020-11-29 17:30:00 【问题描述】:

我有一个带有如下标签的无线电输入。输入被隐藏,标签被用来制作一个视觉上吸引人的圆圈,用户可以点击它。

<input id="choice-yes" type="radio" class="opacity-0 w-0 fixed"/>
<label for="choice-yes" class="transition  duration-500 bg-blue-300 hover:bg-blue-500 w-20 h-20 rounded-full mr-5 flex items-center align-middle justify-center">Yes</label>

当用户点击标签输入时被检查。我正试图弄清楚如何定位它,所以我可以给标签一个不同的风格。

这可以在纯 css 中使用下一个兄弟选择器来实现。

input[type="radio"]:checked + label 
  background-color: #bfb !important;
  border-color: #4c4 !important;

tailwind.css 中是否有类似的东西我可以使用?

【问题讨论】:

【参考方案1】:

目前 Tailwind 中没有内置任何内容。最接近的特征是Pseudo-Class Variants,其中有一个“已检查”前缀。但这仅适用于收音机本身。为了定位兄弟姐妹,您需要编写自己的complex variant,然后您可以执行类似的操作

<input id="choice-yes" type="radio"/>
<label for="choice-yes" class="bg-gray-100 sibling-checked:bg-blue-500">Yes</label>

【讨论】:

我想知道我们是否可以有一个兄弟变种:sibling:checked:bg-blue-500【参考方案2】:

这是我为此目的写的complex variant(用tailwindcss测试2.0.1

// tailwind.config.js

const plugin = require("tailwindcss/plugin");

const focusedSiblingPlugin = plugin(function ( addVariant, e ) 
  addVariant("focused-sibling", ( container ) => 
    container.walkRules((rule) => 
      rule.selector = `:focus + .focused-sibling\\:$rule.selector.slice(1)`;
    );
  );
);

module.exports = 
  // ...
  plugins: [focusedSiblingPlugin],
  variants: 
    extend: 
      backgroundColor: ["focused-sibling"],
    ,
  ,
;

【讨论】:

也适用于 Tailwind 1.9!感谢您的解决方案!【参考方案3】:

所以,我一直在想同样的问题,自从我在 Tailwind 首次亮相以来就创建了自己的变体,我想我可以为你创建一个快速的变体。

我对先前答案的问题是该课程专注于兄弟姐妹。该类应附加到第一项并按原样使用:

<input id="choice-yes" type="radio" class="nextOnChecked:bg-blue-500 nextOnChecked:border-blue-800"/>

variant 的代码应该类似于:

const plugin = require("tailwindcss/plugin");

const nextOnChecked = plugin(function ( addVariant, e ) 
  addVariant('nextOnChecked', ( modifySelectors, separator ) => 
    modifySelectors(( className ) => 
      return `.$e(`nextOnChecked$separator$className`):checked + *`;
    )
  );
);
module.exports = 
  variants: 
    extend:
      border: ['nextOnChecked'],
      backgroundColor: ['nextOnChecked'],
    ,
  ,
  plugins: [
    nextOnChecked
  ],
;

这部分.$e('nextOnChecked$separator$className'):checked + *将在本示例的上下文中使用,如下所示:

.nextOnChecked\:bg-blue-500:checked + *
   background-color: ...;

这就是我构建大部分变体的方式,从改变状态的 DOM 到正在重新设置样式的 DOM。

【讨论】:

【参考方案4】:

您可以在这种情况下使用 group-hover。

https://tailwindcss.com/docs/hover-focus-and-other-states

【讨论】:

不鼓励仅链接答案,因为链接可能会中断,使答案变得毫无意义。请总结链接信息以帮助未来的读者。仅链接的答案可能会被删除。【参考方案5】:

对于那些希望实现这一点的人来说,因为引入了即时模式 (Tailwind CSS v2.1+) sibling selector variant 是可用的。

【讨论】:

以上是关于Tailwind CSS:有没有办法定位下一个兄弟姐妹?的主要内容,如果未能解决你的问题,请参考以下文章

定位 Tailwind CSS 文件

有没有办法避免使用 Tailwind 清除特定库?

仅获取特定 Tailwind CSS 类的 CSS 值

Tailwind css - 使用 className 自定义间距值作为 tailwind 配置的变量

导轨 |如何使用 Tailwind 定位无效输入字段

如何在没有 Webpacker 的情况下将 Tailwind CSS 添加到 Rails?