Применить CSS ко всем div в контейнере до текущего div
Допустим, у нас есть этот макет:
<div id="container">
<div></div>
<div></div>
<div class="current"></div>
<div></div>
<div></div>
</div>
С некоторыми CSS:
#container div {
width: 20px;
height: 20px;
}
Как я могу сделать все div перед и включать div (внутри #container
) с классом current
, иметь тот же цвет фона, например. background: tomato;
? И обновляется, если переменная div, на которой изменяется class="current"
?
Итак, в приведенном выше примере первые три div в контейнере будут иметь цвет фона томатов.
Ответы
Ответ 1
Вы можете использовать общий селектор .
#container div {
width: 20px;
height: 20px;
background-color:tomato;
}
#container .current ~ div {
background-color:transparent;
}
<div id="container">
<div>1</div>
<div>2</div>
<div class="current">3</div>
<div>4</div>
<div>5</div>
</div>
Ответ 2
вот другой способ его работы
http://jsfiddle.net/27LjLqm2/
<div id="container">
<div>1</div>
<div>2</div>
<div class="current">3</div>
<div>4</div>
<div>5</div>
</div>
#container div {
width: 20px;
height: 20px;
background:tomato;
}
#container div:nth-last-child(-n+2){
background:transparent;
}
мы нацеливаем последний DIV списка
"-n" находится под пятым div, так что +2 заставит нас перейти к вершине дважды.
использование "+1" сделает прозрачный "div 5".
+2 будет проходить весь путь от "div 5 до div 4" и сделать их фон прозрачным.
вы можете немного поиграть с ним, используя +3, затем +4, чтобы увидеть, что изменилось.
Ответ 3
в то время как вы отметили JQuery.. в jQuery вам нужно использовать . prevAll ('div')
$(document).ready(function(){
$('.current').prevAll('div').css('background','tomato');
});
и вы запрашиваете первые 3 divs
$(document).ready(function(){
$('.current').css('background','tomato').prevAll('div').css('background','tomato');
});
Демо
Ответ 4
#container div:not(.current ~ div) {
background: red;
}
Хорошая поддержка браузера тоже