Foros del Web » Creando para Internet » HTML »

Sobreposición de <div>s

Estas en el tema de Sobreposición de <div>s en el foro de HTML en Foros del Web. Buenos días! Estoy creando una página web que va a consistir en una cuadrícula con una imágen en cada celda, y al hacer clic en ...
  #1 (permalink)  
Antiguo 24/09/2011, 05:24
Avatar de joss23  
Fecha de Ingreso: noviembre-2009
Mensajes: 16
Antigüedad: 15 años
Puntos: 0
Exclamación Sobreposición de <div>s

Buenos días!

Estoy creando una página web que va a consistir en una cuadrícula con una imágen en cada celda, y al hacer clic en cada imagen debe aparecer encima de ella un pequeño menú de dos botones.

Estoy intentando hacerlo mediante divs, tengo un div para la imagen y otro para el cuadro con los botones, y quiero que uno se sobreponga al otro. He probado con z-index pero sólo funciona si los dos div estan en posición absoluta, con lo cual no se ven dentro de la cuadrícula, sino en la esquina superior izquierda de la página.

Aquí está el código completo de la página:

Código HTML:
<html>

<head>

<script language="JavaScript" fptype="dynamicanimation">
<!--
function dynAnimation() {}
function clickSwapImg() {}
//-->
</script>

<script language="JavaScript1.2" fptype="dynamicanimation" src="animate.js"></script>

<script language="JavaScript">

var totalLayersInLoop=1;

var layerNumShowing=1;



function init(){

      	  if (navigator.appName == "Netscape") {

		    layerStyleRef="layer.";

 			layerRef="document.layers";

			styleSwitch="";

			}else{

 			layerStyleRef="layer.style.";

			layerRef="document.all";

 			styleSwitch=".style";

			} 	}



function showLayerNumber(number){

 		var layerNumToShow=number;

		hideLayer(eval('"layer' + layerNumShowing+'"'));

 		showLayer(eval('"layer' + layerNumToShow+'"'));

 		layerNumShowing=layerNumToShow;	 	}

		

