2013-07-12 3 views
-1

Я пытаюсь выделить элемент списка, которому предшествует элемент, зависающий.Почему этот элемент выбирает себя?

<ul> 
    <li><a href="#">link</a></li> <!-- this one should be highlighted when... --> 
    <li><a href="#">link</a></li> <!-- ...this one is hovered --> 
    <li><a href="#">link</a></li> 
    <li><a href="#">link</a></li> 
</ul> 

Однако селектор я использую, li + li:hover, по какой-то причине выбирает сам. li:hover + li выбрал li сразу после один парил, но мне нужен тот сразу до это. Я использую неправильный селектор?

Вот fiddle демонстрирует проблему:

+0

Я не думаю, что это возможно с помощью CSS, но затем снова, может быть, кто-то может просветить нас все – Huangism

+1

Селектор делает именно то, что оно должно быть. В настоящее время в чистом CSS нет способа выбрать элемент sibling _previous_ для элемента. Для этого нужен Javascript. – ScottS

+0

Вы не можете переместить 'DOM' в' CSS'. –

ответ

1

Селектор плюс выбирает элемент следующий плюс. Так li + li:hover ищу парили li сразу предшествует других li

См The Adjacent-Sibling Selector

Это пробел в CSS, что это, вероятно, лучше заполнено Javascript.

4

Комбинации CSS могут иметь доступ только к потомкам и более поздним братьям и сестрам. Они не могут получить доступ к предыдущим.

После CSS4 происходит вокруг, вы можете сделать это:

!li! + li:hover 

(Примечание: Синтаксис не завершен, насколько я знаю)

Однако, в то же время, попробуйте следующее:

ul, ul>li {transform:scaleY(-1)} 

И обратный порядок элементов в списке.

Demo

+0

Демо было тем, что я попробовал на начальном этапе. Итак, если я правильно понимаю, то, что я пытаюсь выполнить, невозможно до тех пор, пока CSS4 не будет принят, правильно? –

+0

Ваша первоначальная попытка включала 'transform'? –

+0

Интересная идея. Слишком плохо, что исходный порядок должен быть отменен. – ScottS

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