Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

menu lateral não abre e fecha

Pessoal, preciso de ajuda, meu menu não está abrindo e fechando quando clica . . JS

const botaoMenu = document.querySelector('.cabecalho__menu')
const menu = document.querySelector('.menu-lateral')
botaoMenu.addEventListener('click', () => {
    menu.classList.toggle('menu-lateral--ativo')
})

CSS

@font-face {
    font-family: 'icones';
    src: url(../font/icones.ttf);
}

body {
    background-color: #1D232A;
    font-family: 'Open Sans', 'icones', sans-serif;
    color: #ffffff;
}

.cabecalho {
    display: flex;
    justify-content: space-between;
    align-items: center;
    background-color: #15191C;
    padding: 8px 16px;
    box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.16);
}

.cabecalho__menu i::before {
    content: "\e904";
    font-size: 24px;
}

.cabecalho__notificacao i::before {
    content: "\e906";
    font-size: 24px;
}

.cabecalho__logo {
    width: 40px;
}

.menu-lateral {
    display: flex;
    flex-direction: column;
    background-color: #15191C;
    width: 75vw;
    height: 100vh;
    position: absolute;
    left: -100vw;
}

.menu-lateral__ativo{
    left: 0;
}

.menu-lateral__logo {
    width: 118px;
    align-self: center;
    padding: 16px;
}

.menu-lateral__link {
    height: 64px;
    color: #95999C;
    padding-left: 64px;
    display: flex;
    align-items: center;
}

.menu-lateral__link--ativo {
    color: #ffffff;
    padding-left: 56px;
    border-left: 8px solid #FFFFFF;
}

.menu-lateral__link::before {
    content: "";
    width: 24px;
    height: 24px;
    font-size: 24px;
    position: absolute;
    left: 24px;
}

.menu-lateral__link--inicio::before {
    content: "\e902";
}
.menu-lateral__link--videos::before {
    content: "\e90e";
}
.menu-lateral__link--picos::before {
    content: "\e908";
}
.menu-lateral__link--integrantes::before {
    content: "\e903";
}
.menu-lateral__link--camisas::before {
    content: "\e900";
}
.menu-lateral__link--pinturas::before {
    content: "\e90a";
}
9 respostas

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>HZC | HOME</title><link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700&display=swap">
    <link rel="stylesheet" href="assets/css/reset.css">
    <link rel="stylesheet" href="assets/css/estilos.css">
</head>
<body>
    <header class="cabecalho">
        <button class="cabecalho__menu" aria-label="Menu"><i></i></button>
        <img src="assets/img/logo.svg" alt="Logotipo da HZC" class="cabecalho__logo">
        <button class="cabecalho__notificacao" aria-label="Notificação"><i></i></button>
    </header>
    <nav class="menu-lateral">
        <img src="assets/img/logo.svg" alt="logotipo da HZC" class="menu-lateral__logo">
        <a href="#" class="menu-lateral__link menu-lateral__link--inicio menu-lateral__link--ativo">Inicio</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--videos">Vídeos</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--picos">Picos</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--integrantes">Integrantes</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--camisas">Camisas</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--pinturas">Pinturas</a>
    </nav>
    <script src="index.js"></script>
</body>
</html>

Olá Rafael, tudo bem?

O que está acontecendo é só uma falha de comunicação, você está passando uma classe que não existe.

CSS:

.menu-lateral__ativo{
    left: 0;
}

JS:

const botaoMenu = document.querySelector('.cabecalho__menu')
const menu = document.querySelector('.menu-lateral')
botaoMenu.addEventListener('click', () => {
    menu.classList.toggle('menu-lateral__ativo')
})

Basta você alterar o nome da classe para que a função consiga aplicar os estilos que está passando para ela.

Espero ter ajudado e sinta-se a vontade para perguntar em caso de mais dúvidas.

Bons estudos.

Opa, boa tarde, DIego cara ainda não estou conseguindo entender

Olá Rafael, tudo bem?

O que acontece é o seguinte, você selecionou o botão do menu e o corpo do menu e atribuiu a uma variável desta forma:

JS:

const botaoMenu = document.querySelector('.cabecalho__menu');
//<button class="cabecalho__menu" aria-label="Menu"><i></i></button>

const menu = document.querySelector('.menu-lateral');
//<nav class="menu-lateral">
//        <img src="assets/img/logo.svg" alt="logotipo da HZC" class="menu-lateral__logo">
//        <a href="#" class="menu-lateral__link menu-lateral__link--inicio menu-lateral__link--ativo">Inicio</a>
//        <a href="#" class="menu-lateral__link menu-lateral__link--videos">Vídeos</a>
//        <a href="#" class="menu-lateral__link menu-lateral__link--picos">Picos</a>
//        <a href="#" class="menu-lateral__link menu-lateral__link--integrantes">Integrantes</a>
//        <a href="#" class="menu-lateral__link menu-lateral__link--camisas">Camisas</a>
//        <a href="#" class="menu-lateral__link menu-lateral__link--pinturas">Pinturas</a>
//   </nav>

O menu possui uma classe '.menu-lateral' que usamos para passar alguns estilos.

.menu-lateral {
    display: flex;
    flex-direction: column;
    background-color: #15191C;
    width: 75vw;
    height: 100vh;
    position: absolute;
    left: -100vw;
}

