Barras de navegação fixas/fixas são o padrão de layout principal em aplicativos móveis.
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.
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!