2012-08-09 19 views
11

Estoy utilizando el menú desplegable superfish con skelton framework. Yo también quería que funcionara en móviles. De forma predeterminada muestra los elementos desplegables, pero se desplaza sobre los elementos debajo de él. Quiero tenerlo de una manera para que empuje los elementos principales debajo de él. ¿Alguna solución?¿Cómo hacer que el menú desplegable de Superfish sea receptivo?

Respuesta

8

Actualización: ver la respuesta por Ryan Brackett

Menús desplegables no funcionan bien en el móvil. Sugiero esconder el menú superfish en el móvil y reemplazarlo por otra cosa.

Recursos: Verano

http://www.lukew.com/ff/entry.asp?1569

http://www.zurb.com/playground/off-canvas-layouts

patrones de navegación móvil

http://bradfrostweb.com/blog/web/responsive-nav-patterns/

Para otros que buscan una solución, asegúrese de estar utilizando el jQuery más nuevo. Tenía algunos sitios más antiguos en los que descubrí que el uso de una versión más reciente de jQuery hacía que los menús de Superfish funcionaran en dispositivos móviles.

29

Aquí una respuesta mejor

yo era capaz de convertir el mismo HTML para Superfish en un cajón menú sensible. El JS es ultra simple y todo se hace básicamente usando CSS. ¡Compruébalo y hazme saber lo que piensan!

// TRIGGER ACTIVE STATE 
 
$('#mobnav-btn').click(
 

 
    function() { 
 
    $('.sf-menu').toggleClass("xactive"); 
 
    }); 
 

 

 

 
// TRIGGER DROP DOWN SUBS 
 
$('.mobnav-subarrow').click(
 

 
    function() { 
 
    $(this).parent().toggleClass("xpopdrop"); 
 
    });
body { 
 
    font-family: Arial; 
 
    font-size: 12px; 
 
    padding: 20px; 
 
} 
 
#mobnav-btn { 
 
    display: none; 
 
    font-size: 20px; 
 
    font-weight: bold; 
 
    background-color: blue; 
 
    color: white; 
 
    padding: 10px; 
 
    cursor: pointer; 
 
} 
 
.mobnav-subarrow { 
 
    display: none; 
 
} 
 
@media only screen and (max-width: 480px) { 
 
    #mobnav-btn { 
 
    display: block; 
 
    } 
 
    .mobnav-subarrow { 
 
    display: block; 
 
    background-color: #0f3975; 
 
    opacity: .3; 
 
    border-bottom: 1px solid white; 
 
    border-top: 1px solid black; 
 
    height: 20px; 
 
    width: 30px; 
 
    background-position: top left!important; 
 
    position: absolute; 
 
    top: 8px; 
 
    right: 10px; 
 
    -webkit-border-radius: 5px; 
 
    border-radius: 5px; 
 
    cursor: pointer; 
 
    -webkit-border-radius: 5px; 
 
    border-radius: 5px; 
 
    cursor: pointer; 
 
    -webkit-transition: all .1s ease-in-out; 
 
    -moz-transition: all .1s ease-in-out; 
 
    -ms-transition: all .1s ease-in-out; 
 
    -o-transition: all .1s ease-in-out; 
 
    transition: all .1s ease-in-out; 
 
    } 
 
    .sf-menu { 
 
    width: 100%!important; 
 
    display: none; 
 
    } 
 
    .sf-menu.xactive { 
 
    display: block!important; 
 
    } 
 
    .sf-menu li { 
 
    float: none!important; 
 
    display: block!important; 
 
    width: 100%!important; 
 
    } 
 
    .sf-menu li a { 
 
    float: none!important; 
 
    } 
 
    .sf-menu ul { 
 
    position: static!important; 
 
    display: none!important; 
 
    } 
 
    .xpopdrop ul { 
 
    display: block!important; 
 
    } 
 
}
<script src="http://code.jquery.com/jquery-compat-git.js"></script> 
 
<script src="http://users.tpg.com.au/j_birch/plugins/superfish/js/superfish.js"></script> 
 
<link href="http://users.tpg.com.au/j_birch/plugins/superfish/css/superfish.css" rel="stylesheet" /> 
 
<small>This is a responsive Superfish Menu by <a href="mailto:[email protected]">Ryan Brackett</a>. <br/> 
 
    <br/>In this demo, you can drag the middle bar to see the responsive menu. I have already included the default css and js files for Superfish</small> 
 

 
<br/> 
 
<br/> 
 
<div id="mobnav-btn">Button</div> 
 
