2017-02-11 7 views
4

Я пытаюсь понять, почему этот селектор nth-of-type работает не так, как ожидалось. Моя цель состоит в том, чтобы сделать первый элемент .row красным, а все остальные после первого синего, оставив элементы зелеными, как есть.Попытка понять селектор css nth-of-type

https://jsfiddle.net/darrengates/pa34zyjd/14/

.wrapper div { 
 
    width: 200px; 
 
    background-color: green; 
 
    color: white; 
 
    margin: 5px; 
 
    padding: 5px; 
 
} 
 
.wrapper .row:nth-of-type(n+1) { 
 
    background-color: red; 
 
} 
 
.wrapper .row:nth-of-type(n+2) { 
 
    background-color: blue; 
 
}
<div class="wrapper"> 
 
    <div class="option">option</div> 
 
    <div class="button">some button</div> 
 
    <div class="row">I wanna be red</div> 
 
    <div class="row">I wanna be blue</div> 
 
    <div class="row">I wanna be blue</div> 
 
    <!-- all other row elements after the first should be blue --> 
 
</div>

+0

[Это] (http://stackoverflow.com/a/9313956/7094618) может помочь вам понять. – Faegy

+0

Ясное и лучшее описание Я еще не нашел здесь: https://css-tricks.com/almanac/selectors/n/nth-of-type/ – Sam0

+0

Возможный дубликат [nth-of-type vs nth-child] (http://stackoverflow.com/questions/9313769/nth-of-type-vs-nth-child); * этот [ответы] (http://stackoverflow.com/a/9313845/6381711) ваш вопрос и [это] (http://stackoverflow.com/a/42170738/6381711) ответ [Pangloss] (https://stackoverflow.com/users/483779/pangloss) может быть лучшим подходом, основанным на вашем сценарии. * – nyedidikeke

ответ

3

Селектор n-th-of-type относится к типу тега на том же уровне, не класс, в этом случае div метки, которые братья внутри .wrapper , Поэтому вам нужен этот CSS, так как они являются третьим и четвертым div там:

.wrapper .row:nth-of-type(n+3) { 
    background-color: red; 
} 
.wrapper .row:nth-of-type(n+4) { 
    background-color: blue; 
} 

https://jsfiddle.net/cb3qd8t6/

2

nth-* селекторы искать только для типа элемента не имя класса. В вашем примере, я хотел бы использовать ~ или + сделать это:

.wrapper div { 
 
    width: 200px; 
 
    background-color: green; 
 
    color: white; 
 
    margin: 5px; 
 
    padding: 5px; 
 
} 
 
.wrapper .row { 
 
    background-color: red; 
 
} 
 
.wrapper .row ~ .row { 
 
    background-color: blue; 
 
}
<div class="wrapper"> 
 
    <div class="option">option</div> 
 
    <div class="button">some button</div> 
 
    <div class="row">I wanna be red</div> 
 
    <div class="row">I wanna be blue</div> 
 
    <div class="row">I wanna be blue</div> 
 
    <!-- all other row elements after the first should be blue --> 
 
</div>

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

  • Нет связанных вопросов^_^