サイドバーやコンテンツで一定範囲、スクロールに追随する要素の作り方のご紹介です。
まずは、デモで動きを確認してみよう。
DEMO
1
2
3
4
5
6
7
8
9
10
HTML
<div class="demo1"> <div class="demo1_contents"> <p><span>1</span></p> <p><span>2</span></p> <p><span>3</span></p> <p><span>4</span></p> <p><span>5</span></p> <p><span>6</span></p> <p><span>7</span></p> <p><span>8</span></p> <p><span>9</span></p> <p><span>10</span></p> </div> </div>
CSS
.demo1 { width: 100%; height: 500px; overflow-y: scroll; overflow-x: hidden; border: 1px solid #c3c3c3; border-radius: 24px; } .demo1_contents { width: 100%; height: 6000px; } .demo1_contents p { width: 100%; height: 600px; margin: 0; } .demo1_contents p span { position: -webkit-sticky; position: sticky; top: 50%; left: 0; -webkit-transform: translateY(-50%); transform: translateY(-50%); width: 10%; height: 76px; display: block; color: #fff; font-weight: bold; font-size: 33px; padding-top: 8px; text-align: center; } .demo1_contents p:nth-of-type(1) span { background: #e04b4b; left: 0%; } .demo1_contents p:nth-of-type(2) span { background: #e0a04b; left: 10%; } .demo1_contents p:nth-of-type(3) span { background: #e0da4b; left: 20%; } .demo1_contents p:nth-of-type(4) span { background: #9ae04b; left: 30%; } .demo1_contents p:nth-of-type(5) span { background: #4be079; left: 40%; } .demo1_contents p:nth-of-type(6) span { background: #4bd7e0; left: 50%; } .demo1_contents p:nth-of-type(7) span { background: #4b56e0; left: 60%; } .demo1_contents p:nth-of-type(8) span { background: #ac4be0; left: 70%; } .demo1_contents p:nth-of-type(9) span { background: #e04bb7; left: 80%; } .demo1_contents p:nth-of-type(10) span { background: #e04b4b; left: 90%; }
position:stickyの動きを解説
「position:sticky」は親要素の高さ分、固定される要素です。
固定される位置は「sticky」を指定している要素で決定します。
このデモでいうと、親要素は「.demo1_contents p」で固定する要素が「.demo1_contents p span」になります。
「sticky」を使う場合に、ベンダープレフィックスを付けないと、挙動がおかしくなるブラウザがあるので注意してください。
IE11とandroid4.4以下には対応していません。
Can I use|sticky
コメント