Короткий ответ
Ваше правило соответствует любой группе из трех братьев и сестер, а не только первой группе.
Объяснение
CSS соседний братский комбинатор (+
) нацеливается на элемент сразу , следующий за родственным элементом.
Для контраста, общий братский комбинатор (~
) предназначается для элемента, следующего за родственным элементом (он не должен быть следующим).
Проблема с вашим правилом состоит в том, что оно соответствует двум сценариям.
Вот ваш код:
tbody > tr + tr + tr {
color: blue;
}
<table>
<tbody>
<tr><td>Hello</td></tr>
<tr><td>World</td></tr>
<tr><td>Should be blue</td></tr>
<tr><td>Should not be blue</td></tr>
</tbody>
</table>
tr + tr + tr
означает: выбрать строку таблицы, которая следует сразу за строкой таблицы, которая также сразу следует за строкой таблицы. У вас естьчетыре строки, так что ситуация существует в вашем коде дважды:
соответствует 1
![enter image description here](https://i.stack.imgur.com/Kmdje.png)
совпадение 2
![enter image description here](https://i.stack.imgur.com/A6fNO.png)
Другие потенциальные совпадения:
- Если бы у вас была одна строка, правило совпадало бы с 0раз.
- Если бы у вас было две строки, правило совпадало бы с 0 раз.
- Если у вас было три строки, правило совпадало бы один раз.
- Если у вас было пятьстрок, правило будет соответствовать три раза.
- Если бы у вас было шесть строк, правило совпадало бы четыре раза.
- и т. Д. *
CSS-идентификаторы, классы и pseudo-classes
существуют, чтобы помочь вам в подобных ситуациях.
Ссылки на MDN: