Я думал, что> selector только выбирает прямые дочерние элементы элемента (исключая унаследованные свойства), но следующий пример меня смутил:
<ul>
<li>Item 1</li>
<li>Item 2
<ol>Subitem 2
<li>Subitem 2A</li>
<li>Subitem 2B</li>
</ol>
</li>
<li>Item 3
<li>Subitem 3a
<li>Subitem 3aa
<ol>Subitem 3aaa
<li>Subitem 3aaaa
</li>
</ol>
</li>
</li>
</li>
<ol>Item 4</ol>
</ul>
ul>li {
color: green;
font-style:italic;
font-size:20px;
border:5px solid red;
}
Поэтому я пробую это, и это то, что я вижу в Chrome "Версия 30.0.1599.101 м":
Я пытался разобраться, как применяются правила, но я не понимаю его полностью:
Пункт 1,2,3: Получите все стили, потому что они прямые дети из ul и являются li
Пункт 4: Не получает никаких стилей, потому что это не li
Subitem 2-2B: Получите унаследованные стили цвета и шрифта, но не получите стили границы. Это потому, что они не прямые дети или потому, что они не ли?
Подпункт 3a и 3aa: Получить все styles-, почему? Они не являются прямым ребенком из ul. Его похоже, что> selector удаляет все дочерние элементы одного типа, пока они не будут прерваны элементом другого type-, это правильно?
Subitem 3aaa и 3aaaa: Dont получить стиль границы, но все равно получите унаследованные стили цвета и шрифта. Это потому, что они дети ли, у которых есть эти стили? Почему это?
Просто пытаюсь обернуть мою голову этим поведением.
Вы не можете вложить <li>
в <li>
без запуска другого <ul>
. Браузер автоматически закрывает <li>
.
<li>
имеет необязательный закрывающий тег. Браузер не вставляет <ul>
, он вставляет </li>
.
a >
означает любой элемент, который является прямым дочерним элементом предыдущего элемента (ов).
так....
ul li
означает, что любой li, который находится внутри ul, должен быть выбран.
ul>li
означает любое li, которое является прямым дочерним элементом, например <ul> <li>...
& not like <ul> <li> <p> <li> this last li wont get the styles...
сначала это сбивало с толку, но стало ясно очень быстро.
но в вашем случае, так как вы не ставите ul или ol перед запуском другого li. браузер добавляет один. И это делает непрямым li дочерний элемент ul и, следовательно, он также выбирается.
<li>
имеет необязательные теги закрытия, поэтому, если браузер видит еще один <li>
до корреспондирующего </li>
, он неявно вставляет закрытие для предыдущего тега. Вы можете проверить это, используя инспектор DOM в инструментах разработчика вашего браузера. Это означает, что пункт 3 "подпункты" на самом деле являются братьями и сестрами для пункта 3.
Жаль, что представленный html был плохо сформирован, потому что это только делает вещи более запутанными. Однако, даже если они хорошо сформированы, все вложенные lis будут по-прежнему иметь зеленый цвет, но у них не будет границ.
Зачем?
Из-за наследования - цвет, размер шрифта и стиль шрифта - все наследуемые свойства - граница - нет.
Это показывает ограничение прямого дочернего селектора - вы не можете использовать его со свойствами, которые наследуют.
Это потому, что у вас есть открытый тег li. Скажем, если вы должны закрыть элемент 3 с помощью </li>
сразу после пункта 3 вместо того, чтобы оставить его открытым. Тогда ол не станет зеленым. Но bc они открыты, ol является частью li.
<li>Item 3
<li>Subitem 3a
<li>Subitem 3aa
<ol>Subitem 3aaa
<li>Subitem 3aaaa
</li>
</ol>
</li>
<li>
внутри<li>
не<ol>
качестве непосредственного родителя<ul>
или<ol>
. Браузер предполагает, что вы хотели его вставить, и вставляет его для вас.