Foros del Web » Creando para Internet » CSS »

persistencia para que no se cierre menu desplegable al seleccionar un input text

Estas en el tema de persistencia para que no se cierre menu desplegable al seleccionar un input text en el foro de CSS en Foros del Web. hola amigos tengo un menu desplegable que se despliega al hacer click y se mantiene abierto hasta clickear fuera de el. el problema es que ...
  #1 (permalink)  
Antiguo 18/10/2011, 13:44
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 14 años, 3 meses
Puntos: 0
persistencia para que no se cierre menu desplegable al seleccionar un input text

hola amigos tengo un menu desplegable que se despliega al hacer click y se mantiene abierto hasta clickear fuera de el. el problema es que cuando introduzco un input text dentro de ese menu desplegable al intentar seleccionar el input para escribir algo dentro de el se me cierra y no tengo idea de por que!

aqui un poco de codigo CSS

Código CSS:
Ver original
  1. body{
  2.   margin:0;
  3.   padding:<length> 0 0 0;
  4.   background:#F0F0F0;
  5.  }
  6.  
  7.  @media screen{
  8.   body>div#top-bar-bg{
  9.    position: fixed;
  10.   }
  11.  }
  12.  * html body{
  13.   overflow:hidden;
  14.  }
  15.  * html div#contentfoot{
  16.   height:100%;
  17.   overflow:auto;
  18.   }
  19. #top-bar-bg{
  20.         position: absolute;
  21.         display:inline-block;
  22.         margin-top: 0px;
  23.         margin-left: 0px;
  24.         margin-right: 0px;
  25.         background-color:#96CE42;
  26.         height: 40px;
  27.         width: 100%;
  28.         box-shadow: 2px 2px 5px #999;
  29.         z-index:50;
  30.        
  31.            
  32. }
  33.  
  34.  
  35.  
  36. #top-bar-menu{
  37.         position: relative;
  38.         margin: 0 auto 0 auto;
  39.         width: 1000px;
  40.         height: 40px;
  41.                    
  42. }
  43.  
  44.  
  45. #down-arrow{
  46.         position: relative;
  47.         float:right;
  48.         margin-top: 8px;
  49.         margin-right:-10px;
  50.         width:7px;
  51.         height:4px;
  52.         background-image:url(../../images/top-bar/down-arrow.gif);
  53.        
  54.        
  55.  
  56. }
  57.  
  58. #menu-wrapper ul{
  59.         padding:0;
  60.         list-style:none;   
  61.         margin-top:0px;
  62.         float:right;
  63.         overflow:auto;
  64.         margin-right:10px;
  65.        
  66.        
  67.        
  68. }
  69.  
  70. #hmenu > li{
  71.         display:inline-block;
  72.         font-family:Myriad pro,Verdana, Geneva, sans-serif;
  73.         text-align:center;
  74.         height:40px;   
  75.         padding-left:5px;
  76.         padding-right:5px;
  77.         cursor:pointer;
  78.         overflow:auto;
  79.        
  80.        
  81.        
  82.        
  83.        
  84.        
  85.  
  86. }
  87.  
  88. #hmenu > li:hover{
  89.         background-color:#AAEA71;  
  90.        
  91.     }
  92.    
  93. #hmenu > li:active{
  94.         background-color:#AAEA71;  
  95.    
  96.     }
  97.    
  98.     #hmenu > li:focus{
  99.         background-color:#AAEA71;  
  100.    
  101.     }
  102.  
  103.  
  104. #hmenu > li > a{
  105.         display:block; 
  106.         padding: 10px 5px;
  107.         padding-left:5px;
  108.         padding-right:5px;
  109.         width: auto;
  110.         text-decoration:none;
  111.         color:#FFF;
  112.         font-size:15px;
  113.        
  114.  
  115.        
  116. }
  117.  
  118. li ul{
  119.         position:absolute;
  120.         display:none;  
  121.            
  122.            
  123. }
  124.  
  125. .sub-menu a{
  126.         display:block;
  127.         visibility:visible;
  128.         padding:9px 5px;
  129.         width:130px;
  130.         color:#FFF;
  131.         text-decoration:none;
  132.         text-align:left;
  133.         padding-left:10px;
  134.         font-size:15px;
  135.         margin-right:0px;          
  136. }
  137.  
  138. #sub-menu{
  139.         border-radius:5px;
  140.         background-color:#E9E9E9;
  141.         border:2px solid #999;
  142.         height:20px;
  143. }
  144.  
  145. #sub-menu:hover{
  146.         background-color:#FFF;
  147.        
  148. }
  149.  
  150. #sub-menu:focus{
  151.         border-radius:5px;
  152.         border:2px solid #F90;
  153.         background-color:#FFF;
  154.        
  155. }
  156.  
  157. .sub-menu{
  158.  
  159.         margin-left:-5px;
  160.         -moz-border-radius-bottomright: 10px;
  161.         -moz-border-radius-bottomleft: 10px; /* Firefox*/
  162.         -webkit-border-bottom-right-radius: 10px;
  163.         -webkit-border-bottom-left-radius: 10px;
  164.         border-bottom-right-radius: 10px;
  165.         border-bottom-left-radius: 10px;   
  166.         z-index:100;   
  167.        
  168.        
  169.            
  170. }
  171. .sub-menu a:hover{
  172.    
  173.         background-color:#96CE42;      
  174.         border-bottom-right-radius: 10px;
  175.         border-bottom-left-radius: 10px;
  176.         z-index:100;
  177.        
  178. }
  179.  
  180.  
  181.  
  182.  
  183. #menu-wrapper li ul{
  184.         background-color:#AAEA71;
  185.         padding-left: 10px;
  186.         padding-right: 10px;
  187.        
  188.        
  189.        
  190.        
  191.                        
  192. }
  193.  
  194. #menu-wrapper ul li:focus ul, #menu-wrapper ul li:active ul  {
  195.         background-color:#AAEA71;
  196.         display: block;
  197.        
  198.                        
  199. }

