Перекрывающиеся границы всегда немного сложны. В вашем случае я бы не рекомендовал работать с абсолютными позициями и z-индексами - это только усложнит ситуацию, и вы больше не сможете больше полагаться на собственное поведение элементов блока.
Допустим, что ваш HTML выглядит следующим образом:
<div class="parent">
<div class="child yellow"></div>
<div class="child blue"></div>
<div class="child red"></div>
</div>
Вы можете достигнуть иллюзию перекрывающихся детей, только применяя верхнюю границу к :first-child
. Даже если вы добавите больше дивы динамически в верхней части, первый всегда будет тот, который, как представляется, «сверху»:
.child {
border-style: solid;
border-width: 0 2px 2px 2px;
background: white;
}
.child:first-child {
border-top-width: 2px;
}
.yellow {
border-color: yellow;
}
.blue {
border-color: blue;
}
.red {
border-color: red;
}
Родитель нуждается в небольшой хак, потому что если вы добавили очередную границу вокруг он, будет отображаться вокруг детей.
.parent {
width: 500px; /* or any other width */
height: 100vh; /* or any other fixed height */
overflow-y: auto; /* make scrollable */
box-shadow: inset 2px 2px 0 black, inset -2px -2px 0 black;
}
Вставка box-shadow
создает иллюзию твердой границы на внутренней стороне родителя. Чтобы убедиться, что это не видно под границами детей (коробочные тени, как правило, немного размыты, чем границы), вы должны убедиться, что у детей цвет фона.
Редактировать: Here's a demo.
Что делать, если есть много div, которые не могут быть помещены в родительский контейнер? .. Вы хотите, чтобы родительский контейнер прокручивал? – repzero
Очень божественный вопрос @repzero - конечная цель заключается в том, что родительский контейнер всегда был высотой окна браузера, любое переполнение вдоль оси y должно прокручиваться –
[Вот пример с flexbox для управления высотой детей, если это интересно .] (https://jsbin.com/mocame/1/edit) – misterManSam