Определяет ли z-index уровень стека непозиционированного гибкого элемента?
В CSS 2.1z-index
применяется только к позиционированным элементам и определяет две разные вещи:
НоFlexbox говорит это:
Гибкие предметы рисовать точно так же, как встроенные блоки[CSS21], Кроме этогоorder
- измененный порядок документов используется вместо порядка необработанных документов, иz-index
значения, отличные отauto
создать стековый контекст, даже еслиposition
являетсяstatic
.
Тогда, в отличие от CSS2.1, настройкаz-index
для некоторого целого числа на непозиционированном элементе flex создает контекст суммирования.
Тем не менее, я не вижу нигде определенного, который должен быть уровнем стека этого контекста стека.
Аналогичный случайopacity
, который также может создавать контексты наложения для непозиционированных элементов. Но в этом случае уровень стека правильно задан равным 0:
Если элемент с непрозрачностью меньше 1 не позиционирован, реализации должны закрасить созданный им слой в пределах своего родительского контекста стекирования в том же порядке, который был бы использован, если бы это был позиционированный элемент сz-index: 0
а такжеopacity: 1
.
На мой взгляд, эти варианты являются разумными:
Уровень стека - это значение, указанное вZ-индексУровень стека равен 0Гибкий элемент оборачивает своих потомков в контекст стекирования, так что они рисуются вместе, но сам гибкий элемент окрашивается как обычные не расположенные в потоке элементы (как если бы он не устанавливал контекст стека).Согласно следующему тесту, Firefox и Chrome делают первый выбор.
.container {
display: flex;
padding-left: 20px;
}
.item {
padding: 20px;
background: #ffa;
align-self: flex-start;
margin-left: -20px;
}
.item:nth-child(even) {
background: #aff;
margin-top: 40px;
}
.za::after{ content: 'z-index: auto'; }
.z0 { z-index: 0; } .z0::after{ content: 'z-index: 0'; }
.z1 { z-index: 1; } .z1::after{ content: 'z-index: 1'; }
.z-1 { z-index: -1; } .z-1::after{ content: 'z-index: -1'; }
<div class="container">
<div class="item z1"></div>
<div class="item z0"></div>
<div class="item za"></div>
<div class="item za"></div>
<div class="item z-1"></div>
</div>
Это поведение определено где-то?