2010-09-22 12 views
30

Tengo una mesaZebra haciendo rayas en una tabla con filas ocultas usando CSS3?

<table id="mytable"> 
    <tr style="display: none;"><td>&nbsp;</td></tr> 
    <tr><td>&nbsp;</td></tr> 
    <tr style="display: none;"><td>&nbsp;</td></tr> 
    <tr><td>&nbsp;</td></tr> 
    <tr><td>&nbsp;</td></tr> 
    <tr><td>&nbsp;</td></tr> 
</table> 

Estoy tratando de establecer la creación de bandas mesa para utilizar selectores nth-child pero sólo parece que no puede descifrarlo.

table #mytable tr[@display=block]:nth-child(odd) { 
     background-color: #000; 
} 
table #mytable tr[@display=block]:nth-child(odd) { 
     background-color: #FFF; 
} 

Estoy bastante seguro de que estoy cerca ... parece que no puedo descifrarlo.

¿Alguien pasa por una pista?

Respuesta

19

Esto es lo más cerca que vas a llegar. Tenga en cuenta que no puede hacer que el nth-child cuente solo las filas mostradas; nth-child tomará el elemento secundario n th no importa qué, no el nth hijo que coincide con un selector dado. Si desea que falten algunas filas y que no afecten a las bandas de cebra, deberá eliminarlas completamente de la tabla, ya sea a través del DOM o del lado del servidor.

<!DOCTYPE html> 
<style> 
#mytable tr:nth-child(odd) { 
     background-color: #000; 
} 
#mytable tr:nth-child(even) { 
     background-color: #FFF; 
} 
</style> 
<table id="mytable"> 
    <tr><td>&nbsp;</td></tr> 
    <tr><td>&nbsp;</td></tr> 
    <tr><td>&nbsp;</td></tr> 
    <tr><td>&nbsp;</td></tr> 
    <tr><td>&nbsp;</td></tr> 
    <tr><td>&nbsp;</td></tr> 
</table> 

Estas son las correcciones que hice:

table #mytable tr[@display=block]:nth-child(odd) { 
     background-color: #000; 
} 

No hay necesidad de especificar un selector ancestro de un selector basado id; hay solo uno de los elementos que coinciden con #table, por lo que sólo estamos agregando código adicional mediante la adición de la table en.

#mytable tr[@display=block]:nth-child(odd) { 
     background-color: #000; 
} 

Ahora, [@display=block] coincidiría con los elementos que tenían un conjunto de atributos display bloquear, como <tr display=block> . La pantalla no es un atributo HTML válido; lo que parece que intenta hacer es hacer que el selector coincida con el estilo del elemento, pero no puede hacerlo en CSS, ya que el navegador necesita aplicar los estilos desde el CSS antes de darse cuenta, lo cual está en proceso de hacerlo cuando está aplicando este selector. Por lo tanto, no podrá seleccionar si se muestran las filas de la tabla. Dado que nth-child solo puede tomar el n, no importa qué, no n th con algún atributo, vamos a tener que darnos por vencidos en esta parte del CSS. También hay nth-of-type, que selecciona n el hijo del mismo tipo de elemento, pero eso es todo lo que puede hacer.

#mytable tr:nth-child(odd) { 
     background-color: #000; 
} 

Y ya lo tienes.

+0

gracias. Ya que estoy recorriendo todas las filas de la tabla usando prototipos y ocultando/mostrando según una condición de filtro en una de las celdas, ¿sería posible agregar una clase a todas las filas que no estaban ocultas, y a un NTH? -¿Niños o NTH-OF-TYPE basados ​​en esa clase? tr .visible_row: nth-child (impar)? –

+0

