Почему свойство z-index не применяется к псевдоэлементу ::after?

Могу ли я использовать z-index для размещения псевдоэлемента ::after под блоком .text? Раньше я думал, что это возможно. Может быть, я что-то делаю не так? Вот мой пример кода в CodePen.
Изображение к вопросу
  • 3 октября 2023 г. 5:57
Ответы на вопрос 2
Псевдоэлементы (::before и ::after) всегда находятся ниже основного контента элемента и не могут быть размещены ниже других элементов, используя свойство z-index.

Это происходит из-за того, что у псевдоэлементов нет своего собственного пространства в структуре DOM. Они создаются непосредственно внутри выбранного элемента и являются его частью. Поэтому любые свойства, примененные к основному элементу, такие как z-index, также применяются к псевдоэлементам.

Однако, если вам требуется управлять относительным порядком или стеком позиционирования псевдоэлемента, вы можете использовать другие свойства, такие как position и transform, чтобы добиться нужного результата.

В вашем примере кода на CodePen, вы можете добиться желаемого эффекта с помощью следующих стилей:

.text {
  position: relative;
  z-index: 2;
  /* другие стили */
}

.text::after {
  content: "";
  position: absolute;
  top: 100%;
  left: 0;
  width: 100%;
  height: 100px;
  background-color: red;
  transform: translateZ(1px); /* Добавьте эту строку */
  /* другие стили */
}

Также обратите внимание, что для эффективного использования z-index должна быть задана позиция (например, relative, absolute или fixed) для элементов, с которыми вы хотите управлять порядком слоев. В вашем примере вы уже задали позицию relative для .text, поэтому применение z-index будет работать.
- Исключить использование атрибута z-index у родительского элемента.
- По вопросу, связанному с атрибутом z-index у родительского элемента, можно обратиться к данной теме на Stack Overflow: [ссылка]
Похожие вопросы