CSSでループするスライダーを斜めにして実装します。
まずはデモから!
See the Pen
斜めにスライダーさせる方法 by sayuri (@giraffeweb)
on CodePen.0
HTMLは割とシンプルな感じです。
liをdivに変えてもいいですし、liの中身にaタグやimgを突っ込んでもOKです。
<section id="keyIndex"> <div id="keyImages"> <div class="keyBlock flex"> <ul class="flex"> <li> <div class="flex box01"><p>BOX01</p></div> </li> <li> <div class="flex box02"><p>BOX02</p></div> </li> <li> <div class="flex box03"><p>BOX03</p></div> </li> </ul> </div> </div> </section>
肝心なCSSの解説です。
#keyIndex { position: relative; padding: 0; width: 100%; height: 100vh; }
↑↑↑↑↑↑
一番大枠のdivにrelativeを指定して、幅・高さも一緒に指定します。
#keyImages { position: absolute; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden; z-index: 50; .keyBlock { margin: 0 0 0 auto; width: 50%; height: 200%; -webkit-transform: rotate(45deg); transform: rotate(45deg); -webkit-transform-origin: 100% 40%; transform-origin: 100% 40%; } }
↑↑↑↑↑↑
さらにその中の親>子divには「position: absolute;」を指定します。
開始場所の指定がある場合はここで調整してください。
親>子>孫のdivはrotateを使用してここで斜めに傾けます。
また高さを大きくとるために200%と指定します。
transform-originで要素の変形transformにおける原点を指定します。
ul { webkit-animation: listDown 15s linear infinite; animation: listDown 15s linear infinite; flex-direction: column; transform: matrix3d(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 27, 0, 1); li { -webkit-transform: translateY(50%); transform: translateY(50%); div { transform: rotate(-45deg); width: 500px; height: 300px; background-color: #ddd; } } } @keyframes listDown{ from{ -webkit-transform:translate3d(0,0,0); transform:translate3d(0,0,0); } to{ -webkit-transform:translate3d(0,50%,0); transform:translate3d(0,50%,0)} }
↑↑↑↑↑↑
上から下へ移動するanimationを@keyframesで指定します。
liにtransformを指定しないと、要素も斜めになったままなので、ここでマイナス値を指定してあげます。
これでまっすぐになりました。
いやー!最初JSなどで挑戦したんですが全然うまくいかなくて…
CSSでなんとかうまくいってよかったです!
同じように困っている方の助けになれば幸いです!