Mundo Web
manuales - recursos - gráficos - programación...

Home -  HTMLWebScript  -  Formularios - Falso combo  -  1 -  2  -  3 -  4  -  5

Falso combo (IV)
por Luciano Moreno, del departamento de diseño web de BJSParaRed.


Ajustando los colores.-

Si observamos un combo real, veremos que una vez abierta la cortina de las opciones, al pasar el cursor sobre una de estas el fondo y el texto de la misma cambia de color, para destacar así la opción que se activará si hacemos click. Es un evento del tipo mouseover-mouseout que debemos añadir a nuestro falso combo para que tenga la apariencia de uno real.

Para ello vamos a recurrir a asignar una clase a las celdas que contienen las opciones del combo, cambiándola a otra conveniente al pasar el cursor sobre ellas, y volviéndola a su clase original al quitarlo.

Vamos a hacerlo sólo para Internet Explorer y Netscape Navigator 6x. Para las versiones 4x también es posible hacerlo, pero genera más complicaciones de código que ventajas reales.

El código necesario será ahora (el nuevo, en azul):

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
  <title>Untitled</title>
  <style type="text/css">
    .comboCaja{background-color:#4c4c4c;layer-background-color:#4c4c4c;position:relative;width:100px;height:16px;clip:rect(0,100,16,0);z-index:1;}
    .fondoCaja{background-color:#FFFFFF;layer-background-color:#FFFFFF;width:98px;height:14px;clip:rect(0,98,14,0);position:absolute;left:1px;top:1px;z-index:5;}
    .flechaCaja{background-color:#4c4c4c;layer-background-color:#4c4c4c;width:16px;height:14px;clip:rect(0,16,14,0);position:absolute;left:82px;top:1px;z-index:5;margin-left:1px;padding-left:1px;}
    .faldaCaja{background-color:#4c4c4c;layer-background-color:#4c4c4c;width:100px;height:70px;clip:rect(0,100,70,0);position:absolute;top:16px;left:0px;z-index:10;visibility:hidden;}
    .fondofaldaCaja{background-color:#FFFFFF;layer-background-color:#FFFFFF;width:98px;height:69px;clip:rect(0,98,69,0);position:absolute;top:0px;left:1px;z-index:10;padding-top:4px;}
  </style>
  <script language="JavaScript" type="text/javascript">
      if(document.layers)
      {
          document.write("<link rel='stylesheet' type='text/css' href='css/estilos_nc_2.css'>");
      }
      else
      {
       document.write("<link rel='stylesheet' type='text/css' href='css/estilos_2.css'>");
      }

      var estado=false;
      function cambia(id)
      {
          if (estado==false)
          {
              if (document.layers)
              {
                  document.layers['seleccion1'].height="86";
                  document.layers['seleccion1'].clip.bottom="86";
                  document.seleccion1.document.layers[id].visibility = "show";
              }
              else if (document.all)
                  document.all[id].style.visibility = "visible";
              else if(document.getElementById)
                  document.getElementById(id).style.visibility = "visible";
          }
          else
          {   
             if (document.layers)
              {
                  document.layers['seleccion1'].height="16";
                  document.layers['seleccion1'].clip.bottom="16";
                  document.seleccion1.document.layers[id].visibility = "hide";
              }
              else if (document.all)
                  document.all[id].style.visibility = "hidden";
              else if(document.getElementById)
                  document.getElementById(id).style.visibility = "hidden";
          }
          estado=(!estado)
      }
      function cambiavalor(caja, cadena)
      {
          if(document.all)
          {
              eval("document.all('fondocaja"+caja+"').innerHTML='<span class=lista>"+cadena+"</span>'");
              eval("cambia('falda"+caja+"')");
              document.forms.miform.combo1.value=cadena;
          }
          else if(document.layers)
          {
              with (document.seleccion1.document.layers['fondocaja1'])
              {
                   document.open();
                   document.write("<span class='lista'>"+cadena+"</span>");
                   document.close();
                   eval("cambia('falda"+caja+"')");
              }
              document.forms.miform.combo1.value=cadena;
          }
          else if(document.getElementById)
          {
              eval("document.getElementById('fondocaja"+caja+"').innerHTML='<span class=lista>"+cadena+"</span>'");
              eval("cambia('falda"+caja+"')");
              document.forms.miform.combo1.value=cadena;
          }
      }     
      function colores(celda,a)
      {
          if(document.all)
          {
              if(a==0)
              {
                  document.all[celda].style.background='#663399';
                  document.all[(celda+1)].className='linkOn';
              }
              else if(a==1)
               {
                   document.all[(celda+1)].className='linkOff';
                   document.all[celda].style.background='white';
              }
          }
          else if(document.getElementById)
          {
              if(a==0)
              {
                  document.getElementById(celda).style.background='#663399';
                  eval("document.getElementById('link"+strN+"').className='linkOn'");
              }
              else if(a==1)
               {
                   document.getElementById(celda).style.background='white';
                   eval("document.getElementById('link"+strN+"').className='linkOff'");
               }
          }
      }

  </script>
</head>
<body bgcolor="#ffff99">
<form name="miform" action="laquesea" method="post">
<input type="hidden" name="combo1" value="seleccione">
<div id="seleccion1" class="comboCaja">
  <div id="fondocaja1" class="fondoCaja"><span class="lista">seleccione</span></div>
  <div class="flechaCaja"><a href="#" onclick="cambia('falda1')"><img src="images/flecha.gif" width="15" height="14" border="0" alt="flecha"></a></div>                 
  <div id="falda1" class="faldaCaja">
    <div id="fondofalda1" class="fondofaldaCaja">
      <table cellpadding="0" cellspacing="0" border="0" width="100%">
        <tr>
          <td width="100%" onmouseover="colores(this.sourceIndex,0);" onmouseout="colores(this.sourceIndex,1);" onclick="cambiavalor('1','seleccione');return false;"><a href="#" onclick="cambiavalor('1','seleccione');return false" class="linkOff">seleccione</a></td>
        </tr>
        <tr>
          <td width="100%" onmouseover="colores(this.sourceIndex,0);" onmouseout="colores(this.sourceIndex,1);" onclick="cambiavalor('1','uno');return false;"><a href="#"  onclick="cambiavalor('1','uno');return false;" class="linkOff">uno</a></td>
        </tr>
        <tr>
          <td width="100%" onmouseover="colores(this.sourceIndex,0);" onmouseout="colores(this.sourceIndex,1);" onclick="cambiavalor('1','dos');return false;"><a href="#" onclick="cambiavalor('1','dos');return false;" class="linkOff">dos</a></td>
        </tr>
        <tr>
          <td width="100%" onmouseover="colores(this.sourceIndex,0);" onmouseout="colores(this.sourceIndex,1);" onclick="cambiavalor('1','tres');return false;"><a href="#" onclick="cambiavalor('1','tres');return false" class="linkOff">tres</a></td>
        </tr>
      </table>
    </div>
  </div>
</div>
<br><br><br><br>
<a href="#" onclick="alert(document.forms.miform.combo1.value);return false;">javascript:</a>
</form>
</body>
</html>

Mientras que las clases de estilos para los estados de las celdas las hemos puesto en los ficheros CSS externos, pero cuyo contenido básico es:

.lista{color:#000000;font-family:Helvetica;font-size:11px;padding-left:5px;padding-top:0px;text-decoration:none;}
.linkOff{color:#000000;font-family:Helvetica;font-size:11px;padding-left:5px;text-decoration:none;}
.linkOn{color:white;font-family:Helvetica;font-size:11px;padding-left:5px;text-decoration:none;}

Eu resultado final lo tenéis en esta ventana.

 

anterior
siguiente

Home -  HTMLWebScript  -  Formularios - Falso combo  -  1 -  2  -  3 -  4  -  5