Sous menu barre de navigation

Fermé
DrowZiiT - 23 avril 2023 à 10:40
txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 - 23 avril 2023 à 18:19

Bonjour,

Bonjour, je rencontre un problème avec ma barre de navigation. En effet, lorsque je passe la souris sur mon li "Genres" ça m'ouvre mon sous menu. Le problème c'est que je n'arrive pas à atteindre les différentes catégories et ce dernier se déroule en dessous du slider que j'ai mis dans ma page index. J'ai essayé de mettre des z-index pour régler le problème de superposition mais rien n'y fait. Quant au problème d'atteindre les li du sous menu, je n'y arrive pas car le sous menu se ferme... J'ai beau modifier des trucs dans mon code rien ne se passe ? J'ai vraiment besoin d'aide !

Je précise que ce code n'est absolument pas fait par un professionnel ni même pas de réels passionnés de code. Nous sommes seulement des élèves en apprentissage !

Merci à vous

"HTML + PHP"

<header>
        <div class="menu">
          <span class="bar"></span>
        </div>
        <nav>
          <div class="nav-container">
            <div class="logo">
              <a href="index.php"><img src="https://media.discordapp.net/attachments/1091245398426927164/1094973573141115053/CinemaChronicles.png?width=1440&height=512" alt="logo"></a>
            </div>
            <ul>
              <li><a href="#">Genres</a>
                  <ul class="sous">
                  <?php 
      $dbh = new PDO('mysql:host=localhost;dbname=sae203;charset=utf8', 
            'root', 
            '');
            $sth = $dbh->prepare('SELECT idGenre,libelle FROM genre');
            $sth->execute();
            $result = $sth->fetchAll();
            foreach($result as $row){
                echo "<li><a href='genres.php?cat=".$row["idGenre"]."'>".$row["libelle"]."</a></li>"
            ;}
      ?>
                  </ul>
              </li>
              <li><a href="nouveaux.php">Nouveautés</a></li>
              <li><a href="mieux_notes.php">Mieux notés</a></li>
              <li><a href="nouveau_film.php">Ajouter un film</a></li>
              <li> <form action="reponse.php" method="POST">
                  <input type="search" placeholder="Rechercher un film.." name="searchbox" id="searchbox">
                  <input type="submit" value="→"></form>
            </ul>
          </div>
          <script>
  var isActive = false;

let menu = document.querySelector('.menu')
menu.addEventListener('click', afficherMenu)
function afficherMenu() {
    if (isActive){
        menu.classList.remove("active")
        document.querySelector('body').classList.remove('menu-open')
    } else {
        menu.classList.add("active")
        document.querySelector('body').classList.add('menu-open')
    }
    isActive = !isActive
}
</script>
        </nav>
      </header>

 "CSS de la barre de navigation"

   header{
    width: 100%;
    height: 14vh;
    position: relative;
    background-color: transparent;
    }
    html{
    font-size: 10px;
    }
    .menu{
    display: none;
    }
    .main-text{
    width: 100%;
    text-align: center;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    color: #333;
    font-family: "Lato", sans-serif;
    text-transform: uppercase;
    letter-spacing: 3px;
    z-index: 9999999;
    }
    nav{
    width: 100%;
    height: 10rem;
    font-family: "Roboto Condensed", sans-serif;
    font-size: 1.7rem;
    font-weight: bold;
    line-height: 11rem;
    box-shadow: 0 0 1rem rgb(255,255,94);
    background-color: rgb(255,255,94);
    color: black;
    }

    .logo{
    float: left;
    margin-top: 1.5rem;
    }

    .logo img{
    margin-left: 3rem;
    width: 143.5px;
    height: 50.5px;
    }

    nav ul{
    list-style: none;
    float: right;
    }

    nav ul li{
    display: inline-block;
    padding: 0 1rem;
    justify-content: center;
    transition: opacity .3s;
    position: relative;
    text-transform: uppercase;
    }

    nav ul li:hover {
    opacity: 0.7;
    }

    nav ul li:hover ul {
    display: block;
    }

    nav ul .sous {
    display: none;
    position: absolute;
    top: 100%;
    left: 0;
    width: 100%;
    }

    nav ul .sous li {
    display: block;
    padding: 5rem;
    background-color: rgb(255,255,94);

    }

    nav ul .sous li a {
    color: #333;
    }

    nav ul li a{
    text-decoration: none;
    color: #333;
    }

    nav ul li .sous {
    display: none;
    position: absolute;
    top: 100%;
    left: 0;
    width: 100%;
    }

    nav ul li:hover .sous {
    display: block;
    }

    nav ul li .sous li {
    display: block;
    padding: 1rem;
    background-color: rgb(255,255,94);
    } 
nav ul li .sous li a {
    color: #333;
    }

