Tenho uma tabela HTML com linhas ímpares coloridas em cinza.
Algumas linhas estão ocultas <tr style="display: none">
e isso cria a possibilidade de duas linhas exibidas consecutivamente serem da mesma cor, como visto no recorte abaixo:
.table thead th{
background: #f6f6f6;
}
.table>tbody>tr:nth-of-type(even)>td {
background: #f6f6f6;
}
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"/>
<table class="table">
<thead>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Email</th>
</tr>
</thead>
<tbody>
<tr>
<td>John</td>
<td>Doe</td>
<td>[email protected]</td>
</tr>
<tr>
<td>Jane</td>
<td>Doe</td>
<td>[email protected]</td>
</tr>
<tr style="display: none">
<td>Mary</td>
<td>Moe</td>
<td>[email protected]</td>
</tr>
<tr>
<td>July</td>
<td>Dooley</td>
<td>[email protected]</td>
</tr>
</tbody>
</table>
Isso significa que preciso de uma maneira de selecionar todas as linhas que são ímpares e não têm style="display: none"
.
Como posso alcançar esse resultado?
Usando a nova
:nth-child(An + B of S)
sintaxe. No seu casoDemonstração:
Isso é impossível somente com CSS. CSS trabalha com a estrutura DOM e não com os elementos exibidos. Então você precisará de JS para escrever essa lógica.
Você pode fazer um loop em cada elemento e monitorar as linhas visíveis.