asi es el menu en HTML en donde vean el input text es ahi el lugar donde es el problema son dos inputs los unicos y el boton de envio


Código HTML:
Ver original
  1. <div id="top-bar-bg">
  2.  <div id="contentfoot">
  3.  <div id="top-bar-menu">
  4.  
  5.    
  6.     <div id="menu-wrapper-log">
  7.  
  8.         <ul id="hmenu-log">
  9.           <li>
  10.             <a href="#">&nbsp;<div id="down-arrow-log"></div>
  11.          
  12.     </a>
  13.    <ul class="sub-menu-log">
  14.            
  15.                     <li><a href="index.php">Inicio</a></li>
  16.                      <li><a href="acercade.php">Acerca de</a></li>
  17.                     <li><a target="_blank" href="http://twitter.com/sprogramadores">Twitter</a></li>
  18.                     <li><a target="_blank" href="http://www.facebook.com/somosprogramadores">Facebook</a></li>
  19.                     <li><a target="_blank" href="http://www.youtube.com/somosprogramadores">Youtube</a></li>
  20.                    
  21.                     </ul>
  22.                 </li>
  23.                 </ul>
  24.                 </div>
  25.        
  26.     <div id="menu-wrapper">
  27.  
  28.         <ul id="hmenu">
  29.  
  30.           <li tabindex="1"><a>Inicia&nbsp;Sesión<div id="down-arrow"></div>
  31.           </a>
  32.          
  33.                 <ul class="sub-menu">
  34.                 <br />
  35.             <input id="sub-menu" type="text" name="username" /><br /><br />
  36.             <input id="sub-menu" type="password" name="username" /><br /><br />
  37.            
  38.             <input type="submit" value="Ingresar" />
  39.                    
  40.                     </ul>
  41.                 </li>
  42.        
  43.           <li tabindex="2"><a>¡Regístrate!<div id="down-arrow">
  44.              </div>
  45.           </a>
  46.              
  47.              
  48.                 <ul class="sub-menu">
  49.            
  50.                     <li><a href="#">prueba!</a></li>
  51.                     <li><a href="#">probandito</a></li>
  52.                    
  53.                     </ul>
  54.                 </li>
  55.                
  56.                
  57.                 <li><a>Videotutoriales</a></li>
  58.        
  59.                 <li><a>Artículos</a></li>
  60.        
  61.                 <li><a>Noticias</a></li>
  62.        
  63.                 <li><a>Inicio</a></li>
  64. </ul>
  65. </div>
  66. </div></div></div>
  67. </div>
  #2 (permalink)  
