Зебра чередует таблицу со скрытыми строками, используя CSS3? - PullRequest
30 голосов
/ 23 сентября 2010

У меня есть таблица

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

Я пытаюсь настроить чередование таблиц для использования селекторов nth-child, но просто не могу его взломать

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

Я почти уверен, что я рядом ... кажется, не могу это взломать.

Кто-нибудь передаст подсказку?

Ответы [ 9 ]

19 голосов
/ 23 сентября 2010

Вот так близко, как вы собираетесь получить. Обратите внимание, что вы не можете nth-child считать только отображаемые строки; nth-child примет n -й дочерний элемент, не смотря ни на что, а не nth , который соответствует данному селектору. Если вы хотите, чтобы некоторые строки отсутствовали и не влияли на чередование зебр, вам придется полностью удалить их из таблицы, либо через DOM, либо на стороне сервера.

<!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>

Вот исправления, которые я сделал:

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

Нет необходимости указывать селектор предков для селектора на основе id; существует только один элемент, который будет соответствовать #table, поэтому вы просто добавляете дополнительный код, добавляя table in.

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

Теперь [@display=block] будет соответствовать элементам, для атрибута display которых установлено значение block, например <tr display=block>. Отображение не является допустимым атрибутом HTML; кажется, что вы пытаетесь сделать так, чтобы селектор соответствовал стилю элемента, но вы не можете сделать это в CSS, так как браузер должен применить стили из CSS, прежде чем он сможет это выяснить, что он находится в процессе, когда применяет этот селектор. Таким образом, вы не сможете выбрать, будут ли отображаться строки таблицы. Так как nth-child может принимать только n th потомка, не смотря ни на что, а не n th с некоторым атрибутом, нам придется отказаться от этой части CSS. Существует также nth-of-type, который выбирает n -й дочерний элемент того же типа элемента, но это все, что вы можете сделать.

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

И вот оно у вас.

4 голосов
/ 20 декабря 2011

Если вы используете JQuery для изменения видимости строк, вы можете применить следующую функцию к таблице, чтобы добавить класс .odd, где это необходимо.Называйте его каждый раз, когда видимые строки различаются.

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

А для css просто сделайте

table#tableid tr.visible.odd{
    background-color: #EFF3FE;
}
2 голосов
/ 03 января 2014

Хотя вы не можете разделить таблицу со скрытыми строками с помощью CSS3, вы можете сделать это с помощью JavaScript.Вот как:

    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 голос
/ 27 апреля 2016

Я придумал своего рода решение, но оно основано на том факте, что в таблице может быть только максимальное количество скрытых строк, и имеет недостаток: требуется 2 дополнительных правила CSS для каждой возможной скрытой строки. Принцип состоит в том, что после каждой скрытой строки вы переключаете background-color нечетных и четных строк вокруг.

Вот краткий пример с 3 скрытыми строками и необходимым CSS для максимум 4 из них. Вы уже можете видеть, насколько громоздким может стать CSS, но, тем не менее, кто-то может найти для него применение:

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>
1 голос
/ 07 июня 2015

Для способа jquery вы можете использовать эту функцию, которая выполняет итерацию по строкам в вашей таблице, проверяя видимость строки и (пере) устанавливая класс для видимых нечетных строк.

    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++;
            }            
        });
    }

ИспользованиеCSS, чтобы установить фон для нечетных строк.

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

Затем вы можете вызывать этот зебра-полосатый с помощью:

updateStriping("#mytable tr");
0 голосов
/ 26 января 2017

в jquery ..

var odd = true; 
$('table tr:visible').each(function() {   
  $(this).removeClass('odd even').addClass(odd?'odd':'even'); 
  odd=!odd 
});
0 голосов
/ 11 января 2015

Вы можете легко подделать полоски зебры, если примените вертикально повторяющийся градиент к родительской таблице, расположенной точно так, чтобы соответствовать высоте строк (строки должны быть прозрачными). Таким образом, стол не будет заботиться о том, что что-то скрыто, он будет повторяться, несмотря ни на что.

0 голосов
/ 08 января 2014

Jquery-коды для цвета зебры в HTML-таблице

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

И CSS вы можете сделать

.oddRow{background:#E3E5E6;color:black}
.evenRow{background:#FFFFFF;color:black}
0 голосов
/ 19 марта 2013

Я добавляю в css:

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

и при создании добавьте в тег

style="display: table-row;"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...