Селектор Css ">" и "display:contents", каков ожидаемый результат?

Я работаю с display:contents CSS в паре с селектором element>element. Что касается Определение, свойство display:contents:

Makes the container disappear, making the child elements children of the element the next level up in the DOM

Итак, у меня есть этот пример кода:

.wrapper {
  background-color: red;
}

.hidden {
  display: contents;
}

.wrapper > .child {
  background-color: yellow;
}
<div class='wrapper'>
  <div class='hidden'>
    <div class='child'>I'm a child</div>
    <div class='child'>I'm a child</div>
  </div>

  <div class='child'>I'm a child</div>
  <div class='child'>I'm a child</div>
</div>

Я ожидал, что все дети будут с желтым фоном, потому что селектор element>element должен нацеливаться на них всех (они все находятся на одном уровне, когда свойство display:contents вступает в игру).

Почему это не так? Не может ли CSS таким образом нацеливаться на детей?

Селектор CSS учитывает только структуру DOM без применения к ней CSS. Та же логика, если вы используете display:none для элемента (например, jsfiddle.net/gca6bm9y), так что это логичный и ожидаемый результат.

Temani Afif 30.04.2019 15:41

Проверьте здесь объяснение: bitsofco.de/how-display-contents-works в основном не удаляет элемент, а вместо этого Только показывает содержимое элемента (текстовый узел, дочерние элементы). Также нет, это не относится к другим правилам CSS

elveti 30.04.2019 15:46
Улучшение производительности загрузки с помощью 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
2
624
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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

Из официальныйТехнические характеристики:

contents

The element itself does not generate any boxes, but its children and pseudo-elements still generate boxes and text runs as normal. For the purposes of box generation and layout, the element must be treated as if it had been replaced in the element tree by its contents (including both its source-document children and its pseudo-elements, such as ::before and ::after pseudo-elements, which are generated before/after the element’s children as normal).

Note: As only the box tree is affected, any semantics based on the document tree, such as selector-matching, event handling, and property inheritance, are not affected.

Жирная часть - это ответ, который вы ищете.

Также обратите внимание на предложение: следует рассматривать так, как если бы он был заменен в дереве элементов своим содержимым. Таким образом, элемент на самом деле не удаляется, но чтобы упростить объяснение, это подобно, элемент удаляется и заменяется его содержимым.


PS: избегайте использования www.w3schools.com в качестве официальной ссылки для точного определения, подобного этому. Они могут хорошо объяснять вещи в целом, но не могут дать точного определения.

Я думал отредактировать ваш ответ, чтобы включить визуализацию, но на всякий случай я поместил его в отдельный ответ. Кроме того, я вернулся.

BoltClock 02.09.2019 08:37

@BoltClock Ах, с возвращением :) .. вы пропустили несколько интересных вопросов, которые могут вам понравиться: stackoverflow.com/q/56238082/8620333 / stackoverflow.com/q/55653761/8620333 / stackoverflow.com/q/56186202/8620333

Temani Afif 02.09.2019 11:01

В дополнение к ответу Темани Афиф, вот визуализация того, как выглядит поддерево коробки для этого элемента с display: contents на .hidden:

<div class='wrapper'>
  <div class='child'>I'm a child</div>
  <div class='child'>I'm a child</div>

  <div class='child'>I'm a child</div>
  <div class='child'>I'm a child</div>
</div>

Действительно, он отображается так, как будто самого .hidden не было, а его собственные дети были вместо этого детьми .wrapper (и, в свою очередь, братьями и сестрами собственных детей .wrapper). По сути, это то, что означает display: contents.

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