<ul class="sf-menu"> 
 
    <li><a href="#">Item 1</a> 
 

 
    <div class="mobnav-subarrow"></div> 
 
    <ul> 
 
     <li><a href="#">Subitem 1.1</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 1.2</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 1.3</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 1.4</a> 
 

 
     </li> 
 
    </ul> 
 
    </li> 
 
    <li><a href="#">Item 2</a> 
 

 
    <div class="mobnav-subarrow"></div> 
 
    <ul> 
 
     <li><a href="#">Subitem 2.1</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 2.2</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 2.3</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 2.4</a> 
 

 
     </li> 
 
    </ul> 
 
    </li> 
 
    <li><a href="#">Item 3</a> 
 

 
    <div class="mobnav-subarrow"></div> 
 
    <ul> 
 
     <li><a href="#">Subitem 3.1</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 3.2</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 3.3</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 3.4</a> 
 

 
     </li> 
 
    </ul> 
 
    </li> 
 
    <li><a href="#">Item 4</a> 
 

 
    <div class="mobnav-subarrow"></div> 
 
    <ul> 
 
     <li><a href="#">Subitem 4.1</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 4.2</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 4.3</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 4.4</a> 
 

 
     </li> 
 
    </ul> 
 
    </li> 
 
    <li><a href="#">Item 5</a> 
 

 
    <div class="mobnav-subarrow"></div> 
 
    <ul> 
 
     <li><a href="#">Subitem 5.1</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 5.2</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 5.3</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 5.4</a> 
 

 
     </li> 
 
    </ul> 
 
    </li> 
 
    <li><a href="#">Item 6</a> 
 

 
    <div class="mobnav-subarrow"></div> 
 
    <ul> 
 
     <li><a href="#">Subitem 6.1</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 6.2</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 6.3</a> 
 

 
     </li> 
 
     <li><a href="#">Subitem 6.4</a> 
 

 
     </li> 
 
    </ul> 
 
    </li> 
 
</ul>

+1

buen ejemplo. Actualicé mi respuesta a los usuarios directos aquí. –

+0

¿Es posible usar 3 capas para el menú en lugar de 2? – Reshad

0

Esto es lo que yo uso:

isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); 

$(".menu a").click(function(event){ 
     if($(this).parents("ul").length == 1 && !$(this).hasClass("lastClick") && isMobile) 
      event.preventDefault();  

     $(".menu a").removeClass("lastClick"); 
     $(this).addClass("lastClick"); 
    }); 

reemplazar ".menu a" con sus enlaces de navegación y este fragmento el usuario se desplazará al sitio se hace clic después de la segunda haga clic y el primer clic solo le mostrará las subpáginas.

+0

Hola hombre, ¿puedes JSfiddle esto para nosotros? –

0

Reshad: Simplemente cambiar el CSS como esto:

.xpopdrop > ul { 
 
     display: block!important; 
 
}

Y que va a estar bien.

1

Como señaló Ed, parece problemático resolver todos los diferentes problemas de superfish/css para un menú receptivo.

Después de ver las opciones aquí y en todas partes, encontré un menú de respuesta Pure CSS que ha sido más rápido y más fácil de modificar que superfish, y no tiene los gastos generales de jquery o javascript. También tiene menús de segundo nivel.

Comprobé the demo con screenfly para comprobar la capacidad de respuesta y el diseño móvil antes de usarlo. La versión de CSSscript.com (enlace arriba) ofrece un diseño receptivo horizontal para móviles, a diferencia de la página de demostración del codepen.

Pure Responsive CSS menu

mobile view from screenfly, 320px wide

El código está en un solo archivo HTML que se puede fácilmente dividir en un archivo CSS vinculado, sólo 2 preguntas de los medios gestionar los cambios de respuesta e incluso entonces sólo con cambios mínimos. Los símbolos '+' se pueden eliminar sin problemas.

Solo una pequeña desventaja: el primer enlace descarga un HTML tiene un javascript en la parte inferior que agrega un seguimiento obvio de Google Analytics, se elimina fácilmente y no en el codepen.

Explanationauthor andor nagy - code from codepen

