2014-01-20 3 views
2

У меня есть таблица с n строк. На этих п строк мне нужно установить некоторые CSS стиль, следуя этим правилам:Селектор CSS со многими условиями (nth-child, нет и видимость)

  • СМЧ следует применять только на нечетных строках
  • СМЧ НЕ следует применять на первой и последней строки (или эти строки с .excludeme класса)
  • СМЧ должны применяться только на видимых строк

HTML

<table> 
    <tr class="excludeme"><td>first</td></tr> 
    <tr><td>Hello</td></tr> 
    <tr><td>Hello</td></tr> 
    <tr class="showhide"><td>show/hide</td></tr> 
    <tr><td>Hello</td></tr> 
    <tr><td>Hello</td></tr> 
    <tr><td>Hello</td></tr> 
    <tr><td>Hello</td></tr> 
    <tr class="showhide"><td>show/hide</td></tr> 
    <tr class="showhide"><td>show/hide</td></tr> 
    <tr><td>Hello</td></tr> 
    <tr class="excludeme"><td>last</td></tr> 
</table> 

CSS

.showhide{ 
    display: none; 
} 
table tr:nth-child(odd):not(.excludeme){ 
    background: orange; 
} 

JS

//--- #test is a button 
$("#test").on("click", function(){ 
    $(".showhide").toggle(); 
}); 

вы можете найти скрипку HERE

Как вы можете видеть, когда некоторые строки являются Hidde, то even/odd окраска не соблюдается. Я пробовал этот селектор

table tr:nth-child(odd):not(.excludeme):visible{ 
    .... 
} 

но не работает .. Можно ли это сделать только с помощью CSS?

Спасибо

+0

Это не возможно с помощью CSS, вы для этого нужно использовать JavaScript. –

+0

Вместо того, чтобы спрятать элемент, попробуйте удалить/создать их (элементы '.showhide'). – Vucko

+0

Полезная аналогичная тема: http://stackoverflow.com/a/8539107/1725764 –

ответ

0
$(document).ready(function(){ 
    $("#test").on("click", function(){ 
     $(".showhide").toggle(); 
     if($(element).is(":visible")){ 
      // color odd rows 
     } 
    }); 
}); 

Вы должны проверить видимость элементов перед тем окраска их. Только цветные видимые нечетные элементы, а не все элементы в DOM (видимые или нет).

Я надеюсь, что помогает, есть хороший день :)

+0

Я ищу решение для CSS, я предпочитаю не использовать JS, если это возможно. В любом случае, спасибо! – BeNdErR

0

вы можете использовать следующие CSS (использование градиента CSS) без изменения каких-либо другой код:

* { 
    margin: 0; 
    padding: 0; 
} 
table { 
    padding: 0; 
    margin: 0; 
    border: none; 
    width: 100%; 
    background-image: 
    repeating-linear-gradient(white, white 1.2em, hotpink 1.2em, hotpink 2.4em); 
    border-collapse: collapse; 

} 
td,tr { 
    border: none; 
    padding: 0 5px; 
    line-height: 1.2em; 
    margin: 0; 
    border-collapse: collapse; 
} 
.showhide { 
    display: none; 
} 

.excludeme { 
    background: white; 
} 
+0

Что делать, если высота строки растет, если контент очень длинный и многострочный? – BeNdErR

+0

вы можете использовать цвета в соответствии с высотой линии. Предположим, что это X, тогда вам нужно добавить Css, например: repeat-linear-gradient (белый, белый X, hotpink X, hotpink 2X); –

+0

У меня нет контроля или прогноза на высоте линии: \ – BeNdErR

Смежные вопросы