Partage
  • Partager sur Facebook
  • Partager sur Twitter

Menu Burger : éviter nav doublon

    15 avril 2019 à 13:44:59

    Bonjour,

    J'ai toujours eu du mal avec les Menu Burger, surtout quand il ne faut faire qu'une seule nav pour les 2 versions (mobile et bureau).

    J'ai répété deux fois les mêmes liens :

    <!doctype html>
    <html lang="fr">
    <head>
      <meta charset="utf-8">
      <title>Test</title>
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <style>
        body {
          margin:0;
          font-size:15px;
          font:1em Verdana, sans-serif;
        }
    
        .navbar {
          background-color: #2c2c2c;  
          width: 100%;
        }
    
        .navbar a {
          display: inline-block;
          color: #f5f5f5;
          text-align: center;
          text-decoration: none;
          padding: 16px 17px;
        }
    
        .navbar a:hover {
          background-color: #bebebe;
          color: black;
        }
    
        .navbar a.active {
          background-color: #cd280c;
          color: #f5f5f5;
          padding: 16px 17px;
        }
    
        .menuburger {
          height: 100%;
          width: 0; /* Menu Burger non affiché par défaut */
          position: fixed;
          z-index: 1;
          top: 0;
          right: 0;
          background-color: #34363b;
          overflow-x: hidden; /* Sans ça, la croix reste visible en bureau */
          transition: 0.5s;
          padding-top: 50px;
        }
    
        .menuburger a {
          padding: 8px 8px 8px 30px;
          text-decoration: none;
          color: #818181;
          display: block;
          transition: 0.3s;
        }
    
        .menuburger a:hover {
          color: #f4f4f4;
        }
    
        .close {
          position: absolute;
          top: 10px;
          right: 10px;
          font-size: 40px;
        }
    
        #icon {
          display: none; /* Icone menu burger non affiché par défaut */
        }
    
    
    
    
        /* ==================== Pour écran largeur <= 800px ==================== */
    
        @media screen and (max-width: 800px)
        {
          .navbar a:not(:first-child) {
            display: none; /* Cacher les liens qui ne sont pas en premier */
          }
    
          #icon {
            float: right;
            display: block; /* Afficher icone menu burger en mobile */
            padding: 15px 26px;
          }
    
          .menuburger {padding-top: 15px;}
          .menuburger a {font-size: 18px;}
        }
        </style>
    </head>
    <body>
    
      <nav>
        <div class="navbar">
          <a href="./" class="active">🏠 Accueil</a>
          <a href="#">Dossiers</a>
          <a href="#">Services</a>
          <a href="#">Info</a>
          <a href="#">Contact</a>
    
          <a href="#" id="icon" onclick="open_burger()">&#9776;</a>
        </div>
    
        <div id="mon_menuburger" class="menuburger">
            <a href="javascript:void(0)" class="close" onclick="close_burger()">&times;</a>
            <a href="./" class="active">🏠 Accueil</a>
            <a href="#">Dossiers</a>
            <a href="#">Services</a>
            <a href="#">Info</a>
            <a href="#">Contact</a>
        </div>
      </nav>
    
    
    
    
      <main>
    
        <h1>Page de test</h1>
        <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatum optio, ea fuga illo reiciendis animi mollitia nobis, provident non quo velit? Quos optio id pariatur maiores fugiat natus maxime quaerat amet dolorem, fugit magnam? Distinctio praesentium possimus sunt optio voluptas laudantium commodi voluptates? Debitis temporibus reprehenderit cupiditate cum maiores laudantium voluptas quis vel, aut quibusdam, at modi sint laboriosam quidem rem qui aliquid dolorem porro laborum! Asperiores enim deserunt, quod illo aperiam omnis perferendis maxime labore. Aliquam vitae aspernatur exercitationem minus quibusdam, architecto assumenda numquam nobis animi, necessitatibus consequatur dolorem ipsa molestias doloremque perferendis labore maxime molestiae sed officia eius?</p>
      
      </main>
    
    
      <script>
        function open_burger() {
            document.getElementById("mon_menuburger").style.width = "300px";
        }
    
        function close_burger() {
            document.getElementById("mon_menuburger").style.width = "0";
        }
    </script>
    </body>
    </html>


    Je n'arrive pas à faire une seule nav pour les deux versions.

    • Partager sur Facebook
    • Partager sur Twitter
      15 avril 2019 à 18:02:09

      Salut !

      Tu devrais te tourner du côté du display: flex et de toutes les propriété qui vont avec.

      Tuto CSS Tricks: FlexBox

      En utilisant une structure comme celle-ci:

      <nav>
          <ul>
              <li>
                  <a></a>
              </li>
              <li>
                  <a></a>
              </li>
              <li>
                  <a></a>
              </li>
          </ul>
      </nav>

      Je te laisse chercher et réfléchir cette piste, hésites pas si tu as des questions :)

      • Partager sur Facebook
      • Partager sur Twitter
        15 avril 2019 à 21:15:10

        Tu veux dire display:flex sur <ul> en version desktop, et flex-direction:columb en version mobile ?

        Ca je connais, mais j'aime pas, car cela décale tout le contenu vers le bas.

        • Partager sur Facebook
        • Partager sur Twitter
          16 avril 2019 à 9:25:58

          Oui c'est sur le <ul> qu'il faut le placer.

          Il faut évidement combiné cela avec d'autres règles css. Si tu ne veux pas que cela pousse ton contenu vers le bas (et tu as bien raison), tu peux voir pour essayé de faire des "couches" avec z-index.

          Faut pas hésité à ajouter des règles pour essayer des choses ! :)

          • Partager sur Facebook
          • Partager sur Twitter
            16 avril 2019 à 12:23:59

            Bonjour,

            Je ne sais pas si ca va t'aider mais regarde un peut celui ci.

            !doctype html>
            <html lang="fr">
            <head>
              <meta charset="utf-8">
              <title>Test</title>
              <meta name="viewport" content="width=device-width, initial-scale=1">
              <style>
            
            body {
                  margin:0;
                  font-size:15px;
                  font:1em Verdana, sans-serif;
                }
            
            
            nav{
                display: flex;
                justify-content: space-between;
                background: #2c2c2c;
                
            }
            
            
            .logoBasic{
                padding:5px;
            }
            .logo{
                width: 40px;
                margin-left: 10px;
            
            }
            .logo img{
                width:40px;
                 margin-top: 2px;
            }
            
            
            .menu-area{
               
                
                background: #2c2c2c;
                align-self: center;
               
            }
            
            a{
                color: inherit;
                text-decoration: none;
            }
            
            .menu-area ul li ul{
                transition:all 300ms ease-in-out 300ms;
                transform: rotateX(-90deg);
                transform-origin: 0% 0%;
                 backface-visibility: hidden;
                 position: absolute;
                padding-top:10px;
                text-align:left;
               
               
            
            }
            
            .menu-area ul li:hover ul{
                   transition:all 300ms ease-in-out 0ms;
                   transform: rotateX(0deg);
            }
            
            .menu-area ul{
                padding:0px;
                color:rgb(214, 207, 207);
                background: #2c2c2c;
                perspective: 300px;
                transform-style: preserve-3d;
                display: inline-block;
                list-style: none;
                position: relative;
                margin-right: 20px;
                width:100%;
                height:auto;
            }
             .open {
                height:auto;
            }
            
            .menu-area ul:after{
                content: '';
                clear: both;
                display: block;
            }
            
            .menu-area ul li{
                
                float: left;
                transform-style: preserve-3d;
                perspective: 300px;
                //border-right: 1px solid #fff;
                
              
            }
            
            
            .menu-area ul li:last-of-type{
                border-right: none;
            }
            
            .menu-area ul li:hover{
            //background: #fff;
            }
            
            .menu-area ul li:hover >a{
                color: #fff;
            }
            
            .menu-area ul li a{
                display: block;
                padding: 5px 25px;
                text-transform: uppercase;
                
            }
            
            
            .menu-area ul li ul li{
                float: none;
                position: relative;
                  border:none;
            }
            
            .menu-area ul li ul li a{
                padding: 10px 30px;
               
                
            }
            
            
            .logoBtn .bar{
                width:30px;
                height: 3px;
                background: rgb(211, 208, 208);
                margin: 4px;
            
            }
            
            
            
            .logoBtn .btn{
                border: 1px solid red;
                display: none;
            }
            
            .fa-caret-down{
                margin-left:5px;
            }
            
            @media screen and (max-width:768px){
            nav{
                display: block;
                
            
            }
            
            
            
            .menu-area ul{
              
                 display: block;
                margin-right: 0px;
                width: 100%;
                height:0;
                overflow: hidden;
                  transition: all 1s ease;
            }
            
             .menu-area ul.open{
                height: 400px;
            }
            
            
            .menu-area ul li{
                
                float: none;
                transform-style: preserve-3d;
                perspective: 0;
                border-right: none;
                position: relative ;
               
              
            }
            
            
            
            .menu-area ul li  ul   {
                position: absolute;
              
                padding-top:0px;
                background: #2c2c2c;
                border-top:0;
                margin:0;
                height: auto;
            }
            
            .menu-area ul li:hover  ul   {
               
                display: block;
                 
                
            }
            
            .menu-area ul li  ul li  {
             
                display: block;
                width:100%;
                padding-top:0px;
                background: rgb(134, 83, 83);
                border-top:0;
                margin:0;
                
                
            }
            
            
            .menu-area ul li a{
                
                padding: 15px;
            
            }
            
            
            .logoBtn .logo{
                margin-left: 10px;
            }
            
            
            
            .logoBtn{
                display: flex;
                justify-content: space-between;
                align-items: center;
               /* margin:0 10px 0 10px; */
                border-bottom:1px solid #2c2c2c;
            }
            .logoBtn .btn{
                border: 1px solid rgb(187, 183, 183);
                display: block;
                cursor: pointer;
                margin-right: 20px;
            
            }
            
            
            }
            
            
            
                </style>
            </head>
            <body>
            
              <nav>
                
                <div class="logoBtn">
                        <div class="logoBasic">
                            <a href="#" class="logo"><img src="https://upload.wikimedia.org/wikipedia/fr/0/0d/Logo_OpenClassrooms.png" alt=""></a>
                        </div>
                        <div class="btn">
                            <div class="bar"></div>
                            <div class="bar"></div>
                            <div class="bar"></div>
                        </div>
                      
                    </div>
            
            
                    <div class="menu-area">
                 <ul>
                     <li><a href="#">🏠 Accueil</a></li>
                    <li><a href="#">Dossiers</a></li>
                    <li><a href="#">Info</a></li>
                    <li><a href="#">Contact</a></li>
                    <li><a href="#">Services<i class="fas fa-caret-down"></i></a>
                      <ul class="links">
                        <li><a href="#">Services1</a></li>
                        <li><a href="#">Services2</a></li>
                        <li><a href="#">Services3</a></li>
                        <li><a href="#">Services4</a></li>
                      </ul>
                    </li>
                 </ul>
                
             </div>
            
              </nav>
             
            
              <main>
             
                <h1>Page de test</h1>
                <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatum optio, ea fuga illo reiciendis animi mollitia nobis, provident non quo velit? Quos optio id pariatur maiores fugiat natus maxime quaerat amet dolorem, fugit magnam? Distinctio praesentium possimus sunt optio voluptas laudantium commodi voluptates? Debitis temporibus reprehenderit cupiditate cum maiores laudantium voluptas quis vel, aut quibusdam, at modi sint laboriosam quidem rem qui aliquid dolorem porro laborum! Asperiores enim deserunt, quod illo aperiam omnis perferendis maxime labore. Aliquam vitae aspernatur exercitationem minus quibusdam, architecto assumenda numquam nobis animi, necessitatibus consequatur dolorem ipsa molestias doloremque perferendis labore maxime molestiae sed officia eius?</p>
               
              </main>
            
            <script type="text/javascript">
              const btn = document.querySelector('.btn');
            const openUl = document.querySelector('.menu-area ul')
            
            
            
            btn.addEventListener('click',function(){
            
               openUl.classList.toggle('open');
            })
            </script>
            
            </body>
            </html>



            • Partager sur Facebook
            • Partager sur Twitter

            Compos sui.

              16 avril 2019 à 13:19:15

              Même avec les couches z-index je trouve ça moche, car les liens nav en mobile s'étendent sur toute la largeur de l'écran.

              En fait, ce que je cherche à faire exactement c'est dans mon exemple au tout début : en version mobile, la nav apparait de droite vers la gauche. C'est ce qu'on voit sur la plupart des sites modernes.

              J'ai mis ici : https://codepen.io/furyfatal/pen/BEJyZW

              Mon seul problème c'est que je suis obligé de répéter 2 fois les mêmes liens pour les versions mobile et bureau. Sinon je n'arrive pas.

              • Partager sur Facebook
              • Partager sur Twitter
                16 avril 2019 à 17:54:42

                lol,

                Le problème n’étais pas qu'il soit beau, le design ca se travail comme tu le veut.

                Le but étais de te montrer que tu n'avais absolument pas besoin de faire deux menus.

                Quand à ton exemple question design même si je ne suis pas fan, c'est assez simple à reproduire.

                Tiens regarde une autres façon de faire sans même utiliser de JS, et encore une fois un seul menu.

                Et la encore c'est la mécanique qui compte, pas le design.

                <!DOCTYPE html>
                <html>
                  <head>
                    <title>
                      Test OCR
                    </title>
                    <link href="" rel="stylesheet">
                    <style type="text/css">
                      #menu {
                    position: fixed;
                    right: 0;
                    top: 45px;
                    width: 100vw;
                    margin: -2.5em 0 0 0;
                    z-index: 5;
                    background: hsla(233, 63%, 40%, 0.7);
                    color: white;
                    font-weight: bold;
                    font-size: large;
                    text-align: right;
                    border: solid hsla(80, 90%, 40%, 0.5);
                    border-right: none;
                    padding: 0.5em 0.5em 0.5em 2.5em;
                    box-shadow: 0 1px 3px black;
                    border-radius: 3em 0.5em 0.5em 3em;
                  }
                  #menu li { 
                    display: inline-block;
                   }
                  #menu a { 
                    color: inherit 
                  }
                
                      /* ==================== Pour écran largeur <= 768px ==================== */
                 
                    @media screen and (max-width: 768px)
                    {
                  #menu {
                    position: fixed;
                    right: -5.5em;
                    top: 65px;
                    width: 5em;
                    margin: -3em 0 0 0;
                    z-index: 5;
                    background: hsla(233, 63%, 40%, 0.7);
                    color: white;
                    font-weight: bold;
                    font-size: large;
                    text-align: left;
                    border: solid hsla(80, 90%, 40%, 0.5);
                    border-right: none;
                    padding: 0.5em 0.5em 0.5em 2.5em;
                    box-shadow: 0 1px 3px black;
                    border-radius: 3em 0.5em 0.5em 3em;
                    transition: 0.2s;
                     margin: 0;
                       transform: translate(0, -50%); 
                  }
                  #menu:hover { right: 0 }
                  #menu li { margin: 0 }
                  #menu a {
                    position: relative;
                    left: 0;
                    color: inherit;
                    transition: 0.2s;
                  }
                  #menu a:focus {
                    left: -7em;
                    background: hsla(80, 90%, 40%, 0.7);
                  }
                  #menu:hover a:focus {
                    left: 0;
                    background: none;
                }
                
                    }
                
                    </style>
                  </head>
                  <body>
                
                    <nav>
                      <ul id=menu>
                         <li><a href="#">Onglet 1</a></li>
                
                         <li><a href="#">Onglet 2</a></li>
                
                         <li><a href="#">Onglet 3</a></li>
                
                         <li><a href="#">Onglet 4</a></li>
                      </ul>
                    </nav>
                    
                    <div id="page-contents" style="padding: 10px;">
                      <p>
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
                        Fusce vitae malesuada ipsum. Duis sit amet leo metus. 
                        Vivamus sed libero eleifend, auctor leo non, dignissim tortor. 
                        Maecenas quam enim, interdum vitae massa non, tincidunt maximus nisi. 
                      </p>
                      <p>
                        Donec ac elit massa. In sed bibendum risus. 
                        Ut condimentum est nec urna volutpat, quis vehicula elit elementum. 
                        Quisque molestie auctor ante eu fermentum. 
                        In hac habitasse platea dictumst. 
                      </p>
                      <p>
                        Suspendisse vehicula dui sed tempor interdum. 
                        Vestibulum pharetra dolor at felis auctor hendrerit. 
                        In vel risus dictum, condimentum leo et, tempus magna.
                        Ut pretium semper mauris, nec mattis eros consequat quis. 
                      </p>
                      <p>
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
                        Fusce vitae malesuada ipsum. Duis sit amet leo metus. 
                        Vivamus sed libero eleifend, auctor leo non, dignissim tortor. 
                        Maecenas quam enim, interdum vitae massa non, tincidunt maximus nisi. 
                      </p>
                      <p>
                        Donec ac elit massa. In sed bibendum risus. 
                        Ut condimentum est nec urna volutpat, quis vehicula elit elementum. 
                        Quisque molestie auctor ante eu fermentum. 
                        In hac habitasse platea dictumst. 
                      </p>
                      <p>
                        Suspendisse vehicula dui sed tempor interdum. 
                        Vestibulum pharetra dolor at felis auctor hendrerit. 
                        In vel risus dictum, condimentum leo et, tempus magna.
                        Ut pretium semper mauris, nec mattis eros consequat quis. 
                      </p>
                      <p>
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
                        Fusce vitae malesuada ipsum. Duis sit amet leo metus. 
                        Vivamus sed libero eleifend, auctor leo non, dignissim tortor. 
                        Maecenas quam enim, interdum vitae massa non, tincidunt maximus nisi. 
                      </p>
                      <p>
                        Donec ac elit massa. In sed bibendum risus. 
                        Ut condimentum est nec urna volutpat, quis vehicula elit elementum. 
                        Quisque molestie auctor ante eu fermentum. 
                        In hac habitasse platea dictumst. 
                      </p>
                      <p>
                        Suspendisse vehicula dui sed tempor interdum. 
                        Vestibulum pharetra dolor at felis auctor hendrerit. 
                        In vel risus dictum, condimentum leo et, tempus magna.
                        Ut pretium semper mauris, nec mattis eros consequat quis. 
                      </p>
                      <p>
                        Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
                        Fusce vitae malesuada ipsum. Duis sit amet leo metus. 
                        Vivamus sed libero eleifend, auctor leo non, dignissim tortor. 
                        Maecenas quam enim, interdum vitae massa non, tincidunt maximus nisi. 
                      </p>
                      <p>
                        Donec ac elit massa. In sed bibendum risus. 
                        Ut condimentum est nec urna volutpat, quis vehicula elit elementum. 
                        Quisque molestie auctor ante eu fermentum. 
                        In hac habitasse platea dictumst. 
                      </p>
                      <p>
                        Suspendisse vehicula dui sed tempor interdum. 
                        Vestibulum pharetra dolor at felis auctor hendrerit. 
                        In vel risus dictum, condimentum leo et, tempus magna.
                        Ut pretium semper mauris, nec mattis eros consequat quis. 
                      </p>   
                    </div>
                
                  </body>
                </html>



                • Partager sur Facebook
                • Partager sur Twitter

                Compos sui.

                  16 avril 2019 à 22:23:26

                  Le premier exemple que tu as montré, je connais déjà. Menu qui défile de haut vers le bas.

                  L'exemple que j'ai montré c'est pas pour le design : https://codepen.io/furyfatal/pen/BEJyZW. Juste pour le burger menu qui défile de droite vers la gauche (au lieu de haut vers le bas). C'est ça que je voulais absolument. J'ai jamais su le faire en un seul menu.

                  -
                  Edité par Terry-Bogard 16 avril 2019 à 22:29:29

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Menu Burger : éviter nav doublon

                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                  • Editeur
                  • Markdown