Хотя #two
является первым дочерним элементом #one
, а #three
- нет, #three
по-прежнему является первым дочерним элементом #two
. Таким образом, оба внутренних div
s получают стили.
Комбинатор-потомок (символ пробела) в вашем селекторе говорит браузеру выбрать любой div
на любом уровне вложенности от .test
, если он содержится где-то внутри элемента с этим классом. Псевдокласс :first-child
говорит, что нужно выбирать элемент только в том случае, если он является первым дочерним элементом его родителя, независимо от того, каким родительским элементом может быть , а не только элементом, представленным в левой части комбинатора.
Если вы хотите нацелиться только на первого ребенка .test
, используйте комбинатор дочерних элементов >
:
.test > div:first-child {}
Поскольку >
выражает отношения родитель-ребенок, можно с уверенностью подразумевать, что соответствующий родитель с div:first-child
представлен .test
.