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でなんとかうまくいってよかったです!
同じように困っている方の助けになれば幸いです!