Essas propriedades deixam o menu com os links um abaixo do outro, passa uma cor de fundo, uma largura de 75% da tela, altura de 100% da tela e com o uso da propriedade position: absolute permite que use as propriedades top, right, bottom e left para posicionar o elemento como preferir, nesse caso foi usado left de -100vw que vai descolar todo o menu para a esquerda. Olha esse esquema: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Vamos usar o botaoMenu para que ele escute um evento de clique, e quando esse evento acontecer vamos pegar o menu e colocar uma classe usando o classList e com o toggle e passar a classe onde a propriedade left é 0 fazendo com que o lado esquerdo do menu fique posicionado a esquerda no ponto 0.

JS:

botaoMenu.addEventListener('click', () => {
    // Atenção no nome da classe criada no css para chamar corretamente na função.
    menu.classList.toggle('abrir-menu')
})

CSS:

.abrir-menu{
    left: 0;
}

O seu menu vai ficar da seguinte forma no HTML:

//Com a classe .abrir-menu.
<nav class="menu-lateral abrir-menu ">
        <img src="assets/img/logo.svg" alt="logotipo da HZC" class="menu-lateral__logo">
        <a href="#" class="menu-lateral__link menu-lateral__link--inicio menu-lateral__link--ativo">Inicio</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--videos">Vídeos</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--picos">Picos</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--integrantes">Integrantes</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--camisas">Camisas</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--pinturas">Pinturas</a>
    </nav>

Espero ter ajudado.

Bons estudos.

Cara piorou kkkkkkkk Meu codigo está igual ao da aula (ao meu ver) e ainda continua sem funfar

<!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>HZC | Home</title>
    <link rel="preconnect" href="https://fonts.googleapis.com">
    <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
    <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@400;600;700&display=swap">
    <link rel="stylesheet" href="assets/css/reset.css">
    <link rel="stylesheet" href="assets/css/estilos.css">
</head>
<body>
    <header class="cabecalho">
        <button class="cabecalho__menu" aria-label="Menu"><i></i></button>
        <img src="assets/img/logo.svg" alt="Logotipo da HZC" class="cabecalho__logo">
        <button class="cabecalho__notificacao" aria-label="Notificação"><i></i></button>
    </header>
    <nav class="menu-lateral">
        <img src="assets/img/logo.svg" alt="Logotipo da HZC" class="menu-lateral__logo">
        <a href="#" class="menu-lateral__link menu-lateral__link--inicio menu-lateral__link--ativo">Início</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--videos">Vídeos</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--picos">Picos</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--integrantes">Integrantes</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--camisas">Camisas</a>
        <a href="#" class="menu-lateral__link menu-lateral__link--pinturas">Pinturas</a>
    </nav>
    <script src="index.js"></script>
</body>
</html>

js

const botaoMenu = document.querySelector('.cabecalho__menu')
const menu = document.querySelector('.menu-lateral')

botaoMenu.addEventListener('click', () => {
    menu.classList.toggle('menu-lateral--ativo')
})

css

@font-face {
    font-family: 'icones';
    src: url(../font/icones.ttf);
}

body {
    background-color: #1D232A;
    font-family: 'Open Sans', 'icones', sans-serif;
    color: #FFFFFF;
}

.cabecalho {
    display: flex;
    justify-content: space-between;
    align-items: center;
    background-color: #15191C;
    padding: 8px 16px;
    box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.16);
}

.cabecalho__menu i::before {
    content: "\e904";
    font-size: 24px;
}

.cabecalho__notificacao i::before {
    content: "\e906";
    font-size: 24px;
}

.cabecalho__logo {
    width: 40px;
}

.menu-lateral {
    display: flex;
    flex-direction: column;
    background-color: #15191C;
    width: 75vw;
    height: 100vh;
    position: absolute;
    left: -100vw;
    transition: .25s;
}

.menu-lateral--ativo {
    left: 0;
    transition: .25s;
}

.menu-lateral__logo {
    width: 118px;
    align-self: center;
    padding: 16px;
}

.menu-lateral__link {
    height: 64px;
    color: #95999C;
    padding-left: 64px;
    display: flex;
    align-items: center;
}

.menu-lateral__link--ativo {
    color: #FFFFFF;
    padding-left: 56px;
    border-left: 8px solid #FFFFFF;
}

.menu-lateral__link::before {
    content: "\e900";
    width: 24px;
    height: 24px;
    font-size: 24px;
    position: absolute;
    left: 24px;
}

.menu-lateral__link--inicio::before {
    content: "\e902";
}
.menu-lateral__link--videos::before {
    content: "\e90e";
}
.menu-lateral__link--picos::before {
    content: "\e909";
}
.menu-lateral__link--integrantes::before {
    content: "\e903";
}
.menu-lateral__link--camisas::before {
    content: "\e900";
}
.menu-lateral__link--pinturas::before {
    content: "\e90a";
}
solução!

Olá Rafael.

Cara faz um teste simples, no seu arquivo JS, coloca um console.log para ver se essa função está sendo chamada quando você clicar.

const botaoMenu = document.querySelector('.cabecalho__menu')
const menu = document.querySelector('.menu-lateral')

botaoMenu.addEventListener('click', () => {
       console.log('Clicou")
})

Depois disso, vai no seu navegador e abre o inspecionar, basta clicar com o botão esquerdo do mouse e clicar o inspecionar, abre a janela de console, e quando você clicar no menu deve retornar a mensagem que colocou no console.log.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeCaso não funcione, o seu arquivo JS pode não está sendo lido pelo HTML.

Testa ai, e verifica isso.

Aguardo.

Grande Diego, vim aqui só pra avisar que e marcar como problema resolvido, muito obrigado pela atenção............na verdade era erro de grafia ao invés de escrever index.JS escrevi indes.JS..........só fui notar isso justamente nessa ultima ajuda, dei um f12 e no console constafa o famoso erro 404 arquivo js não encotrado. masi uma vez muito obrigado!