2012-03-03 3 views
1

Я пытаюсь использовать это, чтобы выбрать второй тег из списка:выбрать второй ребенок

.container li a:first-child + a { ... } 

, но это не похоже на работу. Есть ли другой, идеально чистый способ CSS (кроме a:nth-child(2)), или кто-нибудь может увидеть, где я ошибся?

+0

'+' оператор работает только для двух смежных элементов, между ними ничего не может быть – knittl

+3

Нет, мы не можем видеть, где вы поступили неправильно, пока не увидели ваш HTML. – BoltClock

ответ

5

Убедитесь, что <li> на самом деле имеет два <a> элементы, как его первых двух детей, и так как они могут быть недействительными :first-child и смежных одноуровневые селекторы не некоторые другие элементы вокруг них.

Если вы просто хотите, чтобы выбрать второй <a> элемент независимо от того, что других типов элементов находятся в вашем <li>, используйте этот селектор:

.container li a:nth-of-type(2) 

Если <li> будет иметь только ровно 2 <a> элементов, вы можно использовать общий родственный комбинатор ~ для бонусной поддержки IE7/IE8:

.container li a ~ a 

Или вы имеете в виду, чтобы найти <a> элемент во втором <li>, а не второй <a> элемент в <li> (так как «список», вероятно, относится к <ul> или <ol>)? Если это так, вы хотите один из этих селекторов:

.container li:first-child + li a 
.container li:nth-child(2) a 
+2

Или, вы знаете, вы можете просто изменить стили для последующих элементов, используя '.container li a ~ a ~ a'. – BoltClock

+1

+1 для 'a ~ a' и комментарий о' a ~ a ~ a' – FelipeAls

+0

@Felipe Alsacreations: Кажется, я помню вас за [пометку этого вопроса] (http://stackoverflow.com/revisions/3225891/3) с [css-selectors] некоторое время назад ... Я должен поблагодарить вас, поскольку я очень люблю селекторов CSS, и я думаю, что, наконец, я получу золотой значок за то, что я считаю довольно неясным тег сегодня. Так что спасибо большое! :) – BoltClock

3

Просто используйте :nth-of-type:

.container li a:nth-of-type(2) { 
    /* ... */ 
} 

Проблема здесь, вероятно, что первый <a> не первый ребенок, или второй <a> является не прилегающих к нему. Несмотря на это, :nth-of-type - это правильный способ сделать это.


Если у вас есть один <a> за <li>, то вы, вероятно, означает .container li:nth-of-type(2) a.

4

Я подозреваю, что ваши якоря в списке элементов:

<ul class="container"> 
    <li><a href="">...</a></li> 
    <li><a href="">...</a></li> 
    <li><a href="">...</a></li> 
</ul> 

В этом случае, вы должны переписать стиль:

.container li:first-child + li a { ... } 
+1

Вот почему OP всегда нужно поставить HTML-код в вопрос ... – BoltClock

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