Скрыть за
Я пытаюсь сделать простую мысль, но я застрял. У меня есть div "прокрутка" с фиксированной позиции. Когда я прокручиваю страницу, я хочу, чтобы div "scrolling" шел позади всех остальных div ниже.
Я положил пример в: пример JSFIDDLE
.scrolling{
top: 230px;
background-color:lightblue;
margin:auto;
width:100%;
text-align:center;
position:fixed;
}
Спасибо за помощь
4 ответа
Выполнимо с z-index
, Но чтобы z-index работал, он должен быть position: absolute
, position:fixed
, или же position:relative
,
.top{
width:auto;
background-attachment: fixed;
height:300px;
background-image: linear-gradient(pink, green);
}
.scrolling{
top: 230px;
background-color:lightblue;
margin:auto;
width:100%;
text-align:center;
position:fixed;
z-index:4;
}
<div class="top">
<div>
Hello
</div>
<div>
Hello
</div>
</div>
<div class="scrolling">
SCROLL
<br>
I want to stay behind the div grey
</div>
<div style="width:auto; height:50px; background-color:grey;position:relative;z-index:5">
</div>
<div style="width:auto; height:350px; background-color:grey;position:relative;z-index:5">
I want to be in displayed in front
</div>
Вам нужно использовать больше z-index для элемента, который вы хотите видеть, и использовать меньше z-index для элемента "позади".
Уверен, что (z index) это то, что вы хотите использовать здесь.
Я обновил вашу скрипку ниже. Индекс Z позволяет вам позиционировать спереди назад.
<div class="top">
<div>
Hello
</div>
<div>
Hello
</div>
</div>
<div class="scrolling">
SCROLL
<br>
I want to stay behind the div grey
</div>
<div class="front" style="width:auto; height:350px; background-color:grey;">
I want to be in displayed in front
</div>
.top{
width:auto;
background-attachment: fixed;
height:300px;
background-image: linear-gradient(pink, green);
z-index: 0;
}
.scrolling{
top: 230px;
background-color:lightblue;
margin:auto;
width:100%;
text-align:center;
position:fixed;
z-index: 0;
}
.front{
z-index: 1;
position: relative;
}
Чтобы ответить на ваш вопрос, вам необходимо понять такие понятия, как z-index
и / или как работает порядок наложения. Есть отличные статьи, в которых объясняется z-index, но мне особенно нравится то, что никто не сказал вам о z-index.
Фрагмент приведенной выше статьи:
Когда вы вводите свойство position в микс, любые позиционированные элементы (и их дочерние элементы) отображаются перед любыми позиционированными элементами. (Сказать, что элемент "позиционирован", означает, что он имеет значение позиции, отличное от статического, например, относительное, абсолютное и т. Д.)
Интересно, что есть свойство CSS3, которое делает нечто подобное. Вы можете решить вашу проблему без необходимости явного применения z-индекса, используя transform
,
Например, если мы применяем transform: translateX(0)
к вашему JSFiddle вы увидите, что серый div теперь находится над вашим текстом. Вот обновленная скрипка:
https://jsfiddle.net/gh94Lbad/
<div style="width:auto; height:50px; background-color:grey; transform: translateX(0)"></div>
<div style="width:auto; height:350px; background-color:grey;transform: translateX(0)">I want to be in displayed in front</div>
Причина transform
Работы (путем изменения контекста стека) объясняется в спецификации:
Для элементов, макет которых определяется блочной моделью CSS, любое значение, отличное от none, для свойства transform приводит к созданию контекста стека. Реализации должны рисовать слой, который он создает, в своем родительском контексте стека, в том же порядке стека, который был бы использован, если бы это был позиционированный элемент с z-index: 0. Если позиционируется элемент с преобразованием, свойство z-index применяется, как описано в [CSS2], за исключением того, что auto обрабатывается как 0, поскольку всегда создается новый контекст стека.
Изменить: Как указал @TemaniAfif, вероятно, лучше объяснить, как это работает, объяснив paint order
из ваших элементов:
Для этого вам нужно рассмотреть порядок рисования (w3.org/TR/css-position-3/#painting-order), где вы обнаружите, что преобразованный элемент окрашивается позже, поэтому он выше. (на этапе (8))