ここでこれの他の例を見てきましたが、これを機能させるものを見つけることができません。ページのスクロール中にサイドバー(セクション)をスティッキーにします。位置:スティッキーは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を押し上げる)、グリッド行のセクションを開始します2ではなく1とラッパーコンテナ。
ナビゲーションもスティッキーであると仮定すると、セクションの上部にあるように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>
ここで直面している問題は、セクションブロックが全高を消費することです。大きすぎて固定できないため、固定されません。セクション内に子要素を配置し、その要素にスティッキ属性を指定して、機能させる必要があります。あなたの例に基づいて、私は単に「こんにちは」を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>
section
およびnav
にはposition: fixed
を使用します。たぶん、これはあなたが望むものに似ています:
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>