Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: |Miguel| en 21 Enero 2012, 12:48 pm



Título: ¿Cómo posicionar una capa?
Publicado por: |Miguel| en 21 Enero 2012, 12:48 pm
Hola buenas... siguiendo con las funciones del otro post que hice tengo otro problema. En realidad dos problemas.

El primero, es que dependiendo de la configuración de pantalla del PC donde se cargue, el submenú me aparece desplazado. He probado a meter una tabla en la ceda donde se llama al submenú en lugar de usar la capa que he puesto aquí abajo, pero da el mismo resultado. a ver si alguien me puede ayudar a hacer posicionamiento de capas según donde cargue la página, es decir, que la función muestra me calcule la posición donde debe colocar la capa.

Funciones:
Código
  1. <script type="text/javascript">
  2. function muestra(id)
  3. {
  4. document.getElementById(id).style.visibility='visible';
  5. }
  6.  
  7. function oculta(id)
  8. {
  9. document.getElementById(id).style.visibility='hidden';
  10. }
  11. </script>

La capa:
Código
  1. <div id="subMenu" class="menu" onMouseOut="javascript:oculta('subMenu');">
  2.    <span class="menu">
  3.       <a href="tintos.html">Vinos tintos</a><br/>
  4.       <a href="blancos.html">Vinos blancos</a><br/>
  5.       <a href="mostos.html">Mostos</a>
  6.    </span>
  7. </div>

Y la celda que llama:
Código
  1. <td width="116" class="menu" onMouseOver="javascript:muestra('subMenu');" >Nuestros vinos</td>

El segundo problema, que no me importa demasiado la verdad, es que cuando añado lo del submenú, todo se descuadra en Internet Explorer (sólo en ese... ''navegador''). Si no pongo lo del submenú, todo vuelve a estar bien.

Gracias a todos, un Saludo.

PD: si alguien me dice las etiquetas para el tag CODE de html y java script edito el mensaje para que salga el codigo como es debido...


Título: Re: ¿Cómo posicionar una capa?
Publicado por: #!drvy en 21 Enero 2012, 20:31 pm
Hola, por favor, sube un ejemplo en vivo o muestra capturas para que podamos entenderte mejor.

Las etiquetas respectivas son

[code=html4strict] [/code]  Para HTML.
[code=javascript] [/code]  Para javascript.

Puedes utilizar la lista "GeSHI" que aparece cuando vas a crear un nuevo post.

Saludos


