Alternatywny kolor wiersza tabeli za pomocą CSS?


462

Używam do tego tabeli o innym kolorze wiersza.

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>

Tutaj używam klasy do tr, ale chcę używać tylko do table. Kiedy używam klasy do tabeli, to dotyczy to tralternatywy.

Czy mogę napisać mój HTML w ten sposób za pomocą CSS?

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

Jak sprawić, by rzędy miały „paski zebry” za pomocą CSS?


1
Stworzyłem demo, używając wszystkich możliwych wzorów dla nth-child () - xengravity.com/demo/nth-child
xengravity

Odpowiedzi:


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>

Istnieje selektor CSS, tak naprawdę pseudo-selektor, zwany nth-child. W czystym CSS możesz wykonać następujące czynności:

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

Uwaga: Brak obsługi w IE 8.

Lub, jeśli masz jQuery:

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

czy można również zmienić kolor hiperłącza alternatywnych wierszy. Chcę inny kolor hiperłącza dla parzystego wiersza i inny dla nieparzystego. Dzięki
عثمان غني

4
Świetna odpowiedź! Ale tylko dla informacji istnieje inny selektor CSS, którego można użyć, tj. tr:nth-of-type(odd/even)
Nikhil Nanjappa

2
@ عثمانغني: Tak, po prostu byś to zrobiłtr:nth-child(even) a
Gerard

1
Nie działa, jeśli dynamicznie piszesz HTML. Następnie musisz dodać klasy do wierszy.
erik

W 2019 r .: nie jest to już najlepsze rozwiązanie. Używaj czystego CSS .
Chiramisu,

158

Masz :nth-child()pseudoklasę:

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

W pierwszych dniach :nth-child()swojego poparcia przeglądarki niby biedny. Dlatego ustawienie class="odd"stało się tak powszechną techniką. Pod koniec 2013 roku z przyjemnością stwierdzam, że IE6 i IE7 są w końcu martwe (lub wystarczająco chore, aby przestać się nimi przejmować), ale IE8 wciąż istnieje - na szczęście jest to jedyny wyjątek.


3
Preferowana odpowiedź, ponieważ nie dotyczy CSS nagłówka
Mike

Cześć, spóźnia się o kilka lat, ale co z dodaniem wybranej klasy z kolorem bg z jqeury do wiersza tabeli po kliknięciu. Zauważyłem, że kolor pseudoklasy n-child bg-kolor nadpisuje się, gdy dodajesz „wybraną” klasę z jqeury
dutchkillsg

@dutchkillsg To wydaje się być zupełnie nowe pytanie niż komentarz do mojej odpowiedzi ...
Álvaro González

W przypadku „pasków zebry” (tzn. Pionowych) po prostu wymień tr:nth-child(odd)z td:nth-of-type(odd). Zauważ, że w tym przypadku stosujesz inną pseudoklasę tdzamiast trelementów.
Chiramisu,

36

Po prostu dodaj następujące elementy do kodu HTML (za pomocą <head>) i gotowe.

HTML:

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

Łatwiejsze i szybsze niż przykłady jQuery.


To powinna być zaakceptowana odpowiedź. W miarę możliwości CSS powinien obsługiwać stylizację, a javascript może służyć do obsługi innych spraw.
Tormod Haugene,

Nie robię html na codzień. #cccnie wydaje mi się prawidłowym kodem koloru. Możesz wytłumaczyć? Dzięki.
tommy.carstensen

1
@ tommy.carstensen nazywa się to „skrótem szesnastkowym”. Zasadniczo #ccczostaje rozwinięty do #cccccc, co oznacza, że ​​każdy kolor RGB ma wartość szesnastkową cclub dziesiętną 204(tj rgb(204, 204, 204).). Przeczytaj więcej na ten temat tutaj -> pl.wikipedia.org/wiki/Web_colours#Shorthand_hexadecimal_form
Nick Grealy

Nie działa w wersji Chrome 78.0.3904.108
IlludiumPu36

13

czy mogę napisać mój HTML tak za pomocą CSS?

Tak, ale będziesz musiał użyć :nth-child()pseudo selektora (który ma ograniczoną obsługę):

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

13

Możemy stosować nieparzyste, a nawet parzyste reguły CSS i metodę jQuery dla alternatywnych kolorów wierszy

Korzystanie z CSS

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

Korzystanie z 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

Większość powyższych kodów nie będzie działać z wersją IE. Oto rozwiązanie, które działa dla innych przeglądarek IE +.

   <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 Wiem, że jQuery jest dość wszechobecny na tej stronie, ale niezależnie od tego nie powinieneś publikować jQuery bez wyjaśnienia. Ten skrypt nie działa samodzielnie.
DisgruntledGoat

4

Możesz używać selektorów n-potomnych (nieparzystych / parzystych), jednak nie wszystkie przeglądarki ( tj. 6-8, ff v3.0 ) obsługują te reguły, dlatego większość rozwiązań odwołuje się do jakiejś formy rozwiązania javascript / jquery w celu dodania klas do wiersze dla tych niezgodnych przeglądarek, aby uzyskać efekt paska tygrysa.


3

Jest to dość łatwy sposób, aby to zrobić w PHP, jeśli rozumiem twoje zapytanie, zakładam, że kodujesz w PHP i używasz CSS i javascript do zwiększenia wydajności.

Dynamiczne wyjście z bazy danych będzie zawierało pętlę for, aby iterować wyniki, które następnie są ładowane do tabeli. Po prostu dodaj wywołanie funkcji do następującego:

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

następnie dodaj funkcję do pliku strony lub biblioteki:

function getbgc($trcount)
{

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

}

Teraz będzie to dynamicznie zmieniać na przemian kolory w każdym nowo wygenerowanym wierszu tabeli.

Jest to o wiele łatwiejsze niż bałagan w CSS, który nie działa we wszystkich przeglądarkach.

Mam nadzieję że to pomoże.


dzięki @mark. Nie jest ustalone, że strona będzie w języku PHP, .net lub zwykłym HTML.
Kali Charan Rajput
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.