Antiguo 18/10/2011, 14:13
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 8 meses
Puntos: 1146
Respuesta: persistencia para que no se cierre menu desplegable al seleccionar un inpu

tu problema es que muestras el menú durante el foco y cuando seleccionas el input evidentemente el elemento anterior pierde el foco


tu solución es complementarlo con el evento hover

Código CSS:
Ver original
  1. #menu-wrapper ul li ul:hover,#menu-wrapper ul li:focus ul, #menu-wrapper ul li:active ul  {
  2.         background-color:#AAEA71;
  3.         display: block;                    
  4. }
  #3 (permalink)  
Antiguo 18/10/2011, 14:35
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: persistencia para que no se cierre menu desplegable al seleccionar un inpu

entiendo amigo gracias funciona bien puedo seleccionar el input text y se queda abierto.

el problema que veo es que si despues de seleccionar el input quito el mouse de encima se cierra el sub-menu,

¿Como hago para que se quede abierto aún sin estar el mouse encima del submenu?
  #4 (permalink)  
Antiguo 18/10/2011, 14:40
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 8 meses
Puntos: 1146
Respuesta: persistencia para que no se cierre menu desplegable al seleccionar un inpu

mmmm para ese escenario no se me ocurre nada con CSS, yo recurriría a jquery
  #5 (permalink)  
Antiguo 18/10/2011, 14:54
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: persistencia para que no se cierre menu desplegable al seleccionar un inpu

o alguna forma para darle delay para que no se cierre al instante del quitar el hover si no en tantos segundos!

De todos modos gracias por la ayuda me sirvio de mucho amigo!
  #6 (permalink)  
Antiguo 18/10/2011, 15:03
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 8 meses
Puntos: 1146
Respuesta: persistencia para que no se cierre menu desplegable al seleccionar un inpu

podrías utilizar transition del CSS3 pero habría que considerar la incompatibilidad con IE, reitero el utilizar jquery seria mi solución, o esperar que algún otro usuario responda esperando conozca alguna otra alternativa que no sea jquery o CSS3

si te interesa hacerlo con transition de CSS3 seria mas o menos así:

Código CSS:
Ver original
  1. #menu-wrapper ul li ul{
  2. display:none;
  3. -webkit-transition: all 0.3s ease;/*navegadores webkit*/
  4. -moz-transition: all 0.3s ease;/*firefox*/
  5. -o-transition: all 0.3s ease;/*opera*/
  6. transition: all 0.3s ease;/*Navegadores que soporten transition CSS3*/
  7. }
  8. #menu-wrapper ul li ul:hover,#menu-wrapper ul li:focus ul, #menu-wrapper ul li:active ul  {
  9. background-color:#AAEA71;
  10. display: block;                    
  11. }
  #7 (permalink)  
Antiguo 18/10/2011, 15:41
Colaborador
 
Fecha de Ingreso: junio-2007
Mensajes: 5.798
Antigüedad: 17 años, 5 meses
Puntos: 539
Respuesta: persistencia para que no se cierre menu desplegable al seleccionar un inpu

