Вот объяснение того, что пошло не так. Это был результат вашего селектора. Странность в том, как он воспроизводился, была вызвана вашей HTML-структурой и использованием querySelector.
div.rules :nth-child()
Сначала будет нацелен на элемент <div class="rules">
. Затем он будет искать всех элементов, которые являются n-ным дочерним элементом в этом div из-за пробела
между двумя селекторами. После этого с помощью querySelector
будет выбран первый элемент соответствующего набора.
Вот почему вы в итоге получили первый <div>
с :nth-child(1)
, потому что он фактически соответствовал каждому nth-потомку (1), но получение первого результата было совпадением с ожидаемым вами элементом.
Однако, :nth-child(2)
, соответствующий каждому второму дочернему элементу, был слишком широк от сети и в итоге получил второго дочернего элемента в первом div, и, поскольку это был первый результат, именно там появился красный фон.
Последнее любопытство :nth-child(3)
, казалось бы, действительно ударило по нужному элементу, было только потому, что во всем этом html есть только один третий дочерний элемент, и это был тот, который вы ожидали, хотя, как объяснялось по причинам, отличным от предполагаемых .