Ver Mensaje Individual
  #4 (permalink)  
Antiguo 22/06/2015, 11:41
Avatar de fede5426
fede5426
 
Fecha de Ingreso: diciembre-2014
Ubicación: Córdoba
Mensajes: 446
Antigüedad: 9 años, 11 meses
Puntos: 208
Respuesta: ¿Algún buen tutorial de menú para móviles?

Hola Jorge, no se si existe tal tutorial ya que lo más lógico normalmente es hacerlo con javascript. A demás CSS no consta de eventos, crear un efecto "toggle" de menú para móviles puede ser complicado.. Pero yo conozco una forma que puede servirte, y es usando la propiedad :checked de los input de tipo checkbox.

Crear la barra de navegación adaptable para maquinas de escritorio o notebooks es simple, imagino que ya lo sabes, no es cosa de otro mundo. Y para que en móviles cambie de forma la lista se usan media queries, indicar que a determinada resolución cambien sus propiedades (como vas a ver en el ejemplo que voy a dejar más abajo), en mi caso cambio de lista horizontal a vertical modificando la propiedad display, cambio su position a absolute, y la oculto a la izquierda para luego hacerla aparecer clickeando el típico botón de menú (en este caso, el checkbox).

Para lograr el efecto toggle (toque para abrir y toque para cerrar) como dije una forma es usar un checkbox aprovechando la propiedad :checked de CSS3.

A ver si puedo explicarme mejor antes de dejar el ejemplo, la idea es básicamente crear un input type="checkbox" y ocultarlo con display:none; Seguido del input, su perteneciente label, a éste label le vamos a dar los estilos que querramos que tenga el botón. Por debajo, la lista del menú de navegación. Lo último que necesitamos hacer es indicar que cuando el checkbox este tildado (:checked) su hermano (~ ul) cambie su propiedad left a 0 para que aparezca desde la izquierda. Se pueden usar varios métodos de aparición, desde diferentes posiciones o cambiando su display para que aparezca sin más..

Hay otra forma de hacer aparecer la lista, que es usando :focus en un elemento, por ejemplo en un enlace que contenga la imagen de menú o la palabra MENÚ o lo que sea, al clickearlo toma el foco y se despliega el elemento. La contra de este método es que para cerrarlo no funciona si lo clickeamos nuevamente porque mantiene el foco, la única forma es clickear/tocar fuera del elemento. Por eso no la veo tan viable como la que acabo de explicar.

En fin, dejo el código por acá abajo y un codepen funcionando para que lo revises. Espero haberme explicado bien y que te sea útil.


Código HTML:
Ver original
  1. <nav>
  2.    <input type="checkbox" id="boton" />
  3.    <label for="boton"><span></span> </label>
  4.    <ul>
  5.       <li><a href="#">Home</a></li>
  6.       <li><a href="#">About</a></li>
  7.       <li><a href="#">Clients</a></li>
  8.       <li><a href="#">Contact Us</a></li>
  9.    </ul>
  10. </nav>

Código CSS:
Ver original
  1. body{
  2.     margin:0;
  3.     padding:0;
  4. }
  5.  
  6. nav{
  7.     width:100%;
  8.     background-color:#A32600;
  9.     padding:.5em;
  10.     min-height:45px;
  11.     position:relative;
  12.     border-bottom:1px solid #ccc;
  13. }
  14.  
  15. ul{
  16.     background-color:#A32600;
  17. }
  18.  
  19. li{
  20.     display:inline-block;
  21. }
  22.  
  23. li a{
  24.     color:#ccc;
  25.     font-family:Verdana;
  26.     padding:1em 1em;
  27.     text-decoration:none;
  28. }
  29.  
  30. li a:hover{
  31.     background-color:#161616;  
  32. }
  33.  
  34. #boton{
  35.     display:none
  36. }
  37.  
  38. label span{
  39.     background-image:url("http://i.imgur.com/NN6xrxu.png");
  40.     background-size:100%;
  41.     width:35px;
  42.     height:35px;
  43.     display:none;
  44.     cursor:pointer;
  45. }
  46.  
  47. @media screen and (max-width:480px){
  48.    
  49.     ul{
  50.         position:absolute;
  51.         top:100%;
  52.         left:-100%;
  53.         width:75%;
  54.         margin:0;
  55.         padding:0;
  56.         background-color:#D63200;
  57.         -webkit-transition:left .3s linear;
  58.         -moz-transition:left .3s linear;
  59.         -ms-transition:left .3s linear;
  60.         -o-transition:left .3s linear;
  61.         transition:left .3s linear;
  62.     }
  63.    
  64.     li{
  65.         display:block;
  66.         border-bottom:1px solid #ccc;
  67.     }
  68.  
  69.     li a{
  70.         display:block;
  71.     }
  72.    
  73.     label span{
  74.         display:block;
  75.     }
  76.    
  77.     #boton:checked ~ ul{
  78.         left:0;
  79.     }
  80. }


http://codepen.io/fede5426/pen/WvXeoG

Saludos