o incluso solo: .visible_row: nth-child (impar) {# 000; } –

+4

@Alex ': nth-child' cuenta * todos * elementos secundarios del elemento principal, independientemente de si coincide con los selectores anteriores.Recuerde, juntar dos selectores sin espacio entre ellos significa hacer coincidir cualquier elemento que coincida con el primero * y * con el segundo. Entonces, si la segunda fila es invisible, '.visible_row: nth-child (even)' no coincidirá con la segunda fila, y verá la primera y la tercera filas con un estilo en el color impar, aunque la segunda fila esté oculta . Si ese es el efecto que buscas, funciona, pero probablemente quieras que las rayas de cebra solo se apliquen a las filas visibles, lo cual es imposible. –

3

Si usa JQuery para cambiar la visibilidad de las filas, puede aplicar la siguiente función a la tabla para agregar una clase .odd, según corresponda. Llámalo cada vez que las filas visibles sean diferentes.

 function updateStriping(jquerySelector){ 
      $(jquerySelector).each(function(index, row){ 
       $(row).removeClass('odd'); 
       if (index%2==1){ //odd row 
        $(row).addClass('odd'); 
       } 
      }); 
     } 

Y para el css simplemente hacer

table#tableid tr.visible.odd{ 
    background-color: #EFF3FE; 
} 
+0

por qué tr.visible.odd y no solo tr.odd? – kdubs

+0

Como el índice comienza en 0, para obtener la fila impar real, debe cambiar el índice% 2 == 1 para indexar% 2 == 0 – mhost

-1

agrego en css:

tr[style="display: table-row;"]:nth-child(even) { 
     background-color: #f3f6fa; 
} 

y en crear tr añadir en la etiqueta

style="display: table-row;" 
+0

Eso no funciona. – inafalcao

2

Si bien se puede' t Zebra raya una tabla con filas ocultas usando CSS3 que puedes hacer con JavaScript. Aquí es cómo:

var table = document.getElementById("mytable"); 
    var k = 0; 
    for (var j = 0, row; row = table.rows[j]; j++) { 
     if (!(row.style.display === "none")) { 
      if (k % 2) { 
       row.style.backgroundColor = "rgba(242,252,244,0.4)"; 
      } else { 
       row.style.backgroundColor = "rgba(0,0,0,0.0)"; 
      } 
      k++; 
     } 
    } 
-1

Jquery códigos de color de la cebra de la tabla html

$("#mytabletr:odd").addClass('oddRow'); 
$("#mytabletr:even").addClass('evenEven'); 

y CSS se puede hacer

