Leo-Henrique / loopstudios-landing-page

Landing page utilizando React e styled-components.

Home Page:https://leo-henrique.github.io/loopstudios-landing-page/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Landing page com React e styled-components | Desafio do Frontend Mentor

Visualização da página inicial do projeto

🔎 Visão geral

Eu considero landing pages um tipo de website mais focado em CSS, por isso decidi desenvolver esse projeto com o intuito de utilizar styled-components!

🔗 Acesse o projeto

💻 Principais tecnologias / recursos

💡 Aprendizados e principais recursos

Tematização

O tema é uns dos principais destaques deste projeto. Através dele pude armazenar diversas configurações da UI para manter a consistência da interface.

Como eu o utilizava com muita frequência, decidi executar a função retornada com styled da maneira convencional para desestruturar o tema das props e poupar escrita:

export const Hamburger = styled.button(({ theme }) => (css`
    z-index: ${theme.zIndex.headerContent};
    ${theme.mixins.transition(["opacity"])};
    ${theme.media.desktop} {
        &:hover {
            opacity: 0.7;
        }
    }
    ${theme.breakpoints.lg} {
        display: block;
    }
    // ...
`));

Mixins

Os mixins é um conceito muito popular no SASS e algo de extrema eficácia para armazenar estilos reutilizáveis.

Com a função css, os mixins podem ser criados e utilizados de modo muito parecido com o SASS, inclusive, utilizando argumentos e passando o tipo de dado que for mais convincente. Como eles ficam em um arquivo separado, eu importei eles para o tema para facilitar o seu uso.

export const transition = (properties, type = "button") => (css`
    transition-property: ${properties.join(", ")};
    transition-duration: ${theme.transitions[type].duration}ms;
    transition-timing-function: ${theme.transitions[type].timingFunction};
`);
export const Hamburger = styled.button(({ theme }) => (css`
    ${theme.mixins.transition(["opacity"])};
    // ...
`));

Props

A possibilidade de utilizar as props dentro dos estilos são, pelo menos pra mim, o grande potencial do styled-components.

O trecho de código a seguir se refere a navegação do cabeçalho. Com as props, eu pude aplicar estilizações diferentes dependendo do local onde a navegação se encontrava (cabeçalho ou rodapé) e animações com base em alguns estados (para quando o menu mobile é aberto ou fechado).

const Wrapper = styled.nav(({ 
    theme, 
    local, 
    headerHeight, 
    nav, 
    navTransition 
}) => (css`
    ${local === "header" ? (css`
        ${theme.breakpoints.lg} {
            display: ${nav ? "block" : "none"};
            opacity: ${navTransition ? 1 : 0};
            transform: ${navTransition ? "none" : "translate3D(100px, 0, 0)"};
    `) : (css`
        // ... (footer)
    `)}

🔗 Recursos úteis

About

Landing page utilizando React e styled-components.

https://leo-henrique.github.io/loopstudios-landing-page/


Languages

Language:JavaScript 92.0%Language:HTML 8.0%