Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

CSSだけで棒人間をアニメーションさせて楽しむ

Last updated at Posted at 2017-01-12
1 / 21

自己紹介

名前:小林芳樹
@ykyk1218 1476028634.jpg

エンジニアブログによく登場します。
http://tech.basicinc.jp

Qiita
http://qiita.com/ykyk1218


今日はCSS3のアニメーションとかその辺のお話をします。

つくったやつ
https://s3-ap-northeast-1.amazonaws.com/awsyk/lt_allabout/prologue.html


解説


プロローグ


最初のロゴ

スクリーンショット 2017-01-13 17.48.19.png

text-shadowを使う

ロゴを小さくするアニメーション

@keyframes logo {
  0% { transform: scale(1); opacity: 1; }
  50% { opacity: 1; }
  100% { transform: scale(0.1); opacity: 0; }
}

文字の奥行きを出す

スクリーンショット 2017-01-13 17.57.01.png
transform: perspective(300px);

perspectiveが0だと真っ平(通常の状態)
値を大きくするごとに奥行きが深くなる


歩いてるところ


山っぽいやつ スクリーンショット 2017-01-13 17.58.32.png

background: linear-gradientで要素の指定した箇所に色をつける
余計なところをtransparentで透明にする。

background: linear-gradient(<開始位置と角度> <開始色> <途中色> <終了色>)

background:linear-gradient(
        45deg,
    red,
    red 50%,
    transparent 50%,
    transparent 100%);

Point:1 :point_up: 疑似要素でアニメーション

要素の方にアニメーションさせたいプロパティを指定して、それを継承(inherit)する

.mountain {
  top: 305px;
  right: 1px;
}

.mountain::before {
  content: "";
  display: block;
  position: absolute;
  top: inherit; 
  right: inherit;

びっくりするところ


背景の斜線

スクリーンショット 2017-01-13 17.59.51.png

background: linear-gradientで斜めにグラデーションをかけるようにする
1px分だけ残して他をtransparentで透明に

background: linear-gradient(to right bottom, transparent 49%, #333 50%, transparent 51%);
background-size: 30px;

バチバチするところ


視線をあわせた火花のところ スクリーンショット 2017-01-13 18.01.16.png

四角の要素をいくつか作って、回転をさせて重ねる

.star {
  width: 3em;
  height: 3em;
  background: #ef8905;
  transform: rotate(22.5deg);
}
  <div class="wrap-starburst">
    <div class="starburst">
      <div class="star"><div class="star"><div class="star"><div class="star">
      </div></div></div></div>
    </div>
  </div>

Point2: :point_up: widthをアニメーション

要素の幅をアニメーションさせていくとき、

positionをleftで指定すると左から右に大きくなっていく
positionをrightで指定すると右から左に大きくなっていく


かめはめ波っぽいものをうつところ


アニメーションを遅らせる

animation: <名前> <アニメーションの秒数> <アニメーションタイプ> <アニメーションが発動するタイミング> <アニメーションの繰り返し回数>

animation: hadoken-animation 0.1s ease 3s infinite;

今回は下記の3つを時間をずらして指定してある

  1. 拡大するアニメーション
  2. 構えるアニメーション
  3. 撃つアニメーション

Point3: :point_up: 最初に表示させたくない要素はopacity: 0で隠す

アニメーションを遅らせて実行する場合でも、html上には最初から要素はないとだめです。

そこで最初は非表示にしておきたい要素にはopacity: 0を指定して、アニメーション実行時にopacity: 1にして表示させます。


ばらばらの状態から戻る


アニメーションの途中の状態を指定

@keyframes head-animation {
  0% {top: 55px; left: 20px;}
  10% {top: 55px; left: 20px;}
  15% {top: 55px; left: 20px;}
  25% {top: 50px; left: 15px;}
  30% {top: 50px; left: 15px;}
  40% {top: 0px; left: 0px;}
  100% {top:0; left: 0;}
}

本当はtop、leftより要素を動かすアニメーションはtranslateを使ったほうがスムーズ
(translateはGPUを使ってアニメーションさせる)


おしまい

0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?