Título: Re: ¿Cómo posicionar una capa?
Publicado por: |Miguel| en 21 Enero 2012, 20:57 pm
Pues que al pasar el ratón por encima de la celda de "Nuestros vinos" en algunos ordenadores me sale esto:
(http://s3.subirimagenes.com:81/imagen/previo/thump_7353959mal.png)

Y lo que busco es esto, en todos (a veces me lo cuadra bien, a veces no):
(http://s3.subirimagenes.com:81/imagen/previo/thump_7353968mal.png)


Título: Re: ¿Cómo posicionar una capa?
Publicado por: #!drvy en 21 Enero 2012, 21:30 pm
Hola, no parece problema de javascript. Podrías poner el CSS que utilizas ?


Saludos


Título: Re: ¿Cómo posicionar una capa?
Publicado por: |Miguel| en 21 Enero 2012, 21:32 pm
Está entre el head y el body.
Código
  1. <style type="text/css">
  2. #subMenu{
  3. visibility:hidden;
  4. }
  5. </style>


Título: Re: ¿Cómo posicionar una capa?
Publicado por: #!drvy en 21 Enero 2012, 22:43 pm
Ejem ? solo eso ?...

Bueno, tal y como lo veo, con tablas lo vas a tener muy difícil. Sobre todo IE que hace lo que le de la gana. Te recomiendo que uses ul (listas).

Te dejo como quedaría tu menú con ul.

CSS.
Código
  1. <style type="text/css">
  2.   #menuprincipal ul {margin:0px; padding:0px; list-style:none;}
  3.   #menuprincipal ul li {float:left; padding:3px;}
  4.  
  5.   #submenu {display:none; position:fixed;}
  6.   #submenu li a {display:block; _position:absolute; }
  7.   #submenu li {float:none !important;}
  8. </style>

javascript (utiliza display:none; en vez de visibility).
Código
  1. <script type="text/javascript">
  2.   function muestra(id)
  3.      {
  4.         document.getElementById(id).style.display='block';
  5.      }
  6.  
  7.   function oculta(id)
  8.      {
  9.         document.getElementById(id).style.display='none';
  10.      }
  11. </script>


Menu
Código
  1. <div id="menuprincipal">
  2. <ul class="menu">
  3. <li>La bodega</li>
  4. <li>Valdepenas</li>
  5. <li onMouseOver="javascript:muestra('submenu');" onMouseOut="javascript:oculta('submenu');">
  6. Nuestros vinos
  7. <ul id="submenu" onMouseOut="javascript:oculta('submenu');">
  8. <li><a href="#">Vinos tintos</a></li>
  9. <li><a href="#">Vinos blancos</a></li>
  10. <li><a href="#">Mostos</a></li>
  11. </ul>
  12. </li>
  13. <li>Visitas y Cartas</li>
  14. <li>Area infantil</li>
  15. <li>Dominacion de origen</li>
  16. <li>Contacto</li>
  17. </ul>
  18. </div>

Ejemplo de como quedaría (click para agrandar):
(http://i.elhacker.net/t?i=z-McyAuQqW44f1xRrnmFhWVo) (http://i.elhacker.net/d?i=z-McyAuQqW44f1xRrnmFhWVo)

Aparte, con ese javascript, te va a ser imposible colocar otro sub-menu puesto que el id se puede declarar solo una vez.

Te recomiendo que mires el código de un compañero ha hecho mas o menos lo mismo pero con jQuery.
-> http://foro.elhacker.net/desarrollo_web/menu_desplegable_html_css_jquery_ayuda-t351067.0.html

Saludos


Título: Re: ¿Cómo posicionar una capa?
Publicado por: |Miguel| en 22 Enero 2012, 12:55 pm
Ejem ? solo eso ?...

Sí, sé que es algo triste pero quería empezar por el menú, que es lo único que podía darme problemas... y lo ha hecho XD

Lo que me has pasado tu me hace esto:
(http://s3.subirimagenes.com:81/imagen/previo/thump_7355654mal.png)

Mi idea era hacer una función javascript que tomase la posición del elemento que contiene Nuestros vinos, y dar a subMenú esa posición.


Título: Re: ¿Cómo posicionar una capa?
Publicado por: #!drvy en 22 Enero 2012, 19:03 pm
Hola,

Bueno.. Te dejo como obtener la posición de un elemento con jQuery.

Incluir jQuery.
Código
  1. <script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>

Código javascript que define el horizontal y vertical de #submenu obteniendo datos de #menu
Código
  1. <script type="text/javascript">
  2. $(document).ready(function() {
  3.   // Obtener la posicion del elemento menu(izquierda y arriba)
  4.   var posicion = $('#menu').offset();
  5.   // Poner la misma posicion horizontal.
  6.   $('#submenu').css('left',posicion.left);
  7.   // Poner la misma posicion +20px vertical
  8.   $('#submenu').css('top',posicion.top+20);
  9. });
  10. </script>
  11.  

#submenu debe ser position:relative o fixed
Código
  1. #submenu {position:fixed;}

Saludos


Título: Re: ¿Cómo posicionar una capa?
Publicado por: |Miguel| en 22 Enero 2012, 21:27 pm
En algunos pc's el menú sale bien y en otros abajo del todo de la página...
No sé cómo algo relativamente sencillo puede dar tanto por el c***. XD


Título: Re: ¿Cómo posicionar una capa?
Publicado por: #!drvy en 22 Enero 2012, 22:58 pm
Hola,

En algunos PC's o en otros navegadores ? Hay diferencia.

Saludos


Título: Re: ¿Cómo posicionar una capa?
Publicado por: |Miguel| en 23 Enero 2012, 08:48 am
No, no. A mi me funciona bien en Chrome y Firefox (IE ni me he molestado en probar, me imagino lo que va a pasar).

A un amigo es a quien le sale desplazado, usando chrome y firefox.

EDITO: ya sé cual es el problema. Dependiendo de la resolución de pantalla, la parte del menú principal a veces queda muy abajo y la función para calcular la posición se ejecuta al cargar la página. El problema es que hay que bajar el scroll y luego pasar el ratón para llamar a la función, que ha calculado la posición antes de tiempo. Voy a probar una cosa y te digo si funciona.

EDITO2: pues no ha funcionado, he intentado pasar el código de la función que me has puesto a la función muestra:
Código
  1. function muestra(id)
  2.      {
  3. // Obtener la posicion del elemento menu(izquierda y arriba)
  4.   var posicion = $('#menu').offset();
  5.   // Poner la misma posicion horizontal.
  6.   $('#submenu').css('left',posicion.left);
  7.   // Poner la misma posicion +20px vertical
  8.   $('#submenu').css('top',posicion.top+20);
  9.  
  10.         document.getElementById(id).style.display='block';
  11.      }
Pero sigue haciendo lo mismo.