CSS `nth-child` абзац поведения против div?

У меня есть следующий код CSS:

article ul ul :nth-child(2) {
    border:1px solid black;
}

Которая выбирает каждый второй элемент в дереве dom, независимо от глубины дерева. (но он должен быть внутри ul, который должен быть внутри ul, который должен быть внутри article).

Но почему в этом примере не выбирается каждый второй элемент?

article ul ul :nth-child(2) {
  border: 1px solid black;
}
<article>
  <ul>
    <li>this not</li>
    <li>this not</li>
    <ul>
      <li>this not</li>
      <li>this</li>
      <p>
        <li>this not</li>
        <li>why not this?</li>
      </p>
    </ul>
  </ul>
</article>

Но когда я меняю элемент p на div, он работает. Кто-нибудь может это объяснить?

Вы должны исправить свой html на действительный html, тогда он будет работать. ul не может находиться внутри другого ul в детстве. Это должен быть элемент списка, а затем ul внутри элемента списка. Тег абзаца также должен находиться внутри элемента списка, а не быть дочерним элементом ul.

Huangism 13.07.2018 15:29

осмотрите элемент и вы увидите свою вину

Temani Afif 13.07.2018 15:35

См. это

Rohit Sharma 13.07.2018 15:36
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
2
3
47
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ваша разметка недействительна. ul может иметь только элементы li в качестве его непосредственных потомков. Кроме того, li является недействительным потомком p. Теги абзаца может содержать только формулировка содержания, который не включает li. Я предлагаю вам изучить следующий фрагмент, чтобы увидеть, как меняется ваш браузер, чтобы попытаться исправить свои ошибки разметки. По крайней мере, для хрома, это приводит к разделению тега абзаца на две части и размещению вложенных элементов li на том же уровне, что и другие.

article ul ul :nth-child(2) {
  border:1px solid black;
}
<article>
  <ul>
    <li>this not</li>
    <li>this not</li>
    <ul>
      <li>this not</li>
      <li>this</li>
      <p>
        <li>this not</li>
        <li>why not this?</li>
            </p>
    </ul>
  </ul>
</article>

Как уже упоминалось в @Huangism, ваш HTML недействителен.

От Страница MDN о ul:

Permitted content:
zero or more <li> elements, which in turn often contain nested <ol> or <ul> elements.

Вот пример того, как ваш дом должен быть структурирован, чтобы он работал:

article ul ul :nth-child(2) {
  border: 1px solid black;
}
<article>
  <ul>
    <li>this not</li>
    <li>this not</li>
    <li>
      <ul>
        <li>this not</li>
        <li>this</li>
        <li>
          <ul>
            <li>this not</li>
            <li>why not this?</li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>
</article>

Другие вопросы по теме