Como curiosidad ahí va lo siguiente:
Opciones persistentes sólo con css. Nada de javascript, y mucho menos librerías.
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <meta charset="UTF-8">
  3. <title>Kseso? jugando con css</title>
  4. <style type="text/css">
  5. .tabs {
  6.   position: relative;
  7.   min-height: 200px;
  8.   width: 400px;
  9.   clear: both;
  10.   margin: 25px 0;
  11. }
  12. .tab {
  13.   float: left;
  14. }
  15. .tab label {
  16.   background: #eee;
  17.   padding: 10px;
  18.   border: 1px solid #ccc;
  19.   margin-left: -1px;
  20.   position: relative;
  21.   left: 1px;
  22. }
  23. .tab [type=radio] {
  24.   display: none;
  25. }
  26. .content {
  27.   position: absolute;
  28.   top: 28px;
  29.   left: 0;
  30.   background: white;
  31.   right: 0;
  32.   bottom: 0;
  33.   padding: 20px;
  34.   border: 1px solid #ccc;
  35.   overflow: hidden;
  36.   opacity: 0;
  37.   -webkit-transition-duration: 2s;
  38.     -moz-transition-duration: 2s;
  39.     -o-transition-duration: 2s;
  40. }
  41. .content > * {
  42.   position: relative;
  43.   top: 400px;
  44.   left: 0;
  45.   -webkit-transition-duration: 1s;
  46.     -moz-transition-duration: 1s;
  47.     -o-transition-duration: 1s;  
  48. }
  49. [type=radio]:checked ~ label {
  50.   background: white;
  51.   border-bottom: 1px solid white;
  52.   z-index: 2;
  53. }
  54. [type=radio]:checked ~ label ~ .content {
  55.   z-index: 1;
  56.   top: 28px;
  57.   left: 0;
  58.   opacity: 1;
  59.   -webkit-transition-duration: 2s;
  60.     -moz-transition-duration: 2s;
  61.     -o-transition-duration: 2s;
  62. }
  63. [type=radio]:checked ~ label ~ .content > * {
  64.   top: 0;
  65.   left: 0;
  66.   opacity: 1;
  67.   -webkit-transition-duration: 1s;
  68.     -moz-transition-duration: 1s;
  69.     -o-transition-duration: 1s;
  70.  
  71. }
  72. </style>    
  73. </head>
  74. <div class="tabs">
  75.  
  76.    <div class="tab">
  77.        <input type="radio" id="tab-1" name="tab-group-1" checked>
  78.        <label for="tab-1">Opción 1</label>
  79.  
  80.        <div class="content">
  81.            <ul>
  82.                 <li><a href="#">El Blog</a></li>
  83.                 <li><a href="blog/stats.php">Estadísticas</a></li>
  84.                 <li><a href="#">Artículos</a></li>
  85.             </ul>
  86.        </div>
  87.    </div>
  88.  
  89.    <div class="tab">
  90.        <input type="radio" id="tab-2" name="tab-group-1">
  91.        <label for="tab-2">2 Opción</label>
  92.  
  93.        <div class="content">
  94.            <ul>
  95.                 <li><a href="#">Contactar</a></li>
  96.                 <li><a href="#">El Autor</a></li>
  97.                 <li><a href="#">Términos de Uso</a></li>
  98.             </ul>
  99.        </div>
  100.    </div>
  101.  
  102.     <div class="tab">
  103.        <input type="radio" id="tab-3" name="tab-group-1">
  104.        <label for="tab-3">Tercera Op.</label>
  105.  
  106.        <div class="content">
  107.            <ul>
  108.                 <li><a href="#">En Twitter</a></li>
  109.                 <li><a href="#">Gacetilla CSS</a></li>
  110.             </ul>
  111.        </div>
  112.    </div>
  113.  
  114.     <div class="tab">
  115.        <input type="radio" id="tab-4" name="tab-group-1">
  116.        <label for="tab-4">Más Opciones</label>
  117.  
  118.        <div class="content">
  119.            <p>Cualquier tipo de contenidos. No sólamente listas.</p>
  120.            <p>Funcional en Safari 5.1+, Chrome 13+, Firefox 3.6+, Opera 10+, and IE 9+</p>
  121.            <p>Créditos: en base a idea original de Chris Coyier en css-tricks.com</p>
  122.        </div>
  123.    </div>
  124.  
  125. </div>
  126. </body>
  127. </html>

Nota: los efectos sobre opacity y position sólo verificados en chrome y ff

Etiquetas: desplegable, firefox, html, input, persistencia, txt, fondo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:54.