Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

193
Visualizações
Invierta una transición en el cambio de accesorios con componentes con estilo

Estoy animando dos elementos en un cambio de accesorios: un contenedor div se desliza hacia adentro/afuera con max-height , y el contenido del div se desvanece hacia adentro/afuera con opacity .

El problema es que quiero que el contenedor se anime después del contenido de la animación de "salida", pero quiero que aparezca antes del contenido de la animación de "entrada". Actualmente, los elementos siempre van en el mismo orden: primero la transición del contenido, luego el contenedor. Esto significa que el contenido aparece antes de que el contenedor se haya deslizado en la animación "dentro".

Intenté usar el atributo reverse y los keyframes de los componentes con estilo, pero, sinceramente, soy tan malo con las animaciones CSS que no puedo comenzar a entender lo que necesito cambiar.

Aquí está el código actual:

Componente.tsx

 export default function Component() { const [showBanner, setShowBanner] = useState(true); const handleAccept = () => { setShowBanner(false); }; const handleReject = () => { setShowBanner(false); }; return ( <StyledComponent $showBanner={showBanner}> <StyledText> // some text </StyledText> <StyledButtonsContainer> // some buttons </StyledButtonsContainer> </StyledComponent> ); }

Componente.estilos.tsx

 export const StyledComponent = styled.div<{ $showBanner: boolean }>` &&& { position: absolute; z-index: ${zIndex("overlay")}; display: flex; flex-direction: column; max-height: ${(props) => (props.$showBanner ? "100%" : "0")}; height: 100%; width: 100%; background: ${(props) => props.theme.secondary}; color: ${(props) => props.theme.white}; transition: max-height 0.5s 0.5s ease; @media ${device.tablet} { border-radius: 0 0 2px 20px; } * { // targeting everything all of the contents opacity: ${(props) => (props.$showBanner ? "100%" : "0%")}; transition: opacity 0.5s ease; } } `;
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Ordené esto controlando la propiedad transition-delay con el $showBanner . Sin embargo, lo hice a través de la taquigrafía de transition :

 export const StyledCookieBanner = styled.div<{ $showBanner: boolean }>` &&& { position: absolute; z-index: ${zIndex("overlay")}; display: flex; flex-direction: column; max-height: ${(props) => (props.$showBanner ? "100%" : "0")}; height: 100%; width: 100%; background: ${(props) => props.theme.secondary}; color: ${(props) => props.theme.white}; transition: max-height 0.5s ${(props) => !props.$showBanner && "0.5s"}; // here @media ${device.tablet} { border-radius: 0 0 2px 20px; } * { opacity: ${(props) => (props.$showBanner ? "100%" : "0%")}; transition: opacity 0.5s ${(props) => props.$showBanner && "0.5s"}; // here } } `;

Esto invierte los retrasos de las dos transiciones, invirtiendo efectivamente la transición.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda