Contexto: Estou construindo algumas bibliotecas para me ajudar a construir um portal com microfrontends. Tenho uma biblioteca ui (com componentes ui), uma biblioteca commons (usa ui, tem componentes compartilhados para todos os microfrontends), uma biblioteca renderer (usa ui, é usada para renderizar dados strapi). Todas elas usam tailwind css.
Problema: Quando eu uso um componente da biblioteca commons que aceita filhos, os breakpoints do componente usado como filho não estão funcionando. Se eu usar o mesmo componente fora do componente commons, os breakpoints funcionam. Por exemplo:
<CommonsComponent>
<ComponentWithBreakpoint /> // breakpoints do not work
</CommonsComponent>
<ComponentWithBreakpoint /> // breakpoints work
Olhando as ferramentas de desenvolvimento, posso ver que a classe com o ponto de interrupção não está sendo aplicada (lg:flex-row de layout.css):
A classe flex-col também vem de um arquivo diferente (page.css)
Os componentes são:
const CommonsComponent = ({children}: {children: React.ReactNode}) => {
return (<div className="flex flex-col gap-4 w-full lg:w-[70%]">
{children}
</div>)
} //from the commons library
const ComponentWithBreakpoint = () => {
return (
<div className="flex flex-col md:flex-row md:justify-between md:items-center gap-2 w-full">
//content
</div>
)} // from one of the microfrontends
Funciona no TailwindCSS nativo porque o TailwindCSS adiciona as classes ao resultado na ordem correta.
Agora vou mostrar o que acontece se eu acidentalmente criar uma regra mais forte.
Então o problema que você descreveu ocorre porque em algum lugar do seu código, a
.flex-col
é codificado (mas corrigido após as classes geradas pelo TailwindCSS). Portanto, não importa como o TailwindCSS adicione o.lg:flex-row
, ele será substituído pelo.flex-col
que vem depois dele.Vou mostrar o que acontece sem o TailwindCSS quando um regular
flex-col
vem depois delg:flex-row
.E o que acontece se as classes forem declaradas na ordem correta:
Conclusão: A ordem em que as classes são adicionadas importa. Por padrão, o TailwindCSS adiciona suas classes geradas perfeitamente, mas como você pode ver nos meus exemplos, tanto seu próprio CSS quanto a biblioteca de UI podem re-declarar o
.flex-col
, tornando-o mais forte do que olg:flex-row
declarado anteriormente pelo TailwindCSS.Sua tarefa agora é verificar onde e por que você está redeclarando o
flex-col
. Se não for possível evitar a redeclaração, adicione este CSS ao componente:ou com a sintaxe Tailwind CSS v3:
ou com a sintaxe Tailwind CSS v4: