Criar um site não é uma tarefa simples e rápida, nós desenvolvedores muitas das vezes recorremos a bibliotecas como jQuery, por exemplo, afim de otimizar nosso tempo e entregar o produto o mais rápido para o cliente, não é mesmo?
O problema de se usar bibliotecas de terceiros são vários, dentre eles podemos listar:
- Falta de atualização;
- Linhas de códigos mal otimizadas;
- Linhas de códigos desnecessárias;
- Entre outros.
No passado o jQuery era uma biblioteca amplamente utilizada em qualquer site, porém nos dias atuais os desenvolvedores estão removendo esses scripts dos seus sites, visto os problemas citados acima e até mesmo pelo fato das linguagens nativas como CSS e Javascript possuir muitas das funcionalidades necessárias.
Veremos adiante como criar um menu de navegação vertical que fica na lateral do site, porém, quando clicamos em determinados botões o menu some ou aparece.
Confira a nossa videoaula explicando todo o processo de criação, desde a montagem do escopo da página até o nosso efeito.
O segredo está basicamente na classe CSS de transição, ela fará com que qualquer alteração seja executada de forma suave e a partir disso, a gente define os valores diretamente no Javascript através dos cliques nos botões.
Confira os códigos utilizados na videoaula.
index.html
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Menu animado - SatellaSoft</title>
<link rel="preload" href="assets/css/style.css" as="style">
<link rel="preload" href="assets/js/script.js" as="script">
<link rel="stylesheet" href="assets/css/style.css">
</head>
<body>
<header>
<img src="assets/img/menu.svg" alt="Clique para abrir ou fechar o menu" id="btnMenu">
</header>
<div class="content">
<p>Lorem ipsum dolor sit, amet consectetur adipisicing elit. Itaque eius fugit nesciunt ad? Sint aperiam velit
esse sapiente soluta, non enim ea maiores a, quis quo? Deleniti eos earum ducimus.</p>
</div>
<div id="menu" class="menu effect">
<nav>
<div style="text-align: right;">
<button id="btnClose">X</button>
</div>
<ul>
<li><a href="#">Frutas</a></li>
<li><a href="#">Link aqui</a></li>
<li><a href="#">Link aqui</a></li>
<li><a href="#">Link aqui</a></li>
<li><a href="#">Link aqui</a></li>
<li><a href="#">Link aqui</a></li>
</ul>
</nav>
</div>
<script src="assets/js/script.js"></script>
</body>
</html>
style.css
:root {
--menu-size: 250px;
}
* {
margin: 0;
padding: 0;
border: none;
box-sizing: border-box;
outline: none;
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
}
body {
background-color: #eee;
}
header {
background-color: rgb(21, 22, 29);
padding: 10px;
text-align: center;
}
.content {
max-width: 800px;
width: 100%;
margin: 0 auto;
margin-top: 50px;
}
#btnMenu {
cursor: pointer;
padding: 5px;
transition: all 0.5s;
}
#btnMenu:hover {
border-radius: 50%;
cursor: pointer;
background-color: rgb(41, 57, 98);
}
#btnMenu:active {
background-color: rgb(3, 4, 7);
}
#btnClose {
padding: 8px;
background-color: rgb(78, 37, 37);
color: #fff;
font-size: 20px;
font-weight: bold;
}
#btnClose:active {
background-color: rgb(151, 73, 73);
}
.menu {
position: fixed;
top: 0;
width: var(--menu-size);
height: 100%;
background-color: rgb(40, 42, 54);
}
.menu ul {
list-style: none;
}
.menu ul li {
display: block;
}
.menu ul li a {
transition: background 0.3s;
display: block;
color: #fff;
font-size: 19px;
text-decoration: none;
text-transform: uppercase;
padding: 10px 15px;
}
.menu ul li a:hover {
background-color: rgb(49, 54, 85);
}
.effect {
transition: margin 0.4s;
}
@media (min-width: 768px) {
#btnClose {
display: none;
}
}
script.js
'use strict'
const menuSize = '250px';
let open = true;
document.querySelector('#btnMenu').addEventListener('click', e => {
open = !open;
toggleMenu();
})
document.querySelector('#btnClose').addEventListener('click', e => {
open = false;
toggleMenu();
})
function toggleMenu() {
if (open) {
document.querySelector('#menu').style.marginLeft = 0;
return;
}
document.querySelector('#menu').style.marginLeft = `-${menuSize}`;
}