如何在 tailwindcss 中访问 div 的所有直接子级?

Man*_*egi 108 html css tailwind-css

我有这个html:

<div class="section">
   <div class="header">header</div>
   <div class="content">
      <div>sub contents 1</div>              
      <div>sub contents 2</div>
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)

我想访问带有类“section”的div的直接子级,这将是带有类:“header”和“content”的div。

我知道使用 css 我们可以做到:div.section > div

但如何使用tailwindcss做到这一点?

phu*_*hum 322

在 tailwind 3.1 中,您可以使用任意值来定位子元素。

<div class="[&>*]:p-4">...</div>
<div class="[&>p]:mt-0 ">...</div>
Run Code Online (Sandbox Code Playgroud)

https://tailwindcss.com/blog/tailwindcss-v3-1#任意-values-but-for-variants

正如 @kca 在评论中提到的,选择器中的空格需要用 Tailwind 类中的下划线字符替换。例如,如果您想选择所有后代,而不仅仅是直接子代,那么您可以使用以下命令:

<div class="[&_*]:p-4">...</div>
<div class="[&_p]:mt-0 ">...</div>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,用于选择后代的空格需要替换为下划线,例如“[&amp;_svg]:笔划白”而不是“[&amp; svg]:笔画白”。请参阅 https://tailwindcss.com/docs/hover-focus-and-other-states#using- Arbitration-variants (29认同)
  • 我同意,如果可能的话,不应实施此解决方案,但是,有时您无法直接访问样式 HTML(例如第 3 方脚本)。当尝试设计无法直接更改的 HTML 样式时,它可能是一个非常有用的逃生口。 (4认同)
  • @kca考虑将其添加到上面的答案中。我在这方面遇到了麻烦。答案应该包括你的观点。 (3认同)

Wil*_*der 124

目前有三种选择。

选项 1 - 插件

您可以使用这些简单的线条来tailwind.config.js为您提供child选项child-hover

plugins: [
    function ({ addVariant }) {
        addVariant('child', '& > *');
        addVariant('child-hover', '& > *:hover');
    }
],
Run Code Online (Sandbox Code Playgroud)

然后像这样使用

<div class="child:text-gray-200 child-hover:text-blue-500">...</div>
Run Code Online (Sandbox Code Playgroud)

这将为每个孩子提供灰色文本颜色,并在悬停时提供蓝色文本颜色。

有关使用插件添加变体的更多信息,请参阅此处

选项 2 - 临时选择器

自 2022 年 7 月 4 日起,Tailwind 添加了一种针对特定元素的临时方法。您现在可以使用以下内容,无需任何插件。

<div class="[&>*]:text-gray-200 [&>*:hover]:text-blue-500">...</div>
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅@phum 的答案!

选项 3 - 原生子选择器

自 2023 年 12 月 19 日起,Tailwind 添加了子选择器!您现在可以使用以下内容。

<div class="*:text-gray-200 hover:*:text-blue-500">...</div>
Run Code Online (Sandbox Code Playgroud)

请参阅此处了解发行说明。

  • 这对我来说是救星。如果您正在寻找一个更宽松的版本,其中父级影响所有子级,您可以分别使用“&amp; *”和“&amp;:hover *”。这对于组件开发很有用 (8认同)