Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

【CSS】フラフープの動きを再現できるか挑戦してみました【実用性:???】

 どうも!LSSです!!

 

先日の記事、

little-strange.hatenablog.com

を応用して使っていただいた記事の中で、

mio20100501.hatenablog.com

コメント欄にて「最初は女の子がフラフープをまわす・・・をやろうと思ったのですが、フラフープが上手くいきませんでした。」と書いておられるのを見かけました。

 

フラフープ…だと奥行きを考慮する必要があり、輪が人を囲んで、人の後ろに隠れた部分の輪を見えないようにしながら動かす…という表現が必要になってきます。

 

それをCSSの3D表現でやってみたらどうなるかな?と思い、挑戦してみました!

 

 

フラフープ

 
 

 

 

コード

<style>
@keyframes hula{
0%{transform:translateY(30px) rotateX(80deg) rotateZ(0deg);}
50%{transform:translateY(30px) rotateX(87deg) rotateZ(360deg);}
100%{transform:translateY(30px) rotateX(80deg) rotateZ(720deg);}
}
@keyframes hitohula{
0%,100%{top:0px;left:115px;}
50%{top:0px;left:110px;}
}
.waku{
position:relative;
width:275px;
height:275px;
transform-style:preserve-3d;
perspective:450px;
}
.hito{
position:absolute;
width:50px;
height:275px;
background:linear-gradient(90deg,#ff8888 0% 100%);
animation:hitohula linear 1.5s infinite;
}
.foop{
position:absolute;
top:0px;
left:0px;
width:100%;
height:100%;
background:radial-gradient(80px circle at 35% 50%,#88ff8800 85%,#88ff88ff 85% 99.9%,#88ff8800 100%);
animation:hula linear 3s infinite;
}
</style>
<div class="waku">
<div class="hito"> </div>
<div class="foop"> </div>
</div>

 

 

人…?

とりあえず、フラフープを回してる人…の代わりに、

.hito{
position:absolute;
width:50px;
height:275px;
background:linear-gradient(90deg,#ff8888 0% 100%);
animation:hitohula linear 1.5s infinite;
}

というコードを使用しています。

幅50ピクセル、高さ275ピクセルの要素を

background:linear-gradient(90deg,#ff8888 0% 100%);

ピンクでベタ塗り、HTMLのほうでは
<div class="hito"> </div>
の部分に当たりますが、この要素内に画像ファイルを入れてCSSのbackgroundの行を削除してもOKです。

 

フープも同様に、

background:radial-gradient(80px circle at 35% 50%,#88ff8800 85%,#88ff88ff 85% 99.9%,#88ff8800 100%);

とradial-gradientで描いていますが、

<div class="foop"> </div>

の中に画像ファイルを入れてもOKです。
CSSによって傾けているので、フープは楕円ではなく円の画像を用意する事になります。

 

 

と、作ってはみたものの…

実際に画像ファイルに置き換えたとして、位置調整がだいぶ大変かもです^^;

例えばフープの位置の高さは、

@keyframes hula{
0%{transform:translateY(30px) rotateX(80deg) rotateZ(0deg);}
50%{transform:translateY(30px) rotateX(87deg) rotateZ(360deg);}
100%{transform:translateY(30px) rotateX(80deg) rotateZ(720deg);}
}

この赤文字部分で行う事になります。(30pxとしていますが、これは中心より30px下にずらしている、という事になります。)

 

人の位置は、

@keyframes hitohula{
0%,100%{top:0px;left:115px;}
50%{top:0px;left:110px;}
}

この部分で上からの位置、左からの位置を指定。(アニメーションでわずかに左右に往復しています)

 

…うん、やはり実用性という点ではおおいに難がありますね^^;

単に「挑戦してみました」という内容でしたw

 

 

追記

background:radial-gradient(80px circle at 35% 50%,#88ff8800 85%,#88ff88ff 85% 99.9%,#88ff8800 100%);

↑コード中、上記赤文字部分、「100%」としていましたがiPhone対策のため「99.9%」に修正しました。

 

 

 

ってなとこで、今回はこのへんで!

次回もまた、よろしくお願いします^^