/* CSS Document */ 
 

 
@import url(http://fonts.googleapis.com/css?family=Open+Sans); 
 
@import url(http://fonts.googleapis.com/css?family=Bree+Serif); 
 

 
body { 
 
\t background: #212121; 
 
\t font-size:22px; 
 
\t line-height: 32px; 
 
\t color: #ffffff; 
 
\t word-wrap:break-word !important; 
 
\t font-family: 'Open Sans', sans-serif; 
 
\t } 
 

 
h1 { 
 
\t font-size: 60px; 
 
\t text-align: center; 
 
\t color: #FFF; 
 
} \t 
 

 
h3 { 
 
\t font-size: 30px; 
 
\t text-align: center; 
 
\t color: #FFF; 
 
} 
 

 
h3 a { 
 
\t color: #FFF; 
 
} 
 

 
a { 
 
\t color: #FFF; 
 
} 
 

 
h1 { 
 
\t margin-top: 100px; 
 
\t text-align:center; 
 
\t font-size:60px; 
 
\t font-family: 'Bree Serif', 'serif'; 
 
\t } 
 

 
#container { 
 
\t margin: 0 auto; 
 
\t max-width: 890px; 
 
} 
 

 
p { 
 
\t text-align: center; 
 
} 
 

 
#relatedContent { 
 
    max-width: 800px; 
 
    margin: 200px auto; 
 
} 
 

 
#relatedContent .item { 
 
    max-width: 44%; 
 
    padding: 3%; 
 
    float: left; 
 
    text-align: center; 
 
} 
 

 
#relatedContent .item a img { 
 
    max-width: 100%; 
 
} \t 
 

 
nav { 
 
\t margin: 50px 0; 
 
\t background-color: #E64A19; 
 
} 
 

 
nav ul { 
 
\t padding:0; 
 
\t margin:0; 
 
\t list-style: none; 
 
\t position: relative; 
 
\t } 
 
\t 
 
nav ul li { 
 
\t display:inline-block; 
 
\t background-color: #E64A19; 
 
\t } 
 

 
nav a { 
 
\t display:block; 
 
\t padding:0 10px; \t 
 
\t color:#FFF; 
 
\t font-size:20px; 
 
\t line-height: 60px; 
 
\t text-decoration:none; 
 
} 
 

 
nav a:hover { 
 
\t background-color: #000000; 
 
} 
 

 
/* Hide Dropdowns by Default */ 
 
nav ul ul { 
 
\t display: none; 
 
\t position: absolute; 
 
\t top: 60px; 
 
} 
 
\t 
 
/* Display Dropdowns on Hover */ 
 
nav ul li:hover > ul { 
 
\t display:inherit; 
 
} 
 
\t 
 
/* Fisrt Tier Dropdown */ 
 
nav ul ul li { 
 
\t width:170px; 
 
\t float:none; 
 
\t display:list-item; 
 
\t position: relative; 
 
} 
 

 
/* Second, Third and more Tiers \t */ 
 
nav ul ul ul li { 
 
\t position: relative; 
 
\t top:-60px; 
 
\t left:170px; 
 
} 
 

 
\t 
 
/* Change this in order to change the Dropdown symbol */ 
 
li > a:after { content: ' +'; } 
 
li > a:only-child:after { content: ''; }
<div id="container"> 
 
    <nav> 
 
     <ul> 
 
      <li><a href="#">Home</a></li> 
 
      <li><a href="#">WordPress</a> 
 
      <!-- First Tier Drop Down --> 
 
      <ul> 
 
       <li><a href="#">Themes</a></li> 
 
       <li><a href="#">Plugins</a></li> 
 
       <li><a href="#">Tutorials</a></li> 
 
      </ul>   
 
      </li> 
 
      <li><a href="#">Web Design</a> 
 
      <!-- First Tier Drop Down --> 
 
      <ul> 
 
       <li><a href="#">Resources</a></li> 
 
       <li><a href="#">Links</a></li> 
 
       <li><a href="#">Tutorials</a> 
 
      \t <!-- Second Tier Drop Down --> 
 
       <ul> 
 
        <li><a href="#">HTML/CSS</a></li> 
 
        <li><a href="#">jQuery</a></li> 
 
        <li><a href="#">Other</a> 
 
         <!-- Third Tier Drop Down --> 
 
         <ul> 
 
          <li><a href="#">Stuff</a></li> 
 
          <li><a href="#">Things</a></li> 
 
          <li><a href="#">Other Stuff</a></li> 
 
         </ul> 
 
        </li> 
 
       </ul> 
 
       </li> 
 
      </ul> 
 
      </li> 
 
      <li><a href="#">Graphic Design</a></li> 
 
      <li><a href="#">Inspiration</a></li> 
 
      <li><a href="#">Contact</a></li> 
 
      <li><a href="#">About</a></li> 
 
     </ul> 
 
    </nav> 
 
    <h1>Pure CSS Drop Down Menu</h1> 
 
<p> A simple dropdown navigation menu made with CSS Only. Dropdowns are marked with a plus sign (+)</p> 
 
<p>Read tutorial <a target="_blank" href="http://webdesignerhut.com/css-dropdown-menu/">here</a></p> 
 
</div>

+0

Esto no entiende el punto del menú de Superfish, que a su vez comienza desde un menú desplegable de "CSS puro" y lo mejora. – DisgruntledGoat

+0

debe incluir el css y html de la demostración con un diseño receptivo funcional. No es el códec que no responde – Toskan

+0

Gracias por la información, simplemente respondiendo a la pregunta específica sobre Superfish. –

Cuestiones relacionadas