unitone で、スクロールで要素を固定する sticky を活用したレイアウトをノーコードで実装する方法

先日、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: stickyleft: 0 になるように設定してください。

他にもアイデア次第で色々な表現ができると思うので、色々試してみてください!(そして試した記事をアドベントカレンダーに登録してくれたらめちゃめちゃ嬉しいです(;_;)

inc2734のアバター

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です