В блочной модели z-index - это порядок перекрывающихся двумерных объектов. Геометрически говоря, z-индекс - это перпендикулярная ось z, которая пересекает координаты оси y и оси x.
Видимость элементов порядка стека зависит от их значений. Элементы с высоким значением имеют высокий приоритет видимости, и поэтому они перекрывают другие элементы в блочной модели, и элемент с более низким приоритетом даст результат. Однако для этого требуется размещение элементов в объектной модели документа (DOM).
DOM может отображать только элемент со свойством относительной, абсолютной и фиксированной позиции, а не статическим.
Это не требует, чтобы элемент был помещен сверху для большей видимости, и при этом это не требует, чтобы быть внизу для меньшей видимости. Пока элемент имеет высокое значение порядка z-index, все остальные элементы будут давать. Это означает, что он будет иметь высокий приоритет, который будет отображаться поверх других. Например, z-индекс со значением 1 имеет высокий приоритет над индексом со значением 0.
Если элемент-1 имеет z-индекс 1, а элемент-2 имеет z-индекс 0, элемент-1 будет иметь более высокий приоритет, и он будет на вершине порядка, а элемент-2 будет доходность из-за его более низкого приоритета.
Это ответ на ваш вопрос. Вы спрашиваете:
«Элемент № 1 находится над элементом № 2. Как это возможно?»
Как я сказал выше. Неважно, что выше или что ниже. Важным является значение приоритета z-индекса.
В вашем случае вы поместили элемент-1 с z-index: 3 выше и элемент-2 с z-index: 1000 ниже, думая, что элемент-1 будет иметь высокий приоритет из-за своей позиции DOM. Это неверно. Вы должны понимать, что HTML Sementic структурирует DOM, но CSS стилизует его или придает ему новый вид.
С z-index мы имеем дело с CSS, а не с HTML. Здесь мы не структурируем элементы, мы их стилизуем.
С вашими кодами выше, элемент-2 с z-index: 1000 имеет более высокий приоритет, и это тот, который должен быть поверх другого, независимо от его положения DOM.