![Layout do aplicativo móvel do LinkedIn](https://i0.wp.com/cms-assets.tutsplus.com/cdn-cgi/image/width%3D850/uploads/users/780/posts/107947/image-upload/linkedin3.jpg?ssl=1)
![Layout do aplicativo móvel do LinkedIn](https://i0.wp.com/cms-assets.tutsplus.com/cdn-cgi/image/width%3D630/uploads/users/780/posts/107947/image-upload/linkedin3.jpg?ssl=1)
![Layout do aplicativo móvel do LinkedIn](https://i0.wp.com/cms-assets.tutsplus.com/cdn-cgi/image/width%3D360/uploads/users/780/posts/107947/image-upload/linkedin3.jpg?ssl=1)
Barras de navegação fixas/fixas são o padrão de layout principal em aplicativos móveis.
![Layout do aplicativo móvel da Udemy](https://i0.wp.com/cms-assets.tutsplus.com/cdn-cgi/image/width%3D850/uploads/users/780/posts/107947/image-upload/Udemy.jpg?ssl=1)
![Layout do aplicativo móvel da Udemy](https://i0.wp.com/cms-assets.tutsplus.com/cdn-cgi/image/width%3D630/uploads/users/780/posts/107947/image-upload/Udemy.jpg?ssl=1)
![Layout do aplicativo móvel da Udemy](https://i0.wp.com/cms-assets.tutsplus.com/cdn-cgi/image/width%3D360/uploads/users/780/posts/107947/image-upload/Udemy.jpg?ssl=1)
Mas nada nos impede de seguir esse padrão de estruturação de barras de navegação em sites na visualização mobile, seja para navegação primária ou secundária.
No passado, construímos algo semelhante à barra de navegação do aplicativo do LinkedIn – um cabeçalho de página que desaparece ao rolar a página para baixo e é revelado ao rolar para cima.
Vamos confiar nos princípios básicos deste tutorial e criar uma barra de navegação inferior semelhante a um aplicativo, cuja visibilidade dependerá da direção de rolagem, assim como o aplicativo LinkedIn.
O que estamos construindo
Uma imagem (demonstração) vale mais que mil palavras, então dê uma olhada no que vamos criar (role para testar o comportamento):
Para uma melhor experiência, certifique-se de examiná-lo em um dispositivo móvel. Em um cenário real, haverá dois menus de navegação diferentes: um para desktop que provavelmente ficará no topo da página e outro para celular como temos aqui.
1. Comece com a marcação da página
A marcação consistirá no nav
elemento e o main
elemento onde colocaremos o conteúdo da página. Dentro de nav
, colocaremos nosso menu que incluirá cinco itens. Cada um deles terá um SVG retirado da popular biblioteca iconmonstr. Para indicar a página ativa, adicionaremos ao item associado o active
aula. Por padrão, o primeiro item terá esta classe. Por fim, adicionaremos um título que ficará visível apenas em leitores de tela.
Aqui está a marcação da página:
1 |
|
2 |
|
3 |
|
4 |
|
5 |
href="">
|
6 |
|
7 |
|
8 |
|
9 |
Home |
10 |
|
11 |
|
12 |
|
13 |
href="">
|
14 |
|
15 |
|
16 |
|
17 |
Favorites |
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
2. Adicione o CSS Sticky Nav
Vamos agora nos concentrar apenas nos estilos principais – você sempre pode ver todos clicando no botão CSS guia do projeto de demonstração.
- O
nav
será um elemento de posição fixa localizado na parte inferior da página. - Todos os itens serão itens flexíveis e ocuparão a mesma quantidade de espaço no menu. Para garantir isso, manipularemos o tamanho da fonte dos links dependendo do tamanho da tela.
- Para distinguir o item ativo, mudaremos sua cor para laranja e daremos a ele uma borda superior com a mesma cor. Além disso, adicionaremos o mesmo estilo aos itens suspensos.
![Nossa barra de navegação inferior adesiva semelhante a um aplicativo](https://i0.wp.com/cms-assets.tutsplus.com/cdn-cgi/image/width%3D850/uploads/users/780/posts/107947/image-upload/md.jpg?ssl=1)
![Nossa barra de navegação inferior adesiva semelhante a um aplicativo](https://i0.wp.com/cms-assets.tutsplus.com/cdn-cgi/image/width%3D630/uploads/users/780/posts/107947/image-upload/md.jpg?ssl=1)
![Nossa barra de navegação inferior adesiva semelhante a um aplicativo](https://i0.wp.com/cms-assets.tutsplus.com/cdn-cgi/image/width%3D360/uploads/users/780/posts/107947/image-upload/md.jpg?ssl=1)
Aqui estão os estilos relacionados:
1 |
.nav-mobile { |
2 |
position: fixed; |
3 |
bottom: 0; |
4 |
left: 0; |
5 |
width: 100%; |
6 |
background: var(--white); |
7 |
transition: transform 0.3s; |
8 |
z-index: 1; |
9 |
box-shadow: 0 -3px 6px 0 rgba(0, 0, 0, 0.05); |
10 |
}
|
11 |
|
12 |
.nav-mobile ul { |
13 |
display: flex; |
14 |
list-style: none; |
15 |
padding: 0; |
16 |
margin: 0; |
17 |
}
|
18 |
|
19 |
.nav-mobile li { |
20 |
flex: 1; |
21 |
}
|
22 |
|
23 |
.nav-mobile a { |
24 |
display: flex; |
25 |
flex-direction: column; |
26 |
align-items: center; |
27 |
gap: 5px; |
28 |
padding: 10px; |
29 |
border-top: 2px solid transparent; |
30 |
font-size: 16px; |
31 |
text-decoration: none; |
32 |
transition: all 0.3s; |
33 |
}
|
34 |
|
35 |
.nav-mobile a svg { |
36 |
transition: fill 0.3s; |
37 |
}
|
38 |
|
39 |
.nav-mobile li.active a, |
40 |
.nav-mobile a:hover { |
41 |
color: var(--orange); |
42 |
border-color: currentColor; |
43 |
}
|
44 |
|
45 |
.nav-mobile li.active svg, |
46 |
.nav-mobile a:hover svg { |
47 |
fill: var(--orange); |
48 |
}
|
49 |
|
50 |
@media (max-width: 600px) { |
51 |
.nav-mobile a { |
52 |
font-size: 14px; |
53 |
padding: 5px; |
54 |
}
|
55 |
}
|
56 |
|
57 |
@media (max-width: 450px) { |
58 |
.nav-mobile a { |
59 |
font-size: 12px; |
60 |
}
|
61 |
}
|
3. Adicione o JavaScript
À medida que começarmos a rolar a página, verificaremos a direção da rolagem e implementaremos esta funcionalidade:
- Se rolarmos para baixo, o
body
receberá oscroll-down
aula. Nesse ponto, a navegação desaparecerá suavemente com uma animação deslizante. - Se rolarmos para cima, ele receberá o
scroll-up
aula. Nesse ponto, a navegação aparecerá suavemente com uma animação deslizante. - Se rolarmos até o topo da página, ela perderá seu
scroll-up
aula.
Aqui está o código JavaScript necessário que, como discutimos anteriormente, virá de um tutorial anterior:
1 |
const body = document.body; |
2 |
const scrollUp = "scroll-up"; |
3 |
const scrollDown = "scroll-down"; |
4 |
let lastScroll = 0; |
5 |
|
6 |
window.addEventListener("scroll", () => { |
7 |
const currentScroll = window.pageYOffset; |
8 |
if (currentScroll <= 0) { |
9 |
body.classList.remove(scrollUp); |
10 |
return; |
11 |
}
|
12 |
|
13 |
if (currentScroll > lastScroll && !body.classList.contains(scrollDown)) { |
14 |
// down
|
15 |
body.classList.remove(scrollUp); |
16 |
body.classList.add(scrollDown); |
17 |
} else if ( |
18 |
currentScroll < lastScroll && |
19 |
body.classList.contains(scrollDown) |
20 |
) { |
21 |
// up
|
22 |
body.classList.remove(scrollDown); |
23 |
body.classList.add(scrollUp); |
24 |
}
|
25 |
lastScroll = currentScroll; |
26 |
});
|
E os estilos associados:
1 |
.nav-mobile { |
2 |
transition: transform 0.3s; |
3 |
}
|
4 |
|
5 |
.scroll-down .nav-mobile { |
6 |
transform: translate3d(0, 100%, 0); |
7 |
}
|
8 |
|
9 |
.scroll-up .nav-mobile { |
10 |
transform: none; |
11 |
}
|
Conclusão
Mais um tutorial de scrolling chegou ao fim, pessoal! Durante este exercício, criamos uma barra de navegação móvel semelhante a um aplicativo e a deslizamos com base na direção de rolagem. Espero que vocês tenham gostado tanto quanto eu e achado inspirador!
Mais uma vez, aqui está nossa criação:
Por último, se você precisar de inspiração para efeitos criativos de cabeçalho na rolagem, considere este tutorial.
Como sempre, muito obrigado pela leitura!