Подтвердить что ты не робот

Почему CSS-селектор с символом> sign (direct child) переопределяет стили по умолчанию?

Может ли кто-нибудь объяснить мне, почему знак CSS > (прямой дочерний элемент) переопределяет цвет по умолчанию для всех тегов <li> в этом примере:

ul > li {
  color:red;
}
<ul>
  <li>This should be red
    <ol>
      <li>default color 1</li>
      <li>default color 2</li>
    </ol>
  </li>
  <li>And this should be red also
    <ol>
      <li>default color 3</li>
      <li>default color 4</li>
    </ol>
  </li>
</ul> 
4b9b3361

Ответ 1

Проблема не является дочерним комбинатором (>), это свойство color, которое наследуется.

Хотя исходное значение свойства color варьируется от браузера к браузеру, обычно используется inherit. Это означает, что цвет текста элемента наследуется от родителя. Вы видите это в своем коде.

Напротив, свойство border не наследуется. Обратите внимание, что, в отличие от цвета текста, оно применяется только к целевому li:

ul > li {
  color: red;
  border: 1px solid black;
}

li { border: 1px solid inherit !important; }
<ul>
  <li>This should be red
    <ol>
      <li>default color 1</li>
      <li>default color 2</li>
    </ol>
  </li>
  <li>And this should be red also
    <ol>
      <li>default color 3</li>
      <li>default color 4</li>
    </ol>
  </li>
</ul>

Ответ 2

Значение по умолчанию для свойства color для большинства элементов inherit, а не black. Это означает, что он принимает любое значение, которое имеет элемент parent (ol). (И что после ol наследуется от красного li).

Вам нужно будет установить явный цвет, чтобы переопределить его. Например:

ul > li li {
   color: black;
}

или

ol > li {
   color: black;
}

Ответ 3

ol наследует стили. Вам нужно будет указать стили для внутреннего списка.