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

Estou com dúvida no curso de Web Design Responsivo, no exercício do capítulo Menu Responsivo.

Opa. Boa tarde gente. Não estou conseguindo disparar o evento dessa lista, alguem pode me ajudar.

10 respostas

Marcio, eu me lembro que também tive problemas.

Não sei se é o seu caso, mas eu resolvi colocando o script dentro do body, header. Dá uma olhada no código abaixo:

    <header>
        <div class="container">


            <button class="menu-abrir">
            Abre Menu
            </button>

            <h1 class="logo">
                <img src="img/logo.png" alt="Notícias.com">
            </h1>            

            <nav class="barra-nav">

                <button class="menu-fechar">
                Fecha Menu
                </button>   

        <script src="js/menu.js"></script>


                <ul class="menu-principal">
                    <li><a href="noticias.html" class="noticias">Notícias</a>
                    <li><a href="esportes.html" class="esportes">Esportes</a>
                    <li><a href="famosos.html" class="famosos">Famosos</a>
                </ul>

                <form class="busca">
                    <input type="search" id="campo-busca">
                    <button type="submit">Buscar</button>
                </form>
            </nav>
        </div>
    </header>

Caro amigo muito obrigado pela sua resposta mas não funcionou esto te passado o código.

<!doctype html>

Abre Menu

Notícias.com

Fecha Menu

Buscar

Descoberto mais um esquema de espionagem da NSA

Deputado é pego em vídeo pedindo propina

Acidente na BR-42 mata 12 da mesma família

NASA acha indícios de vida em Marte

Recorde de vendas do Xbox One

Atriz na praia

Atriz da Globo passeia com filho em Copacabana

Estádios das Olimpíadas estão atrasados

Time perdedor

Time perdedor é rebaixado para Série B

Time vencedor

Time vencedor sobe para Série A da Copa

Transferência milionária de craque para a Europa

BBB: brothers vão pra piscina

Subcelebridade faz algo estúpido para aparecer

Casal de famosos se separa

Novela tem cena decisiva nessa sexta-feira

Jogador é flagrado em festança promíscua

Roupão

BBB

Jeílson usa roupão de bolinhas verdes e é consolado

vixe que eca que fiz pera ai

<!doctype html>

Abre Menu

Notícias.com

Fecha Menu

Buscar

Descoberto mais um esquema de espionagem da NSA

Deputado é pego em vídeo pedindo propina

Acidente na BR-42 mata 12 da mesma família

NASA acha indícios de vida em Marte

Recorde de vendas do Xbox One

Atriz na praia

Atriz da Globo passeia com filho em Copacabana

Estádios das Olimpíadas estão atrasados

Time perdedor

Time perdedor é rebaixado para Série B

Time vencedor

Time vencedor sobe para Série A da Copa

Transferência milionária de craque para a Europa

BBB: brothers vão pra piscina

Subcelebridade faz algo estúpido para aparecer

Casal de famosos se separa

Novela tem cena decisiva nessa sexta-feira

Jogador é flagrado em festança promíscua

Roupão

BBB

Jeílson usa roupão de bolinhas verdes e é consolado

opa outra duvida como passo o codigo aqui.

