Применяется ко всем вложенным элементам, потому что вы используете комбинатор потомков (пробел) между селекторами:
.row.row-selected .row-data:nth-child(1) { }
Этот комбинатор нацелен на всех указанных потомков (не только потомков)) первого селектора.
Кроме того, целевой элемент (.row-data
) фактически является первым дочерним элементом (:nth-child(1)
) родительского элемента во всех случаях.
Вместоиспользуйте дочерний комбинатор (>
), который нацелен только на дочерние элементы элемента.
.row.row-selected > div:nth-child(1) {
background-color: #d5d5d5;
}
.row {
margin: 5px 0;
}
.row.row-selected {
border-left: 1px solid red;
}
<div class="row row-selected">
<div class="row-data">Foo1</div>
<div class="row" style="margin-left: 20px">
<div class="row-data">Foo1Child1</div>
</div>
<div class="row" style="margin-left: 20px">
<div class="row-data">Foo1Child2</div>
</div>
</div>
<div class="row">
<div class="row-data">Foo2</div>
<div class="row" style="margin-left: 20px">
<div class="row-data">Foo2Child1</div>
</div>
<div class="row" style="margin-left: 20px">
<div class="row-data">Foo2Child2</div>
</div>
</div>