Это все о порядке покраски .Псевдоэлемент является позиционированным элементом, поэтому он будет окрашен после содержимого, которое не позиционировано (этап (4), затем этап (8)).Обратите внимание, что изначально для обоих z-index
установлено значение auto.Теперь, если вы добавите z-index
к псевдоэлементу, вы распечатаете его на шаге (3), если вы установите отрицательное значение, или шаг (9), если вы установите положительный * 1008.* значение, таким образом, вам нужно отрицательное значение z-index
для рисования псевдоэлемента перед содержимым.
Что касается родительского элемента, установка его z-индекса создаст сложный констекст, заставляющий весь элемент внутри него быть нарисованным, учитываяэтот контекст стека, а не другой (шаг (8.1))
.box {
position: relative;
z-index: 0; /*remove this to see the difference*/
text-align: center;
padding: 20px;
background:red;
}
.box:before {
content: "";
display: block;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
background: #dddddd;
z-index: -1;
opacity: .5;
}
<div class="box">
<b>Click Input</b><br>
<input type="text" class="text">
</div>
Как видите, я добавил фон к родительскому элементу, и если вы удалите z-index
, этот фон покроет псевдоэлемент.В этом случае псевдоэлемент закрашивается с учетом того же контекста стека, что и родительский элемент, и поскольку он имеет отрицательный z-index
, он будет закрашен раньше.