この記事は Snow Monkey / unitone Advent Calendar 2024 7日目の記事です。まだまだ空きがたくさんあるので、ぜひお気軽にご参加ください!
先日、STUDIO がアップデートして position: sticky
(追従)が使えるようになった、という記事を見かけました。
そこに position: sticky
を使った作例の動画がいくつか載っていて、似たようなものが unitone でもノーコードでできそうだったので、そのやり方について書きたいと思います。
縦スクロールで要素を重ねる
セクションブロックを sticky
にして並べると、スクロールすると重なっていく表現ができます。
まず、セクションブロックを並べます。本当はセクションブロックを position: sticky
にしたいのですが、セクションブロックには設定がないので、それぞれのセクションブロックをデコレーターブロックで囲み、デコレーターブロックを position: sticky
にしてください。
現在セクションブロックに直接 position: sticky
を設定できるように準備中です!
そして、大事なのが top
も設定する、ということです。top
を設定しないと position: sticky
にしたとしてもちゃんと上で止まってくれないんです。
0
にするとブラウザの一番上で止まるようになるのですが、WordPress にログイン中で管理バーがでている場合、0
だと管理バーの下に食い込んでしまうので、管理バーがあるときは管理バーの高さ分止まる位置がずれるように、var(-wp--admin-bar--height, 0px)
と入力します。
横スクロールで要素を重ねる
STUDIO さんのページにある横スクロールで要素を重ねる動画は、右側はコンテナー幅を超えて要素がはみ出した状態になっていましたが、unitone ではそれはできなかったので、リールブロックを使ってコンテナー幅の中で横スクロールしながら重なるようにしてみました。
リールブロックは全幅・幅広にできないので、まずはセクションブロック(デコレーターブロックでも可)を配置して、その中にリールブロックを配置することにします。
配置できたら各項目の幅を設定します。例では max(50% - var(--unitone--gap) / 2, 240px)
と入力しました。
「なんで max(50% - var(--unitone--gap) / 2, 240px)
?なんか無駄に複雑じゃね?」と思う方もいると思うので一応解説を。
まず、2個並びにするために 50%
とします。すると gap
分ずれがでるのでその分を引いて調整が必要です。このとき、var(--unitone--gap)
とすると今リールに設定されている gap
の値がそのまま取れるので、それを使って calc(50% - var(--unitone--gap) / 2)
とします。
これで2個並びにはなるのですが、モバイルで2個並びだとちょっと幅がきついので、モバイルは1個並びにしたいなと。そういうときは max()
を使うと便利です。
max()
を使うと、その中で一番大きな値が使用されます。max(50% - var(--unitone--gap) / 2, 240px)
の場合は calc(50% - var(--unitone--gap) / 2)
と 240px
のどちらか大きいほうが使われるということですね。前者はパーセントを使っているから親の幅に応じて縮むから、240px
未満になったら 240px
のほうが使われる、という流れになります。
リールブロックの設定ができたら、その中に各項目をつくって、それぞれをデコレーターブロックで囲ってください。そしてデコレーターブロックが position: sticky
と left: 0
になるように設定してください。
他にもアイデア次第で色々な表現ができると思うので、色々試してみてください!(そして試した記事をアドベントカレンダーに登録してくれたらめちゃめちゃ嬉しいです(;_;)
コメントを残す