Result
スクロール追従するページ内ナビゲーションのCSSオンリーvaer.です。
scroll-behaviorによるスムーズなスクロールと、ページ内ナビゲーションの現在地の明示も再現されています。
css
html { scroll-behavior: smooth; } .section-nav { width : 15em ; position : fixed ; top : 2 rem; right : 2 rem; padding-left : 0 ; border-left : 1px solid #ddd ; background-color : rgb ( 0 0 0 / 0 ); } section:nth-of-type(even) { padding-bottom : 70 rem; } section:nth-of-type( 1 ) { background : right 2 rem top 2 rem / 15em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type( 2 ) { background : right 2 rem top calc( 2 * var(--linkheight)) / 15em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type( 3 ) { background : right 2 rem top calc( 3 * var(--linkheight)) / 15em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type( 4 ) { padding-bottom : 0 ; background : right 2 rem top calc( 4 * var(--linkheight)) / 15em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type( 4 ) section:nth-of-type( 1 ) { background : right 2 rem top calc( 5 * var(--linkheight)) / 14em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type( 4 ) section:nth-of-type( 2 ) { background : right 2 rem top calc( 6 * var(--linkheight)) / 14em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type( 4 ) section:nth-of-type( 3 ) { background : right 2 rem top calc( 7 * var(--linkheight)) / 14em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type( 4 ) section:nth-of-type( 4 ) { background : right 2 rem top calc( 8 * var(--linkheight)) / 14em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type( 4 ) section:nth-of-type( 5 ) { background : right 2 rem top calc( 9 * var(--linkheight)) / 14em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type( 4 ) section:nth-of-type( 6 ) { background : right 2 rem top calc( 10 * var(--linkheight)) / 14em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type( 4 ) section:nth-of-type( 7 ) { background : right 2 rem top calc( 11 * var(--linkheight)) / 14em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type( 4 ) section:nth-of-type( 8 ) { background : right 2 rem top calc( 12 * var(--linkheight)) / 14em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type( 5 ) { background : right 2 rem top calc( 13 * var(--linkheight)) / 15em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type( 6 ) { background : right 2 rem top calc( 14 * var(--linkheight)) / 15em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type( 7 ) { background : right 2 rem top calc( 15 * var(--linkheight)) / 15em var(--linkheight) no-repeat linear-gradient ( #ccc , #ccc ); } section:nth-of-type(n), section:nth-of-type( 4 ) section:nth-of-type(n){ background-attachment : fixed ; } |
スクロールはscroll-behavior: smooth;
ですが、初見でどうやってるのか分からなかったのがナビゲーションの背景でした。
こちらはやや力業ですがbackground-attachment: fixed;
を使っているようです。
section:nth-of-type(n), section:nth-of-type( 4 ) section:nth-of-type(n){ background-attachment : fixed ; } |
でスクロールに合わせて背景を固定し、個別に位置調整してるみたいですね。
あまり実用的ではない印象ですが、少し驚いたので備忘録としてメモしようと思います。
can i use
↑ 残念ながらSafariが未だに全滅です。対応する気はないのかなという気がしてきます。
↑ そして
background-attachment: fixed;
もスマホで相変わらず微妙です。
現状はJSに頼る事になりそうですね。