.oddRow{background:#E3E5E6;color:black} 
.evenRow{background:#FFFFFF;color:black} 
-1

Puede fácilmente falsa las rayas de la cebra Si aplica un verticalmente gradiente de repetición en la tabla primaria, posicionada exactamente para coincidir con la altura de las filas (las filas tendrían que ser transparentes). De esa manera, a la mesa no le importará si hay algo oculto, se repetirá sin importar qué.

1

Por un camino jquery, puede usar esta función que recorre las filas de su tabla, verificando la visibilidad de la fila y (re) estableciendo una clase para las filas impares visibles.

function updateStriping(jquerySelector) { 
     var count = 0; 
     $(jquerySelector).each(function (index, row) { 
      $(row).removeClass('odd'); 
      if ($(row).is(":visible")) { 
       if (count % 2 == 1) { //odd row 
        $(row).addClass('odd'); 
       } 
       count++; 
      }    
     }); 
    } 

Use css para establecer un fondo para las filas impares.

#mytable tr.odd { background: rgba(0,0,0,.1); } 

A continuación, puede llamar a esta cebra-striper siempre mediante el uso de:

updateStriping("#mytable tr"); 
+0

Esto funcionó para mí, junto con una edición. Necesitaba hacer un inventario específico de lo que era visible de una manera diferente para mi aplicación. Esto es lo que funcionó para mí: '' 'función updateStriping (jquerySelector) { \t \t var visibleItems = []; \t \t $ (jquerySelector) .Cada (function() { \t \t \t if ($ (this) .IS ("Visible")) { \t \t \t \t visibleItems.push (este); \t \t \t} \t \t}); \t \t $ ('. Impar'). RemoveClass ('impar'); \t \t $ (visibleItems) .Cada (función (índice, fila) { \t \t \t si (índice% 2 == 1) {// fila impar \t \t \t \t $ (fila) .addClass ('impar'); \t \t \t} \t \t \t else { \t \t \t \t // algo \t \t \t} \t \t}); } '' ' Disculpa por el código confuso. –

1

me ocurrió una especie de solución, pero es dependiente en el hecho de que la tabla tan sólo puede tener un número máximo de filas ocultas y viene con el inconveniente de requerir 2 reglas CSS adicionales para cada posible fila oculta. El principio es que, después de cada fila oculta, cambie el background-color de las filas pares e impares.

Aquí hay un ejemplo rápido con solo 3 filas ocultas y el CSS necesario para hasta 4 de ellas. Ya se puede ver cómo el CSS difícil de manejar, pero puede llegar a ser, aún así, alguien puede encontrar algún uso para ella:

table{ 
 
    background:#fff; 
 
    border:1px solid #000; 
 
    border-spacing:1px; 
 
    width:100%; 
 
} 
 
td{ 
 
    padding:20px; 
 
} 
 
tr:nth-child(odd)>td{ 
 
    background:#999; 
 
} 
 
tr:nth-child(even)>td{ 
 
    background:#000; 
 
} 
 
tr[data-hidden=true]{ 
 
    display:none; 
 
} 
 
tr[data-hidden=true]~tr:nth-child(odd)>td{ 
 
    background:#000; 
 
} 
 
tr[data-hidden=true]~tr:nth-child(even)>td{ 
 
    background:#999; 
 
} 
 
tr[data-hidden=true]~tr[data-hidden=true]~tr:nth-child(odd)>td{ 
 
    background:#999; 
 
} 
 
tr[data-hidden=true]~tr[data-hidden=true]~tr:nth-child(even)>td{ 
 
    background:#000; 
 
} 
 
tr[data-hidden=true]~tr[data-hidden=true]~tr[data-hidden=true]~tr:nth-child(odd)>td{ 
 
    background:#000; 
 
} 
 
tr[data-hidden=true]~tr[data-hidden=true]~tr[data-hidden=true]~tr:nth-child(even)>td{ 
 
    background:#999; 
 
} 
 
tr[data-hidden=true]~tr[data-hidden=true]~tr[data-hidden=true]~tr[data-hidden=true]~tr:nth-child(odd)>td{ 
 
    background:#999; 
 
} 
 
tr[data-hidden=true]~tr[data-hidden=true]~tr[data-hidden=true]~tr[data-hidden=true]~tr:nth-child(even)>td{ 
 
    background:#000; 
 
}
<table> 
 
    <tbody> 
 
    <tr><td></td><td></td></tr> 
 
    <tr><td></td><td></td></tr> 
 
    <tr data-hidden="true"><td></td><td></td></tr> 
 
    <tr><td></td><td></td></tr> 
 
    <tr><td></td><td></td></tr> 
 
    <tr><td></td><td></td></tr> 
 
    <tr><td></td><td></td></tr> 
 
    <tr data-hidden="true"><td></td><td></td></tr> 
 
    <tr data-hidden="true"><td></td><td></td></tr> 
 
    <tr><td></td><td></td></tr> 
 
    <tr><td></td><td></td></tr> 
 
    <tr><td></td><td></td></tr> 
 
    <tr><td></td><td></td></tr> 
 
    <tr><td></td><td></td></tr> 
 
    <tr><td></td><td></td></tr> 
 
    <tr><td></td><td></td></tr> 
 
    </tbody> 
 
</table>

0

en jQuery ..

var odd = true; 
$('table tr:visible').each(function() { 
    $(this).removeClass('odd even').addClass(odd?'odd':'even'); 
    odd=!odd 
}); 
Cuestiones relacionadas