¿Cómo acceder a todos los hijos directos de un div en tailwindcss?

5 minutos de lectura

tengo este html:

<div class="section">
   <div class="header">header</div>
   <div class="content">
      <div>sub contents 1</div>              
      <div>sub contents 2</div>
   </div>
</div>

Quiero acceder a los hijos directos de div con clase “sección”, que serían divs con clase: “encabezado” y “contenido”.

Sé que con css podemos hacer: div.section > div

Pero cómo hacer esto usando viento de cola?

En Tailwind 3.1, puede usar valores arbitrarios para apuntar a elementos secundarios.

<div class="[&>*]:p-4">...</div>
<div class="[&>p]:mt-0 ">...</div>

https://tailwindcss.com/blog/tailwindcss-v3-1#valores-arbitrarios-pero-para-variantes

  • Este debe ser aceptado. 🙋‍♂️

    – Sr. spShuvo

    28 de julio de 2022 a las 4:12

  • Yo diría que esto no debería usarse en absoluto. ¿Por qué? Porque si este es, por ejemplo, un componente como niños, está cambiando los estilos del componente desde un lugar diferente que tiene sus propios estilos. Crea profundidad técnica, es difícil de encontrar y supongo que esto no es una buena práctica en absoluto.

    – Ernedar

    3 de agosto de 2022 a las 8:17

  • Estoy de acuerdo en que, si es posible, esta solución no debería implementarse; sin embargo, hay momentos en los que no puede acceder al estilo HTML directamente (por ejemplo, secuencias de comandos de terceros). Puede ser una vía de escape bastante útil cuando se trata de diseñar HTML que no se puede cambiar directamente.

    – phum

    3 de agosto de 2022 a las 9:52

  • Tenga en cuenta que los espacios para seleccionar descendientes deben reemplazarse por guiones bajos, por ejemplo '[&_svg]:stroke-white' en lugar de '[& svg]:stroke-white'. Ver tailwindcss.com/docs/…

    – kca

    5 sep 2022 a las 10:32


  • @kca Considere agregar esto a la respuesta anterior. Estaba teniendo problemas con exactamente esto. La respuesta debe incluir su punto.

    – decir y codificar

    7 oct 2022 a las 17:54

Avatar de usuario de Willem Mulder
willem mulder

Por defecto no puedes. Sin embargo, uso estas líneas simples en tailwind.config.js para darme child y child-hover opciones

plugins: [
    function ({ addVariant }) {
        addVariant('child', '& > *');
        addVariant('child-hover', '& > *:hover');
    }
],

Entonces usa así

<div class="child:text-gray-200 child-hover:text-blue-500">...</div>

Lo que le dará a cada niño un color de texto gris y uno azul al pasar el mouse.

Ver aquí para obtener más información sobre cómo agregar variantes usando un complemento

Actualizar 4 de julio de 2022: Tailwind agregó un enfoque ad-hoc para apuntar a elementos específicos. Ahora puedes usar [&>*]:text-gray-200 o [&>*:hover]:text-blue-500 para imitar el comportamiento anterior. ¡Vea la respuesta de @phum para más información!

  • Esto fue un salvavidas para mí. Si está buscando una versión aún más permisiva en la que el padre afecta a todos los niños, puede utilizar & * y &:hover * respectivamente. Esto resultó útil para el desarrollo de componentes.

    –Josh Frankel

    8 de abril de 2022 a las 16:14


  • Muy bueno, gracias por la adición!

    – Willem Mulder

    13/04/2022 a las 16:00

  • ¿Cómo lograr lo mismo en el navegador usando CDN? traté de hacer tailwind.config = { plugins: () => {...}} pero eso no está funcionando.

    – Srikanth Sharma

    24 de abril de 2022 a las 7:42

  • @SrikanthSharma Interesante; No sabía que tenían una versión CDN. Mirando la documentación, parece que realmente admiten complementos en la versión CDN (lo que sería un milagro en sí mismo). ¿Quizás no definió los complementos como una matriz?

    – Willem Mulder

    25 de abril de 2022 a las 8:19

  • :child solo la variante debería ser suficiente, pero child:hover:... se convierte :hover > * y viceversa, lo cual es extraño ya que los documentos de viento de cola dicen que las variantes se aplican en el orden en que se dieron… así que child-hover se necesita

    – Sodj

    11 mayo 2022 a las 16:06

Si desea acceder a los elementos secundarios directos de div con selector, utilice @layer directiva. vea abajo:

@tailwind base;
@tailwind components;
@tailwind utilities;

@layer base {
  div.section > div {
    @apply text-xl;
  }
}

https://tailwindcss.com/docs/agregando-base-estilos

  • nose pero esto no me funciona div.field_with_errors > label { @apply text-red-900; }

    – buncis

    27 de agosto de 2022 a las 4:44

  • tenga en cuenta que la capa base solo debe contener el estilo predeterminado de las aplicaciones de las etiquetas de uso común y no está diseñada para un estilo de caso de uso específico

    – Gabriel Peterson

    18 de noviembre de 2022 a las 12:23

Avatar de usuario de Pascal-1609
Pascual-1609

Esto no es posible actualmente y probablemente no se implementará pronto.

En su lugar, recomiendo usar este complemento: https://github.com/benface/tailwindcss-niños. Siga el LÉAME para obtener más instrucciones.

Uso:

Una vez que haya instalado el complemento y lo haya agregado a su tailwind.config.jspuede acceder a los niños directos agregando children:{your_style} a la clase de padres. Si, por ejemplo, desea agregar p-4 a header y contentsu código se vería así:

<div class="section children:p-4">
   <div class="header">header</div>
   <div class="content">
      <div>sub contents 1</div>              
      <div>sub contents 2</div>
   </div>
</div>

avatar de usuario de scil
scil

Esta es la versión Tailwind v1 y v2 de Willem Mulder.

el único cambio es el nombre de la variante children en lugar de child

 plugin(function({ addVariant, e }) {

  addVariant('children', ({ modifySelectors, separator }) => {
    modifySelectors(({ className }) => {
      const newClass = e(`children${separator}${className}`);
      return [
        `.${newClass} > *`,
        // `.${newClass}:hover `,
      ].join(",");
    });
  });

  addVariant('children-first', ({ modifySelectors, separator }) => {
    modifySelectors(({ className }) => {
      const newClass = e(`children-first${separator}${className}`);
      return [
        `.${newClass} > *:first-child`,
      ].join(",");
    });
  });

}),

agregar variantes para el relleno

variants: {
    padding: ['responsive', 'children', 'children-hover', 'children-first', ],
   
  },

¿Ha sido útil esta solución?