липкое положение на элементах сетки css
Я рассмотрел другие примеры этого здесь, но не могу найти тот, который делает эту работу. Я хочу, чтобы боковая панель (раздел) была липкой во время прокрутки страницы. позиция: липкие работы, если я надену его на nav, поэтому мой браузер def поддерживает его.
main {
display: grid;
grid-template-columns: 20% 55% 25%;
grid-template-rows: 55px 1fr;
}
nav {
background: blue;
grid-row: 1;
grid-column: 1 / 4;
}
section {
background: grey;
grid-column: 1 / 2;
grid-row: 2;
position: sticky;
top: 0;
left: 0;
}
article {
background: yellow;
grid-column: 2 / 4;
}
article p {
padding-bottom: 1500px;
}
<main>
<nav></nav>
<section>
hi
</section>
<article>
<p>hi</p>
</article>
</main>
Ответы
Ответ 1
секция нуждается в высоте, чтобы липкая для достижения желаемого эффекта и из-за потенциальных причуд с липкой (т.е. секция подталкивала бы по строке сетки 1, когда вы достигаете нижней части страницы), я бы начал секцию по строке сетки 1, а не 2 вместе с контейнером-контейнером.
предполагая, что ваш навигатор также липкий, я бы установил его z-индекс, чтобы он был поверх раздела.
Я также предлагаю использовать @support для использования фиксированных решений, о которых говорили другие.
main {
display: grid;
grid-template-columns: 20% 55% 25%;
grid-template-rows: 55px 1fr;
}
nav {
background: blue;
grid-row: 1;
grid-column: 1 / 4;
z-index: 2;
position: sticky;
top: 0;
}
section {
background: grey;
grid-column: 1 / 2;
grid-row: 1;
position: sticky;
top: 0;
left: 0;
height: 100vh;
}
section #contents {
position: relative;
top: 55px;
}
article {
background: yellow;
grid-column: 2 / 4;
}
article p {
padding-bottom: 1500px;
}
<main>
<nav></nav>
<section>
<div id="contents">
contents
</div>
</section>
<article>
<p>article</p>
</article>
</main>
Ответ 2
position: fixed
использования position: fixed
для вашего section
и nav
. Возможно, это похоже на то, что вы хотите:
body {
margin: 0;
}
nav {
background: blue;
height: 80px;
z-index: 9;
width: 100%;
position: fixed;
}
article {
width: 100%;
display: grid;
grid-template-columns: 20vw auto;
}
article p {
padding-bottom: 1500px;
}
section {
position: fixed;
width: 20vw;
background: grey;
height: 100%;
top: 80px;
}
.content {
margin-top: 80px;
position: relative;
grid-column-start: 2;
background: yellow;
}
<main>
<nav></nav>
<section>
hi
</section>
<article>
<div class="content">
<p>hi</p>
</div>
</article>
</main>
Ответ 3
проблема, с которой вы здесь сталкиваетесь, заключается в том, что ваш секционный блок занимает всю высоту. таким образом, это не будет придерживаться, так как это слишком большое, чтобы сделать это. вам нужно было бы поместить дочерний элемент в ваш раздел и дать ему свои липкие атрибуты, чтобы он работал. основываясь на вашем примере, я просто обернул ваше "привет" внутри div.
main {
display: grid;
grid-template-columns: 20% 55% 25%;
grid-template-rows: 55px 1fr;
}
nav {
background: blue;
grid-row: 1;
grid-column: 1 / 4;
}
section {
background: grey;
grid-column: 1 / 2;
grid-row: 2;
}
section div {
position: sticky;
top: 0;
}
article {
background: yellow;
grid-column: 2 / 4;
}
article p {
padding-bottom: 1500px;
}
<main>
<nav></nav>
<section>
<div>
hi
</div>
</section>
<article>
<p>hi</p>
</article>
</main>