Cor da linha da tabela alternativa usando CSS?


462

Eu estou usando uma tabela com cor de linha alternativa com isso.

tr.d0 td {
  background-color: #CC9999;
  color: black;
}
tr.d1 td {
  background-color: #9999CC;
  color: black;
}
<table>
  <tr class="d0">
    <td>One</td>
    <td>one</td>
  </tr>
  <tr class="d1">
    <td>Two</td>
    <td>two</td>
  </tr>
</table>

Aqui estou usando a classe for tr, mas quero usar apenas para table. Quando uso classe para tabela, isso se aplica em tralternativa.

Posso escrever meu HTML assim usando CSS?

<table class="alternate_color">
    <tr><td>One</td><td>one</td></tr>
    <tr><td>Two</td><td>two</td></tr>
    </table>

Como faço para que as linhas tenham "listras de zebra" usando CSS?


1
Eu criei uma demonstração usando todos os padrões possíveis para nth-child () - xengravity.com/demo/nth-child
— xengravity

Respostas:


760

$(document).ready(function()
{
  $("tr:odd").css({
    "background-color":"#000",
    "color":"#fff"});
});
tbody td{
  padding: 30px;
}

tbody tr:nth-child(odd){
  background-color: #4C8BF5;
  color: #fff;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table border="1">
<tbody>
<tr>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
</tr>
<tr>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
</tr>
<tr>
<td>9</td>
<td>10</td>
<td>11</td>
<td>13</td>
</tr>
</tbody>
</table>

Existe um seletor de CSS, realmente um pseudo-seletor, chamado n-filho. Em CSS puro, você pode fazer o seguinte:

tr:nth-child(even) {
    background-color: #000000;
}

Nota: Não há suporte no IE 8.

Ou, se você tiver jQuery:

$(document).ready(function()
{
  $("tr:even").css("background-color", "#000000");
});

é possível também alterar a cor do hiperlink de linhas alternativas. Eu quero uma cor diferente de hiperlink para linha par e outra para ímpar. Thanks
— Enviado em

4
Ótima resposta! Mas apenas para informação, existe outro seletor CSS que pode ser usado, ie. tr:nth-of-type(odd/even)
— Nikhil Nanjappa

2
@ عثمانغني: Sim, você teria apenas que fazertr:nth-child(even) a
— Gerard

1
Não funciona se você escrever seu html dinamicamente. Então você precisa adicionar classes às linhas.
— Erik

Em 2019: essa não é mais a melhor solução. Use CSS puro .
— Chiramisu 08/07/19

158

Você tem a :nth-child()pseudo-classe:

table tr:nth-child(odd) td{
    ...
}
table tr:nth-child(even) td{
    ...
}

Nos primeiros dias do :nth-child()seu navegador, o suporte era meio ruim. É por isso que o cenário class="odd"se tornou uma técnica tão comum. No final de 2013, fico feliz em dizer que o IE6 e o ​​IE7 estão finalmente mortos (ou doentes o suficiente para parar de cuidar), mas o IE8 ainda está por aí - felizmente, é a única exceção.


3
Resposta preferida, uma vez que não se aplica CSS para cabeçalho
— Mike

Oi, isso está atrasado em alguns anos, mas que tal adicionar uma classe selecionada com uma cor bg com jqeury à linha da tabela quando clicada. Notei que a pseudo classe nth-child bg-color substitui quando você adiciona uma classe "selecionada" ao jqeury
— dutchkillsg

@dutchkillsg Essa parece ser uma pergunta nova em vez de um comentário à minha resposta ...
— Álvaro González

Para "listras de zebra" (vertical), basta trocar tr:nth-child(odd)comtd:nth-of-type(odd) . Observe que, nesse caso, você está aplicando uma pseudo classe diferente aos elementos, tde não aos trelementos.
— Chiramisu 08/07/19

36

Basta adicionar o seguinte ao seu código html (dentro do <head>) e pronto.

HTML:

<style>
      tr:nth-of-type(odd) {
      background-color:#ccc;
    }
</style>

Mais fácil e rápido que os exemplos do jQuery.


Essa deve ser a resposta aceita. Na medida do possível, o CSS deve lidar com o estilo, enquanto o javascript pode ser usado para lidar com outros assuntos.
— Tormod Haugene

Eu não faço html diariamente. #cccnão parece um código de cores válido para mim. Você pode explicar? Obrigado.
— Tommy.carstensen 03/04/19

1
@ tommy.carstensen é chamado de "forma hexadecimal abreviada". Basicamente, #cccé expandido para #cccccc, o que significa que cada cor RGB possui o valor hexadecimal ccou valor decimal 204(ou seja rgb(204, 204, 204)). Leia mais sobre isso aqui -> en.wikipedia.org/wiki/Web_colors#Shorthand_hexadecimal_form
— Nick Grealy

Não funciona no Chrome Versão 78.0.3904.108
— IlludiumPu36

13

posso escrever meu html assim com o uso de css?

Sim, você pode, mas precisará usar o :nth-child()pseudo-seletor (que possui suporte limitado):

table.alternate_color tr:nth-child(odd) td{
   /* styles here */
}
table.alternate_color tr:nth-child(even) td{
   /* styles here */
}

13

Podemos usar regras CSS ímpares e pares e método jQuery para cores de linhas alternativas

Usando CSS

table tr:nth-child(odd) td{
           background:#ccc;
}
table tr:nth-child(even) td{
            background:#fff;
}

Usando jQuery

$(document).ready(function()
{
  $("table tr:odd").css("background", "#ccc");
  $("table tr:even").css("background", "#fff");
});

table tr:nth-child(odd) td{
           background:#ccc;
}
table tr:nth-child(even) td{
            background:#fff;
}
<table>
  <tr>
    <td>One</td>
    <td>one</td>
   </tr>
  <tr>
    <td>Two</td>
    <td>two</td>
  </tr>
</table>


10

A maioria dos códigos acima não funciona com a versão do IE. A solução que funciona para outros navegadores IE + é essa.

   <style type="text/css">
      tr:nth-child(2n) {
             background-color: #FFEBCD;
        }
</style>

9
<script type="text/javascript">
$(function(){
  $("table.alternate_color tr:even").addClass("d0");
   $("table.alternate_color tr:odd").addClass("d1");
});
</script>

46
OK, eu sei que o jQuery é bastante onipresente neste site, mas independentemente você não deve postar o jQuery sem explicação. Este script não funcionará por si só.
— usar o seguinte

4

Você pode usar os seletores de enésimo filho (ímpar / par), mas nem todos os navegadores (por exemplo , 6-8, ff v3.0 ) suportam essas regras, portanto, por que a maioria das soluções recai em algum tipo de solução javascript / jquery para adicionar as classes ao linhas para esses navegadores não compatíveis para obter o efeito listra de tigre.


3

Existe uma maneira bastante fácil de fazer isso no PHP, se eu entender sua consulta, presumo que você codifique em PHP e esteja usando CSS e javascript para melhorar a saída.

A saída dinâmica do banco de dados carregará um loop for para iterar pelos resultados que são carregados na tabela. Basta adicionar uma chamada de função ao seguinte:

echo "<tr style=".getbgc($i).">";  //this calls the function based on the iteration of the for loop.

adicione a função ao arquivo de página ou biblioteca:

function getbgc($trcount)
{

$blue="\"background-color: #EEFAF6;\"";
$green="\"background-color: #D4F7EB;\"";
$odd=$trcount%2;
    if($odd==1){return $blue;}
    else{return $green;}    

}

Agora, isso alternará dinamicamente entre cores em cada linha da tabela recém-gerada.

É muito mais fácil do que mexer com CSS, que não funciona em todos os navegadores.

Espero que isto ajude.


obrigado @mark. Não é possível consertar o site em PHP, .net ou HTML simples.
— Kali Charan Rajput
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.