@media screen and (max-width: 900px){
  .logo{
    float: center;
    margin-top: 1.5rem;
    }
  .menu{
    display: block;
    position: fixed;
    width: 3rem;
    height: 3rem;
    top: 3rem;
    right: 3rem;
    z-index: 999;
    cursor: pointer;
  }

  .bar,
  .bar::before,
  .bar::after{
    position: absolute;
    background-color: rgb(131, 131, 131);
    margin: auto;
    width: 100%;
    height: 3px;
    content: "";
    top: 50%;
    left: 0;
    transition: all .4s;
  }

  .bar{
    margin-top: -2px;
  }

  .bar::before{
    top: -1.2rem;
  }

  .bar::after{
    top: 1.2rem;
  }

  .bar::before,
  .bar::after{
    transform: rotate(0deg);
  }

  .active .bar{
    background-color: transparent;
  }

  .active .bar::before{
    transform: rotate(45deg);
  }

  .active .bar::after{
    transform: rotate(-45deg);
  }

  .active .bar::before,
  .active .bar::after{
   top: 0;
  }

  nav{
    width: 25rem;
    height: 100%;
    background-color: rgb(255, 255, 94);
    position: fixed;
    transform: translateX(-50rem);
    z-index: 998;
    line-height: 1;
    font-size: 2.5rem;
    transition: transform .6s cubic-bezier(0.56, 0.1, 0.34, 0.91);
  }
  .menu-open nav{
    transform: translateX(0);
  }
  nav ul{
    width: 100%;
    text-align: center;
    padding-top: 10rem;
  }
  nav ul li{
    display: block;
    padding: 2rem 1rem;
}
}

Ce que je veux

Un sous menu fonctionnel où je peux atteidre toutes les propositions de ce dernier

Ce que j'obtiens

Un sous menu qui se met sous mon slider et où le sous menu n'est pas atteignable sauf pour la première option.


Windows / Firefox 112.0

1 réponse

txiki Messages postés 6596 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 22 février 2024 518
23 avril 2023 à 18:19

Salut,
Pour les codes, faut les couper, html, css c'est pas pareil et est illisible pour celui qui pourrait t'aider.
J'ai recopié le CSS ci-dessous:
"CSS de la barre de navigation"

   header{
    width: 100%;
    height: 14vh;
    position: relative;
    background-color: transparent;
    }
    html{
    font-size: 10px;
    }
    .menu{
    display: none;
    }
    .main-text{
    width: 100%;
    text-align: center;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    color: #333;
    font-family: "Lato", sans-serif; /* farfelus ! si le client n'a pas ces polices ??? */
    text-transform: uppercase;
    letter-spacing: 3px;
    z-index: 9999999; /* ça ne sert à rien, 10 c'est déjà beaucoup ! */
    }
    nav{
    width: 100%;
    height: 10rem;
    font-family: "Roboto Condensed", sans-serif; /* Pareil farfelus */
    font-size: 1.7rem;
    font-weight: bold;
    line-height: 11rem;
    box-shadow: 0 0 1rem rgb(255,255,94);
    background-color: rgb(255,255,94);
    color: black;
    }

    .logo{
    float: left;
    margin-top: 1.5rem;
    }

    .logo img{
    margin-left: 3rem;
    width: 143.5px;
    height: 50.5px;
    }

    nav ul{
    list-style: none;
    float: right;
    }

    nav ul li{
    display: inline-block;
    padding: 0 1rem;
    justify-content: center;
    transition: opacity .3s;
    position: relative;
    text-transform: uppercase;
    }

    nav ul li:hover {
    opacity: 0.7;
    }

    nav ul li:hover ul {
    display: block;
    }

    nav ul .sous {
    display: none;
    position: absolute;
    top: 100%;
    left: 0;
    width: 100%;
    }

    nav ul .sous li {
    display: block;
    padding: 5rem;
    background-color: rgb(255,255,94);

    }

    nav ul .sous li a {
    color: #333;
    }

    nav ul li a{
    text-decoration: none;
    color: #333;
    }

    nav ul li .sous {
    display: none;
    position: absolute;
    top: 100%;
    left: 0;
    width: 100%;
    }

    nav ul li:hover .sous {
    display: block;
    }

    nav ul li .sous li {
    display: block;
    padding: 1rem;
    background-color: rgb(255,255,94);
    } 
nav ul li .sous li a {
    color: #333;
    }

@media screen and (max-width: 900px){
  .logo{
    float: center;
    margin-top: 1.5rem;
    }
  .menu{
    display: block;
    position: fixed;
    width: 3rem;
    height: 3rem;
    top: 3rem;
    right: 3rem;
    z-index: 999;
    cursor: pointer;
  }

  .bar,
  .bar::before,
  .bar::after{
    position: absolute;
    background-color: rgb(131, 131, 131);
    margin: auto;
    width: 100%;
    height: 3px;
    content: "";
    top: 50%;
    left: 0;
    transition: all .4s;
  }

  .bar{
    margin-top: -2px;
  }

  .bar::before{
    top: -1.2rem;
  }

  .bar::after{
    top: 1.2rem;
  }

  .bar::before,
  .bar::after{
    transform: rotate(0deg);
  }

  .active .bar{
    background-color: transparent;
  }

  .active .bar::before{
    transform: rotate(45deg);
  }

  .active .bar::after{
    transform: rotate(-45deg);
  }

  .active .bar::before,
  .active .bar::after{
   top: 0;
  }

  nav{
    width: 25rem;
    height: 100%;
    background-color: rgb(255, 255, 94);
    position: fixed;
    transform: translateX(-50rem);
    z-index: 998;
    line-height: 1;
    font-size: 2.5rem;
    transition: transform .6s cubic-bezier(0.56, 0.1, 0.34, 0.91);
  }
  .menu-open nav{
    transform: translateX(0);
  }
  nav ul{
    width: 100%;
    text-align: center;
    padding-top: 10rem;
  }
  nav ul li{
    display: block;
    padding: 2rem 1rem;
}
}

Quelques remarques quand même. N'oublie pas de mettre des commentaires entre /* et */, pour corriger ce sera plus simple y compris pour toi !
Cdlt !


0