function showLayer(layerName){

 		eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.visibility="visible"'); 	} 	



function hideLayer(layerName){

 		eval(layerRef+'["'+layerName+'"]'+styleSwitch+'.visibility="hidden"'); 	} 



function dyninit(){

dynAnimation();

init();

}

</script>

<style type="text/css">

.estilo {
border-color: #FF0000;
border-width: 1px;
border-style: solid;
}


 #capa {POSITION: relative; Z-INDEX: 2; VISIBILITY: visible; LEFT: 0px; TOP: 0px;}
 
 #capa2 {POSITION: relative; Z-INDEX: 3; VISIBILITY: visible; LEFT: 0px; TOP: 0px;}

</style>

</head>


<body onload="dyninit()">

<table border="0" width="100%" height="100%">
  <tr>
    <td width="14%" height="30%" class="estilo" align="center" valign="middle">
      
      <div id="capa" width="100%" height="100%">
      <a onmouseover="document['fpAnimswapImgFP1'].imgRolln=document['fpAnimswapImgFP1'].src;document['fpAnimswapImgFP1'].src=document['fpAnimswapImgFP1'].lowsrc;" onmouseout="document['fpAnimswapImgFP1'].src=document['fpAnimswapImgFP1'].imgRolln" onclick="javascript:showLayer(capa2)" href="javascript:void(0)">
      <img border="0" src="imagen.gif" width="170" height="170" id="fpAnimswapImgFP1" name="fpAnimswapImgFP1" dynamicanimation="fpAnimswapImgFP1" lowsrc="imagen2.jpg"></a>
      </div>
      
      <div id="capa2" width="100%" height="100%">
      <table bgcolor="#FF0000" height="100%" width="100%">
      <tr>
      <td height="100%" width="100%" valign="middle" align="center">(Botones)</td>
      </tr>
      </table> 
      </div>
 	
    </td>
    <td width="14%" height="30%" class="estilo" align="center" valign="middle">&nbsp;</td>
    <td width="14%" height="30%" class="estilo" align="center" valign="middle">&nbsp;</td>
    <td width="14%" height="30%" class="estilo" align="center" valign="middle">&nbsp;</td>
    <td width="14%" height="30%" class="estilo" align="center" valign="middle">&nbsp;</td>
    <td width="14%" height="30%" class="estilo" align="center" valign="middle">&nbsp;</td>
    <td width="14%" height="30%" class="estilo" align="center" valign="middle">&nbsp;</td>
  </tr>
  <tr>
    <td width="14%" height="30%" class="estilo" align="center" valign="middle">&nbsp;</td>
    <td width="14%" height="30%" class="estilo" align="center" valign="middle">&nbsp;</td>
    <td width="14%" height="30%" class="estilo" align="center" valign="middle">&nbsp;</td>
    <td width="14%" height="30%" class="estilo" align="center" valign="middle">&nbsp;</td>
    <td width="14%" height="30%" class="estilo" align="center" valign="middle">&nbsp;</td>
    <td width="14%" height="30%" class="estilo" align="center" valign="middle">&nbsp;</td>
    <td width="14%" height="30%" class="estilo" align="center" valign="middle">&nbsp;</td>
  </tr>
</table>

</body>

</html> 

Como podría hacer para que se sobrepusieran las dos capas dentro de una celda?

Muchas gracias!
  #2 (permalink)  
Antiguo 24/09/2011, 07:33
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Sobreposición de <div>s

En realidad no estás usando divs, estas usando una tabla, no sé de donde vienen tus datos, pero si estás extrayendo dichos valores de una base de datos, sería aceptable

Más allá de eso, estas complicándote con el sistema

te dejo dos variantes, si lo hacés con una tabla se te simplifica el centrado vertical del menu

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6. <style type="text/css">
  7.    
  8. /* para el segundo ejempo */
  9.     div.contiene_menu{
  10.      width: 200px;
  11.      height: 200px;
  12.      text-align: center;
  13.      margin-right: 3px;
  14.      float: left;
  15.      display: table; position: static;
  16.      }
  17.     div.menu {
  18.     width: 150px;
  19.     height: 150px;
  20.     background-color: red;
  21.     display: none;
  22.     margin: auto;
  23.     position: relative;
  24.     line-height: 150px;
  25.     vertical-align: middle;
  26.     }
  27.     /* capa extra para centrado vertical - mismo ancho y al to que la capa contiene_menu*/
  28.     div.centrar_v {
  29.     display: table-cell;
  30.     vertical-align: middle;
  31.     position: static;
  32.     width: 200px;
  33.     height: 200px;
  34.     }
  35.     </style>
  36. <script type="text/javascript">
  37.     function mostrarMenu(indice){
  38.     document.getElementById(indice).style.display = 'block';
  39.     }
  40.     function ocultarMenu(indice){
  41.     document.getElementById(indice).style.display = 'none';
  42.     }
  43.     </script>
  44. </head>
  45.     <p> Con tablas </p>
  46. <table border="1" cellspacing="2" cellpadding="0">
  47. <tr>
  48. <td width="200" height="200" align="center" valign="middle" onclick="mostrarMenu('uno');" style="background-image: url('muno.png');">
  49. <div style="display: none; width: 100px; height: 100px; background-color: red" id="uno" onmouseout="ocultarMenu(this.id);">
  50. menú 1
  51. </div>
  52. </td>
  53. <td width="200" height="200" align="center" valign="middle" onclick="mostrarMenu('dos');" style="background-image: url('mdos.jpg');">
  54. <div style="display: none; width: 100px; height: 100px; background-color: red" id="dos" onmouseout="ocultarMenu(this.id);">
  55. menú 2
  56. </div>
  57. </td>
  58. </tr>
  59. <p> Con divs </p>
  60. <div class="contiene_menu" onclick="mostrarMenu('tres');" style="background-image: url('muno.png');">
  61. <div class="centrar_v">
  62. <div class="menu" id="tres" onmouseout="ocultarMenu('tres');">
  63. menú 3
  64. </div>
  65. </div>
  66. </div>
  67. <div class="contiene_menu" onclick="mostrarMenu('cuatro');" style="background-image: url('mdos.jpg');">
  68. <div class="centrar_v">
  69. <div class="menu" id="cuatro" onmouseout="ocultarMenu('cuatro');">
  70. menú 4
  71. </div>
  72. </div>
  73. </div>
  74. </body>
  75. </html>

demo
http://foros.emprear.com/css/centrad...sobreimg2.html

hay un pequeño detalle que corregir, pero te lo dejo a vos...

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #3 (permalink)  
Antiguo 24/09/2011, 15:19
Avatar de joss23  
Fecha de Ingreso: noviembre-2009
Mensajes: 16
Antigüedad: 15 años
Puntos: 0
Respuesta: Sobreposición de <div>s

Cita:
Iniciado por emprear Ver Mensaje
En realidad no estás usando divs, estas usando una tabla, no sé de donde vienen tus datos, pero si estás extrayendo dichos valores de una base de datos, sería aceptable

Más allá de eso, estas complicándote con el sistema

te dejo dos variantes, si lo hacés con una tabla se te simplifica el centrado vertical del menu

Código HTML:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <title>titulo</title>
  5. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  6. <style type="text/css">
  7.    
  8. /* para el segundo ejempo */
  9.     div.contiene_menu{
  10.      width: 200px;
  11.      height: 200px;
  12.      text-align: center;
  13.      margin-right: 3px;
  14.      float: left;
  15.      display: table; position: static;
  16.      }
  17.     div.menu {
  18.     width: 150px;
  19.     height: 150px;
  20.     background-color: red;
  21.     display: none;
  22.     margin: auto;
  23.     position: relative;
  24.     line-height: 150px;
  25.     vertical-align: middle;
  26.     }
  27.     /* capa extra para centrado vertical - mismo ancho y al to que la capa contiene_menu*/
  28.     div.centrar_v {
  29.     display: table-cell;
  30.     vertical-align: middle;
  31.     position: static;
  32.     width: 200px;
  33.     height: 200px;
  34.     }
  35.     </style>
  36. <script type="text/javascript">
  37.     function mostrarMenu(indice){
  38.     document.getElementById(indice).style.display = 'block';
  39.     }
  40.     function ocultarMenu(indice){
  41.     document.getElementById(indice).style.display = 'none';
  42.     }
  43.     </script>
  44. </head>
  45.     <p> Con tablas </p>
  46. <table border="1" cellspacing="2" cellpadding="0">
  47. <tr>
  48. <td width="200" height="200" align="center" valign="middle" onclick="mostrarMenu('uno');" style="background-image: url('muno.png');">
  49. <div style="display: none; width: 100px; height: 100px; background-color: red" id="uno" onmouseout="ocultarMenu(this.id);">
  50. menú 1
  51. </div>
  52. </td>
  53. <td width="200" height="200" align="center" valign="middle" onclick="mostrarMenu('dos');" style="background-image: url('mdos.jpg');">
  54. <div style="display: none; width: 100px; height: 100px; background-color: red" id="dos" onmouseout="ocultarMenu(this.id);">
  55. menú 2
  56. </div>
  57. </td>
  58. </tr>
  59. <p> Con divs </p>
  60. <div class="contiene_menu" onclick="mostrarMenu('tres');" style="background-image: url('muno.png');">
  61. <div class="centrar_v">
  62. <div class="menu" id="tres" onmouseout="ocultarMenu('tres');">
  63. menú 3
  64. </div>
  65. </div>
  66. </div>
  67. <div class="contiene_menu" onclick="mostrarMenu('cuatro');" style="background-image: url('mdos.jpg');">
  68. <div class="centrar_v">
  69. <div class="menu" id="cuatro" onmouseout="ocultarMenu('cuatro');">
  70. menú 4
  71. </div>
  72. </div>
  73. </div>
  74. </body>
  75. </html>

demo
[url]http://foros.emprear.com/css/centrado-vertical/menusobreimg2.html[/url]

hay un pequeño detalle que corregir, pero te lo dejo a vos...

Saludos
Hola emprear!

Gracias por tu ayuda, tengo un problema y es que las imagenes de la cuadrícula en realidad tienen que cambiarse por otras al pasar el ratón por encima, y luego aparecer el menú encima si se hace clic. Es posible ese cambio onmouseover estando la imagen como fondo de una celda?
  #4 (permalink)  
Antiguo 24/09/2011, 15:57
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Sobreposición de <div>s

Si, por supuesto, y si es con mouseover, ni siquiera usas javascript, con la pseudo classe hover.

Código CSS:
Ver original
  1. div {
  2. background-image: url(logo.jpg);
  3. }
  4.  
  5. div:hover {
  6. background-image: url(logo2.jpg);
  7. }
Si usas javascript, la propiedad se invoca con
Código Javascript:
Ver original
  1. object.style.backgroundImage="url(xxx.gif)"

Yo use js, porque el evento era onclick, analizá lo que puse
Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.     function mostrarMenu(indice){
  3.     document.getElementById(indice).style.display = 'block';
  4.     }
  5.     function ocultarMenu(indice){
  6.     document.getElementById(indice).style.display = 'none';
  7.     }
  8.     </script>

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 24/09/2011, 16:53
Avatar de C2am  
Fecha de Ingreso: enero-2009
Ubicación: Rosario, Argentina
Mensajes: 2.005
Antigüedad: 15 años, 10 meses
Puntos: 306
Respuesta: Sobreposición de <div>s

Hola, solo una aclaración sobre z-index:
La propiedad que controla la posición tridimensional de una caja se denomina z-index y sólo tiene efecto sobre los elementos posicionados, es decir, aquellos sobre los que se ha establecido la propiedad position o la propiedad float.

www.librosweb.es

Digo, para que no quede como que solo funciona para position:absolute.

Saludos
__________________
El mundo nada puede contra un hombre que canta en la miseria.
-- Ernesto Sábato--

Etiquetas: css, botones
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 17:33.