Menu déroulant responsive

Menu déroulant responsive - HTML/CSS - Programmation

Marsh Posté le 16-12-2021 à 14:18:44    

Bonjour,
J'ai trouvé un exemple de menu déroulant responsive qui me convient.
J'essaie toutefois de l'aménager de façon que les sous-menus apparaissent au survol de la souris (j'ai trouvé comment faire avec le :hover)
Ce que je ne comprends pas c'est pourquoi je ne peux accéder au sous-menu, il ne reste pas affiché...
J'essaie de trouver l'instruction qui me me permettrait de laisser le sous menu affiché mais je suis loin d'être à l'aise avec le css, alors je vous remercie d'avance pour vos conseils
Le code du menu :

Code :
  1. <nav class="nav">
  2.   <input class="chk-nav" type="checkbox" id="btn-navbar" />
  3.   <label for="btn-navbar"><i class="fa fa-bars"></i></label>
  4.  
  5.   <ul class="navbar">
  6.     <li><a href="#"><i class="fa fa-home"></i>Inicio</a></li>
  7.     <li>
  8.         <label class="lbl-nav" for="btn-subnav1">
  9.           <i class="fa fa-user"></i>Cursos
  10.         </label>
  11.         <input class="chk-nav" type="checkbox" id="btn-subnav1"/>
  12.      
  13.         <ul class="sub-nav">
  14.           <li><a href="#">Excel básico</a></li>
  15.           <li><a href="#">Diseño web</a></li>
  16.           <li><a href="#">Computación básica</a></li>
  17.           <li><a href="#">Fundamentos de programación</a></li>
  18.         </ul>
  19.              
  20.     </li>
  21.     <li>
  22.         <label class="lbl-nav" for="btn-subnav2">
  23.              <i class="fa fa-info-circle"></i>Nosotros
  24.         </label>
  25.         <input class="chk-nav" type="checkbox" id="btn-subnav2" />
  26.        
  27.         <ul class="sub-nav">
  28.             <li><a href="#una">Historia</a></li>
  29.             <li><a href="#">Servicios</a></li>
  30.         </ul>
  31.     </li>
  32.     <li><a href="#"><i class="fa fa-envelope"></i>Contáctenos</a></li>
  33.   </ul>
  34.  
  35. </nav>


Voici le code CSS

Code :
  1. /*_________________________________________________________________
  2.  
  3.        $VARIBLES PARA COLORES  
  4. ____________________________________________________________________*/
  5. body {
  6.   font-family: 'Lato', sans-serif;
  7.   font-size: 100%;
  8.   background-color: #151515;
  9. }
  10. /*_________________________________________________________________
  11.  
  12.        $RESET
  13. ____________________________________________________________________*/
  14. *, *:before, *:after {
  15.   margin: 0;
  16.   padding: 0;
  17.   box-sizing: border-box;
  18. }
  19. /*_________________________________________________________________
  20.  
  21.        $ESTILOS GENERALES  
  22. ____________________________________________________________________*/
  23. ul {
  24.   list-style-type: none;
  25. }
  26. a, label {
  27.   display: block;
  28.   font-size: 1.25rem;
  29.   text-decoration: none;
  30.   color: #E5E5E5;
  31.   padding: 1rem 1rem 1rem 3rem;
  32.   cursor: pointer;
  33.   transition: all .3s ease;
  34.   border-left: 4px solid rgba(255, 255, 255, 0);
  35. }
  36. a:hover, label:hover {
  37.   color: #FFB503;
  38.   border-left: 4px solid #ffbc1d;
  39. }
  40. .chk-nav {
  41.   display: none;
  42. }
  43. /*_________________________________________________________________
  44.  
  45.        $NAV <nav class"nav"></nav>
  46. ____________________________________________________________________*/
  47. .nav {
  48.   width: 100%;
  49.   position: fixed;
  50.   z-index: 10;
  51. }
  52. /*_________________________________________________________________
  53.  
  54.        $NAVBAR <ul class"nav-bar"></ul>  
  55. ____________________________________________________________________*/
  56. .navbar {
  57.   width: 50%;
  58. }
  59. .navbar .sub-nav {
  60.   display: block;
  61. }
  62. .sub-nav a {
  63.   padding-left: 2rem;
  64.   font-size: 1rem;
  65. }
  66. .navbar > li {
  67.   border-top: 1px solid rgba(255, 255, 255, 0.2);
  68.   position: relative;
  69. }
  70. /*_________________________________________________________________
  71.  
  72. $ESTILOS PARA MODIFICAR EL LABEL SECUNDARIO DEL SUBMENU
  73. ____________________________________________________________________*/
  74. .navbar .fa {
  75.   position: absolute;
  76.   left: 1rem;
  77. }
  78. .lbl-nav:after {
  79.   content: "\25BC";
  80.   font-size: 1rem;
  81.   position: absolute;
  82.   width: 100%;
  83.   text-align: right;
  84.   left: 0;
  85.   padding-right: .75rem;
  86.   line-height: 1.5rem;
  87. }
  88. /*_________________________________________________________________
  89.  
  90. $ESTILOS PARA MODIFICAR EL LABEL PRINCIPAL O ICONO DE HAMBURGUESA
  91. ____________________________________________________________________*/
  92. label[for="btn-navbar"] {
  93.   padding: .5rem 1rem .5rem 1rem;
  94.   font-size: 2rem;
  95.   text-align: left;
  96.   color: #E5E5E5;
  97.   background-color: #252525;
  98. }
  99. label[for="btn-navbar"]:hover {
  100.   color: #E5E5E5;
  101.   border-left: 4px solid rgba(0, 0, 0, 0);
  102. }
  103. /*_________________________________________________________________
  104.  
  105. $ESTILOS PARA ESCONDER LA LISTA PRINCIPAL DEL MENU
  106. ____________________________________________________________________*/
  107. .navbar {
  108.   margin-left: -100%;
  109.   height: 100vh;
  110.   transition: all .5s ease;
  111.   background-color: #252525;
  112. }
  113. .chk-nav:checked ~ .navbar {
  114.   margin-left: 0;
  115. }
  116. /*_________________________________________________________________
  117.  
  118. $ESTILOS PARA ESCONDER LOS SUBMENUS  
  119. ____________________________________________________________________*/
  120. .navbar .sub-nav {
  121.   display: none;
  122. }
  123. .chk-nav:checked ~ .sub-nav {
  124.   display: block;
  125. }
  126. /*_________________________________________________________________
  127.  
  128.         $ESTILOS PARA DESKTOP MEDIAQUERYS
  129. ____________________________________________________________________**/
  130. @media all and (min-width: 48rem) {
  131.   a, label {
  132.  display: block;
  133.  padding: 1rem 1.25rem;
  134.  border-right: 1px solid rgba(255, 255, 255, 0.2);
  135.   }
  136. /*_________________________________________________________________
  137.  
  138.    $ESTILOS PARA NAVBAR  
  139. ____________________________________________________________________*/
  140.   .navbar {
  141.  max-width: 1200px;
  142.  width: 100%;
  143.  height: auto;
  144.  display: table;
  145.  table-layout: fixed;
  146.  margin: auto;
  147.   }
  148.   .navbar > li {
  149.  display: table-cell;
  150.   }
  151.   .chk-nav:checked ~ .navbar {
  152.  margin: auto;
  153.   }
  154. /*_________________________________________________________________
  155.  
  156.    $ESTILOS PARA ESCONDER EL ICONO DE HAMBURGUESA
  157. ____________________________________________________________________*/
  158.   label[for="btn-navbar"] {
  159.  display: none;
  160.   }
  161. /*_________________________________________________________________
  162.  
  163.     $ESTILOS PARA el SUBMENU  
  164. ____________________________________________________________________*/
  165.   .navbar .sub-nav {
  166.  display: none;
  167.   }
  168.   .navbar > ul > li {
  169.  postion: relative;
  170.   }
  171.   .chk-nav:checked ~ .sub-nav {
  172.  display: block;
  173.   }
  174. /**/
  175.   .navbar > li > a:hover, label:hover ~ .sub-nav {
  176.    display: block;
  177.   }
  178.  
  179. /**/
  180.   .navbar .sub-nav {
  181.  width: 100%;
  182.  background-color: #222;
  183.  position: absolute;
  184.   }
  185.   .sub-nav a {
  186.  font-size: 1rem;
  187.  border-top: 1px solid rgba(255, 255, 255, 0.2);
  188.   }
  189. /*_________________________________________________________________
  190.  
  191.       $ESTILOS PARA LOS ICONOS
  192. ____________________________________________________________________*/
  193.   .navbar .fa {
  194.  position: static;
  195.  padding-right: .3rem;
  196.   }
  197.   .lbl-nav:after {
  198.  top: 0;
  199.  height: 100%;
  200.  line-height: 3.5rem;
  201.   }
  202. /*_________________________________________________________________
  203.  
  204.       $ESTILOS PARA EL MENU PRINCIPAL
  205. ____________________________________________________________________*/
  206.   .navbar > li {
  207.  position: relative;
  208.  border-top: 4px solid #FFB503;
  209.   }
  210.   .navbar > li > a:hover, label:hover {
  211.  border-left: 4px solid rgba(0, 0, 0, 0);
  212.   }
  213. }
  214. /*_________________________________________________________________
  215.  
  216.   $ESTILOS PARA EL SECTION  ESTO NO TIENE NADA QUE VER CON EL MENU
  217. ____________________________________________________________________*/
  218. section {
  219.   width: 90%;
  220.   padding: 3.5rem;
  221.   margin: auto;
  222.   color: #E5E5E5;
  223.   text-align: center;
  224.   transition: all .4s ease;
  225. }
  226. section small {
  227.   display: block;
  228.   padding-bottom: 1rem;
  229.   font-size: 1rem;
  230. }
  231. section span {
  232.   color: red;
  233.   font-size: 1.5rem;
  234. }

Reply

Marsh Posté le 16-12-2021 à 14:18:44   

Reply

Marsh Posté le 16-12-2021 à 14:34:17    

Dans cette technique de menu déroulant, ils ont fait le choix du full css (sans javascript) avec l'usage d'un label, d'un input checkbox hidden et de la règle suivante :

Code :
  1. .chk-nav:checked ~ .sub-nav {
  2. display: block;
  3.   }


C'est de plus en plus fréquent puisque les navigateurs sont de plus en plus souvent en mode tactile et que dans ce cas le survol de souris n'a pas de sens.
 
Dans le cas de ce menu, pas de clic, pas de dépliage mais tu dois pouvoir faire un règle genre :

Code :
  1. ul.navbar > li:hover ul.sub-nav {
  2. display: block;
  3.   }


 
Par contre ça fonctionnera pas sur les (très) vieux navigateur, il fut un temps ou :hover ne fonctionnait que sur les balises a...


---------------
D3
Reply

Marsh Posté le 16-12-2021 à 15:08:40    

Bonjour,
Merci pour ton conseil, le bout de code fonctionne !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed