Ver Mensaje Individual
  #14 (permalink)  
Antiguo 23/12/2008, 21:10
Avatar de f0vela
f0vela
 
Fecha de Ingreso: diciembre-2008
Ubicación: Guatemala
Mensajes: 48
Antigüedad: 15 años, 4 meses
Puntos: 1
Respuesta: Cambiar fondo de celda al onMouseover

Si, te comprendo, pero esto no se puede hacer solamente con CSS tendras que usar javascript y CSS para poder tener este efecto.

Con lo que te especifique anteriormente tendras que hacer una funcion que al estar onmouseover sobre la celda ejecute la función javascript que cambie el estilo de la celda al current y que al salir de la celda no regrese al anterior hasta que entre a la nueva celda.

Algo asi (este ejemplo es básico y supone que tienes solo 5 noticias desplegadas a la vez con 5 diferentes id's):

Código css:
Ver original
  1. <style>
  2. /* Usaremos clases en lugar de id's */
  3.  
  4. .td_current { background:url(miotraimagendefondo.png); }
  5. .td_normal { background:url(miimagendefondo.png); }
  6. </style>

Código javascript:
Ver original
  1. <script>
  2. // Esta función permite encontrar los elementos dentro de la pagina que tengan una clase determinada
  3. var getElementsByClassName = function (className, tag, elm){
  4.     if (document.getElementsByClassName) {
  5.         getElementsByClassName = function (className, tag, elm) {
  6.             elm = elm || document;
  7.             var elements = elm.getElementsByClassName(className),
  8.                 nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
  9.                 returnElements = [],
  10.                 current;
  11.             for(var i=0, il=elements.length; i<il; i+=1){
  12.                 current = elements[i];
  13.                 if(!nodeName || nodeName.test(current.nodeName)) {
  14.                     returnElements.push(current);
  15.                 }
  16.             }
  17.             return returnElements;
  18.         };
  19.     }
  20.     else if (document.evaluate) {
  21.         getElementsByClassName = function (className, tag, elm) {
  22.             tag = tag || "*";
  23.             elm = elm || document;
  24.             var classes = className.split(" "),
  25.                 classesToCheck = "",
  26.                 xhtmlNamespace = "http://www.w3.org/1999/xhtml",
  27.                 namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
  28.                 returnElements = [],
  29.                 elements,
  30.                 node;
  31.             for(var j=0, jl=classes.length; j<jl; j+=1){
  32.                 classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
  33.             }
  34.             try {
  35.                 elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
  36.             }
  37.             catch (e) {
  38.                 elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
  39.             }
  40.             while ((node = elements.iterateNext())) {
  41.                 returnElements.push(node);
  42.             }
  43.             return returnElements;
  44.         };
  45.     }
  46.     else {
  47.         getElementsByClassName = function (className, tag, elm) {
  48.             tag = tag || "*";
  49.             elm = elm || document;
  50.             var classes = className.split(" "),
  51.                 classesToCheck = [],
  52.                 elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
  53.                 current,
  54.                 returnElements = [],
  55.                 match;
  56.             for(var k=0, kl=classes.length; k<kl; k+=1){
  57.                 classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
  58.             }
  59.             for(var l=0, ll=elements.length; l<ll; l+=1){
  60.                 current = elements[l];
  61.                 match = false;
  62.                 for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
  63.                     match = classesToCheck[m].test(current.className);
  64.                     if (!match) {
  65.                         break;
  66.                     }
  67.                 }
  68.                 if (match) {
  69.                     returnElements.push(current);
  70.                 }
  71.             }
  72.             return returnElements;
  73.         };
  74.     }
  75.     return getElementsByClassName(className, tag, elm);
  76. };
  77.  
  78.  
  79. // Esta función es la que cambiará la clase de la celda en la que esta parada
  80. function cellChange(idActual){
  81.    
  82.     // encuentra todos los elementos que tienen td_current como clase y los cambia a td_normal
  83.     var normal = getElementsByClassName('td_current');
  84.     var contador = 0;
  85.     while (normal[contador])
  86.     {
  87.         normal[contador].style.class = 'td_normal';
  88.         contador++;
  89.     }
  90.  
  91.     // al td el id actual le cambia la clase a td_current para que este rojo
  92.     document.getElementById(idActual).style.class = 'td_current';
  93.  
  94. }
  95. </script>

La primera td_current es solo para que al cargar tu pagina esta inicie con la primera noticia como seleccionada.

Código html:
Ver original
  1. <tr id='noticia1' class="td_current" onMouseOver="cellChange('noticia1');">
  2.     <td>Noticia1</td>
  3. </tr>
  4. <tr id='noticia2' class="td_normal" onMouseOver="cellChange('noticia2');">>
  5.     <td>Noticia2</td>
  6. </tr>
  7. <tr id='noticia3' class="td_normal" onMouseOver="cellChange('noticia3');">>
  8.     <td>Noticia3</td>
  9. </tr>
  10. <tr id='noticia4' class="td_normal" onMouseOver="cellChange('noticia4');">>
  11.     <td>Noticia4</td>
  12. </tr>
  13. <tr id='noticia5' class="td_normal" onMouseOver="cellChange('noticia5');">>
  14.     <td>Noticia5</td>
  15. </tr>

Esto esta un poco largo pero al final te dara el resultado que deseas.
PD: espero no haber cometido algun error en el codigo :S jejejejeje