coloca o código entre ``` (3 crases antes do código e 3 crases depois) rs

Oh meu irmão mil desculpas por essa falha segue.

<!doctype html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Notícias.com</title>

    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="stylesheet" href="css/estilo.css">
    <link rel="stylesheet" href="css/exercicios.css">
</head>
<body>

    <header>
        <div class="container">
            <button class="menu-abrir">Abre Menu</button>
            <h1 class="logo">
                <img src="img/logo.png" alt="Notícias.com">
            </h1>

            <nav class="barra-nav">
                <button class="menu-fechar">Fecha Menu</button>
                <ul class="menu-principal">
                    <li><a href="noticias.html" class="noticias">Notícias</a>
                    <li><a href="esportes.html" class="esportes">Esportes</a>
                    <li><a href="famosos.html" class="famosos">Famosos</a>
                </ul>

                <form class="busca">
                    <input type="search" id="campo-busca">
                    <button type="submit">Buscar</button>
                </form>
            </nav>
        </div>
    </header>

    <main class="destaques container">

        <div class="secao">

            <a href="noticia1.html" class="chamada noticias principal">
                <h2>Descoberto mais um esquema de espionagem da NSA</h2>
            </a>
            <a href="noticia2.html" class="chamada noticias normal">
                <h2>Deputado é pego em vídeo pedindo propina</h2>
            </a>
            <a href="noticia3.html" class="chamada noticias normal">
                <h2>Acidente na BR-42 mata 12 da mesma família</h2>
            </a>
            <a href="noticia4.html" class="chamada noticias normal mini">
                <h2>NASA acha indícios de vida em Marte</h2>
            </a>
            <a href="noticia5.html" class="chamada noticias normal mini">
                <h2>Recorde de vendas do Xbox One</h2>
            </a>
            <!--<a href="noticia14.html" class="chamada noticias normal">
                <h2>BC anuncia nova alta nos juros</h2>
            </a>-->
            <a href="noticia11.html" class="chamada famosos normal">
                <img src="img/entretenimento1.jpg" alt="Atriz na praia">
                <h2>Atriz da Globo passeia com filho em Copacabana</h2>
            </a>
            <a href="noticia6.html" class="chamada esportes normal">
                <h2>Estádios das Olimpíadas estão atrasados</h2>
            </a>
        </div>

        <div class="secao">
            <a href="noticia7.html" class="chamada esportes normal mini">
                <img src="img/esporte1.jpg" alt="Time perdedor">
                <h2>Time perdedor é rebaixado para Série B</h2>
            </a>
            <a href="noticia8.html" class="chamada esportes normal mini">
                <img src="img/esporte2.jpg" alt="Time vencedor">
                <h2>Time vencedor sobe para Série A da Copa</h2>
            </a>
            <a href="noticia9.html" class="chamada esportes normal">
                <h2>Transferência milionária de craque para a Europa</h2>
            </a>
            <a href="noticia10.html" class="chamada famosos normal">
                <h2>BBB: brothers vão pra piscina</h2>
            </a>
            <a href="noticia12.html" class="chamada famosos normal">
                <h2>Subcelebridade faz algo estúpido para aparecer</h2>
            </a>
            <a href="noticia16.html" class="chamada famosos">
                <h2>Casal de famosos se separa</h2>
            </a>
            <a href="noticia13.html" class="chamada famosos normal">
                <h2>Novela tem cena decisiva nessa sexta-feira</h2>
            </a>
            <a href="noticia15.html" class="chamada esportes">
                <h2>Jogador é flagrado em festança promíscua</h2>
            </a>

        </div>

        <div class="secao">
            <a href="video.html" class="tv chamada normal famosos">
                <img src="img/tv1.jpg" alt="Roupão">

                <p>BBB</p>
                <h2>Jeílson usa roupão de bolinhas verdes e é consolado</h2>

                <span class="bolinha"></span>
                <span class="bolinha"></span>
                <span class="bolinha"></span>
            </a>
        </div>

    </main>

    <script src="js/menu.js"></script>
</body>
</html>
/* Aqui a gente dividi em 3 colunas */
.secao {
    float: left;
    width: 33.333%;
}

/* converte em 2 colunas */
.mini {
    float: left;
    width: 50%;
}

/* centralizamos o conteudo */
.container{
    margin: 0 auto;
    /*width: 100%;*/
    max-width: 1200px;
}
.logo,
.secao {
    padding: 0 1%;
}

/* eveitamos que as imagens estorem os box definindo um max width */
img {
    max-width: 100%;
}
/*definimos tudo na mesma linha do cabeçalho permitindo que eles escorregem para baixo */

.logo,
.busca,
.barra-nav,
.menu-principal {
    /* O inline-block é interessante por simular uma linha de texto com seus elementos.
    Se não cabe mais um "caracter" na linha, a "palavra" escorrega pra linha de baixo. */
    display: inline-block; !important;
    vertical-align: middle;
    /*padding: 0.5em;*/
}
.menu-principal li {
    float: left;
}
header {
    padding: 0.5em 0;
}
.destaques {
    margin-top: 1em;
}
.barra-nav {
    margin: 0.4em 0;
}
.secao {
    width: 100%;
}
.secao {
    width: 100%;
}
.barra-nav {
    background: #f0f0f0;
    padding: 1em;
    margin: 0;

    height: 100%;
    width: 90%;
    max-width: 320px;

    position: fixed;
    z-index: 1;
    top: 0;
    left: -90%;

    transition: left 0.3s ease-out;

}
.menu-ativo:after {
    content: "";
    display: block;
    position: fixed;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    background: rgba(0, 0, 0, 0.4);
}

@media not all and (max-width: 600px) {
    .menu-abrir,
    .menu-fechar {
        display: none;
    }
}
@media (min-width: 600px) {
    .secao {
        width: 50%;
    }

}

@media (min-width: 1000px) {
    .secao {
        width: 33.333%;
    }
}

Marcio, dá uma olhada no seu seletor .barra-nav

.barra-nav {
    background: #f0f0f0;
    padding: 1em;
    margin: 0;

    height: 100%;
    width: 90%;
    max-width: 320px;

    position: fixed;
    z-index: 1;
    top: 0;
    left: -90%;

    transition: left 0.3s ease-out;

}

Ele deve ser uma media query, como abaixo:

@media (max-width: 600px) {
    .barra-nav  {
        background: #f0f0f0;
        padding: 1em;
        margin: 0;

        heigth: 100%;
        width: 90%;
        max-widht: 320px;

        position: fixed;
        z-index: 1;
        top: 0;
        left: -90%;
        /* transição animada 
           neste caso a animação é na propriedade left
        */
        transition: left 0.3s ease-out;
    }
}

eu coloquei mas não funcionou vc ainda tem o seu código se tiver manda para fazer um comparativo e ver o que estar errado com o meu.

solução!

Marcio, eu alterei o seu css. Apenas a alteração acima e funcionou com o seu html. O único código que não usei seu foi o do script.

Vou colocar aqui o css (seu com a alteração que fiz) e o html (seu também, pois testei em cima dele). E junto vai o javascript (meu) pois este vc não havia postado, ok?

html


<!doctype html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <title>Notícias.com</title>

    <meta name="viewport" content="width=device-width, initial-scale=1">

    <link rel="stylesheet" href="css/estilo.css">
    <link rel="stylesheet" href="css/exercicios.css">
</head>
<body>

    <header>
        <div class="container">
            <button class="menu-abrir">Abre Menu</button>
            <h1 class="logo">
                <img src="img/logo.png" alt="Notícias.com">
            </h1>


            <nav class="barra-nav">
                <button class="menu-fechar">Fecha Menu</button>

    <script src="js/menu.js"></script>                           
                <ul class="menu-principal">
                    <li><a href="noticias.html" class="noticias">Notícias</a>
                    <li><a href="esportes.html" class="esportes">Esportes</a>
                    <li><a href="famosos.html" class="famosos">Famosos</a>
                </ul>

                <form class="busca">
                    <input type="search" id="campo-busca">
                    <button type="submit">Buscar</button>
                </form>
            </nav>
        </div>
    </header>

    <main class="destaques container">

        <div class="secao">

            <a href="noticia1.html" class="chamada noticias principal">
                <h2>Descoberto mais um esquema de espionagem da NSA</h2>
            </a>
            <a href="noticia2.html" class="chamada noticias normal">
                <h2>Deputado é pego em vídeo pedindo propina</h2>
            </a>
            <a href="noticia3.html" class="chamada noticias normal">
                <h2>Acidente na BR-42 mata 12 da mesma família</h2>
            </a>
            <a href="noticia4.html" class="chamada noticias normal mini">
                <h2>NASA acha indícios de vida em Marte</h2>
            </a>
            <a href="noticia5.html" class="chamada noticias normal mini">
                <h2>Recorde de vendas do Xbox One</h2>
            </a>
            <!--<a href="noticia14.html" class="chamada noticias normal">
                <h2>BC anuncia nova alta nos juros</h2>
            </a>-->
            <a href="noticia11.html" class="chamada famosos normal">
                <img src="img/entretenimento1.jpg" alt="Atriz na praia">
                <h2>Atriz da Globo passeia com filho em Copacabana</h2>
            </a>
            <a href="noticia6.html" class="chamada esportes normal">
                <h2>Estádios das Olimpíadas estão atrasados</h2>
            </a>
        </div>

        <div class="secao">
            <a href="noticia7.html" class="chamada esportes normal mini">
                <img src="img/esporte1.jpg" alt="Time perdedor">
                <h2>Time perdedor é rebaixado para Série B</h2>
            </a>
           <a href="noticia8.html" class="chamada esportes normal mini">
               <img src="img/esporte2.jpg" alt="Time vencedor">
               <h2>Time vencedor sobe para Série A da Copa</h2>
           </a>
           <a href="noticia9.html" class="chamada esportes normal">
               <h2>Transferência milionária de craque para a Europa</h2>
           </a>
           <a href="noticia10.html" class="chamada famosos normal">
               <h2>BBB: brothers vão pra piscina</h2>
           </a>
           <a href="noticia12.html" class="chamada famosos normal">
               <h2>Subcelebridade faz algo estúpido para aparecer</h2>
           </a>
           <a href="noticia16.html" class="chamada famosos">
               <h2>Casal de famosos se separa</h2>
           </a>
           <a href="noticia13.html" class="chamada famosos normal">
               <h2>Novela tem cena decisiva nessa sexta-feira</h2>
           </a>
           <a href="noticia15.html" class="chamada esportes">
               <h2>Jogador é flagrado em festança promíscua</h2>
           </a>

       </div>

       <div class="secao">
           <a href="video.html" class="tv chamada normal famosos">
                <img src="img/tv1.jpg" alt="Roupão">

                <p>BBB</p>
                <h2>Jeílson usa roupão de bolinhas verdes e é consolado</h2>

                <span class="bolinha"></span>
                <span class="bolinha"></span>
                <span class="bolinha"></span>
            </a>
        </div>

    </main>


</body>
</html>

css

/* Aqui a gente dividi em 3 colunas */
.secao {
    float: left;
    width: 33.333%;   /* era 33.333  */
}

/* ok */
/* converte em 2 colunas */
.mini {
    float: left;
    width: 50%;
}

/* centralizamos o conteudo */
.container{
    margin: 0 auto;
    /*width: 100%;*/
    max-width: 1200px;
}
.logo,
.secao {
    padding: 0 1%;
}

/* eveitamos que as imagens estorem os box definindo um max width */
img {
    max-width: 100%;
}
/*definimos tudo na mesma linha do cabeçalho permitindo que eles escorregem para baixo */

.logo,
.busca,
.barra-nav,
.menu-principal {
    /* O inline-block é interessante por simular uma linha de texto com seus elementos.
    Se não cabe mais um "caracter" na linha, a "palavra" escorrega pra linha de baixo. */
    display: inline-block; !important;
    vertical-align: middle;
    /*padding: 0.5em;*/
}
.menu-principal li {
    float: left;
}
header {
    padding: 0.5em 0;
}
.destaques {
    margin-top: 1em;
}
.barra-nav {
    margin: 0.4em 0;
}
.secao {
    width: 100%;
}
.secao {
    width: 100%;
}

/*     comentei 
.barra-nav {
    background: #f0f0f0;
    padding: 1em;
    margin: 0;

    height: 100%;
    width: 90%;
    max-width: 320px;

    position: fixed;
    z-index: 1;
    top: 0;
    left: -90%;

    transition: left 0.3s ease-out;

}
*/

/* adicionei!!! */

@media (max-width: 600px) {
    .barra-nav  {
        background: #f0f0f0;
        padding: 1em;
        margin: 0;

        heigth: 100%;
        width: 90%;
        max-widht: 320px;

        position: fixed;
        z-index: 1;
        top: 0;
        left: -90%;
        /* transição animada 
           neste caso a animação é na propriedade left
        */
        transition: left 0.3s ease-out;
    }
}    
.menu-ativo .barra-nav  {
    left: 0;    
}
.menu-ativo:after {
    content: "";
    display: block;
    position: fixed;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
    background: rgba(0, 0, 0, 0.4);
}
/* ok */
@media not all and (max-width: 600px) {
    .menu-abrir,
    .menu-fechar {
        display: none;
    }
}

/* ok meu 768 */
@media (min-width: 600px) {
    .secao {
        width: 50%;
        float: left;   /* adicionei */
   }
}   /* adicionei */

/* ok meu 1024 */
@media (min-width: 1000px) { /* adicionei @ */
    .secao {
        width: 33.333%;
       // float: left;   /* adicionei */        
    }
}

menu.js

document.querySelector('.menu-abrir').onclick=function() {


    console.log("Testando");
    document.documentElement.classList.add('menu-ativo');



};


document.querySelector('.menu-fechar').onclick=function() {


    document.documentElement.classList.remove('menu-ativo');

} ;       

document.documentElement.onclick = function(event) {
    if (event.target === document.documentElement) {
        document.documentElement.classList.remove('menu-ativo');
    }
};

Ok erro de css, ja que o javaScript estar igual ao seu, funcionou aqui muito obrigado pela assistência.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software