Цвет строки альтернативной таблицы с помощью CSS?

462

Я использую таблицу с альтернативным цветом строки с этим.

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>

Здесь я использую класс для tr, но я хочу использовать только для table. Когда я использую класс для таблицы, чем это применимо к trальтернативе.

Могу ли я написать свой HTML, как это, используя CSS?

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

Как сделать так, чтобы у строк были «полоски зебры» с помощью CSS?

Кали Чаран Раджпут
источник
1
Я создал демо, используя все возможные шаблоны для nth-child () - xengravity.com/demo/nth-child
xengravity

Ответы:

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>

Есть CSS-селектор, действительно псевдоселектор, называемый nth-child. В чистом CSS вы можете сделать следующее:

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

Примечание: нет поддержки в IE 8.

Или, если у вас есть JQuery:

$(document).ready(function()
{
  $("tr:even").css("background-color", "#000000");
});
Рассел Диас
источник
Можно ли также изменить цвет гиперссылки чередующихся строк. Я хочу другой цвет гиперссылки для четного ряда и другой для нечетного. Спасибо
عثمان غني
4
Отличный ответ! Но просто для информации есть еще один селектор CSS, который можно использовать, т.е. tr:nth-of-type(odd/even)
Нихил Нанджаппа
2
@ عثمانغني: Да, вы бы просто сделалиtr:nth-child(even) a
Джерард
1
Не работает, если вы пишете свой HTML динамически. Затем вам нужно добавить классы в строки.
Эрик
В 2019 году: это уже не лучшее решение. Используйте чистый CSS .
Chiramisu
158

У вас есть :nth-child()псевдокласс:

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

В первые дни :nth-child()его поддержка браузера была отчасти плохой. Вот почему сеттинг class="odd"стал такой распространенной техникой. В конце 2013 года я рад сообщить, что IE6 и IE7 наконец-то мертвы (или достаточно больны, чтобы перестать беспокоиться), но IE8 все еще рядом - к счастью, это единственное исключение.

Альваро Гонсалес
источник
3
Предпочтительный ответ, так как он не применяет CSS к заголовку
Майк
Привет, это на пару лет позже, но как насчет добавления выбранного класса с цветом bg и jqeury в строку таблицы при нажатии. Я заметил, что псевдокласс: nth-child переопределяет bg-color, когда вы добавляете «выбранный» класс с помощью jqeury
dutchkillsg
@dutchkillsg Похоже, это новый вопрос, а не комментарий к моему ответу ...
Альваро Гонсалес
Для "полос зебры" (то есть вертикальных), просто поменяйте tr:nth-child(odd)с td:nth-of-type(odd). Обратите внимание, что в этом случае вы применяете другой псевдокласс tdвместо trэлементов.
Chiramisu
36

Просто добавьте следующее в ваш HTML-код (без <head>), и все готово.

HTML:

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

Проще и быстрее, чем примеры JQuery.

bmich72
источник
Это должен быть принятый ответ. Насколько это возможно, CSS должен обрабатывать стили, а javascript может использоваться для решения других вопросов.
Тормод Хаугене
Я не делаю HTML на ежедневной основе. #cccне похоже на правильный цветовой код для меня. Вы можете объяснить? Спасибо.
tommy.carstensen
1
@ tommy.carstensen это называется «сокращенная шестнадцатеричная форма». В основном #cccрасширяется до #cccccc, что означает, что каждый цвет RGB имеет шестнадцатеричное значение ccили десятичное значение 204(то есть rgb(204, 204, 204)). Подробнее об этом читайте здесь -> en.wikipedia.org/wiki/Web_colors#Shorthand_hexadecimal_form
Ник Грейли,
Не работает на Chrome версии 78.0.3904.108
IlludiumPu36
13

Могу ли я написать свой HTML, как это с использованием CSS?

Да, вы можете, но тогда вам придется использовать :nth-child()псевдо-селектор (который имеет ограниченную поддержку):

table.alternate_color tr:nth-child(odd) td{
   /* styles here */
}
table.alternate_color tr:nth-child(even) td{
   /* styles here */
}
Sarfraz
источник
13

Мы можем использовать нечетные и четные правила CSS и метод jQuery для альтернативных цветов строк

Использование CSS

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

Использование 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

Большинство приведенных выше кодов не будут работать с версией IE. Решение, которое работает для 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
Хорошо, я знаю, что jQuery довольно вездесущ на этом сайте, но, тем не менее, вы не должны публиковать jQuery без объяснения причин. Этот скрипт не будет работать сам по себе.
Рассерженная шлюха
4

Вы можете использовать селекторы nth-child (нечетные / четные), однако не все браузеры ( т.е. 6-8, ff v3.0 ) поддерживают эти правила, поэтому большинство решений прибегают к той или иной форме решения javascript / jquery для добавления классов к строки для этих несовместимых браузеров, чтобы получить эффект тигровой полоски.

Красная площадь
источник
3

Есть довольно простой способ сделать это в PHP, если я понимаю ваш запрос, я предполагаю, что вы кодируете в PHP и используете CSS и javascript для улучшения вывода.

Динамический вывод из базы данных будет содержать цикл for для перебора результатов, которые затем загружаются в таблицу. Просто добавьте вызов функции следующим образом:

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

затем добавьте функцию в файл страницы или библиотеки:

function getbgc($trcount)
{

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

}

Теперь это будет динамически чередоваться между цветами в каждой новой сгенерированной строке таблицы.

Это намного проще, чем возиться с CSS, который работает не во всех браузерах.

Надеюсь это поможет.

отметка
источник
спасибо @ Марк. Не обязательно, чтобы сайт был на PHP, .net или в простом HTML.
Кали Чаран Раджпут