hoverとtransformで画像が回転するCSSアニメーション3選【3分で作れる!】

今回は画像にtransform: rotateとskewを多用して回転アニメーションを実装してみました。
htmlとcssだけしか使っていません。
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。

こちらのデザイン・コードはすべて完全オリジナルなのでコピペ大歓迎です。

 

 

1. 画像が立体的に傾くhoverアニメーション

動きは下の画像のような感じになります

実際の動きはこちらです
コードを見る
<div class="bg-pic">
  <div class="pic" style="background-image : url('https://source.unsplash.com/1000x801');">
    <div class="heading">
      <h1>Hello Japan</h1>
      <p>You are awesome!<br>love it here!</p>
    </div>
  </div>
</div>
.container {
  height: 350px;
}
.bg-pic {
  /* flexboxでcontainerの中身をど真ん中に設置 */
  display: flex;
  justify-content: center;
  align-items: center;
}
.pic {
  background-size: cover;
  display: block;
  margin: 0;
  width: 250px;
  height: 250px;
  border: none;
  color: #fff;
  border-radius: 10px;
  cursor: pointer;
  /* cursor: pointerを設定することでカーソルが画像の上にある時カーソルがpointerに変化 */
  transition: 0.5s linear;
  /* アニメーションの滑らかさを調整 */
  outline: none;
  /* クリックした際の画像の枠(outline)が表示されなくなる */
  box-shadow: -5px 3px 5px gray;
  /* 画像に影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、色) */
}
.heading {
  display: block;
  padding          : 1px;
  background-color : whitesmoke;
  border-radius: 10px;
  width            : 100%;
  height           : 100%;
  font-family : georgia;
  color       : #888888;
  opacity : 0;
  transition : opacity .8s;
}
.pic h1 {
  font-size: 30px;
  font-weight: bold;
  color: slategray;
  margin: 50px 0;
  text-align: center;
}
.pic p {
  font-size: 20px;
  font-weight: bold;
  color: slategray;
  text-align: center;
}

/* ホバー後の変化 */
.pic:hover .heading {
  opacity : 1;
  transition : opacity .3s .3s;
  /* hover後に文字と背景が現れる時間を指定 */
}
.pic:hover {
  transform: skew(5deg);
  /* 加える傾斜の角度を指定 */
  box-shadow: -4px 12px 5px gray;
}
ここがポイント!
  1. flexboxを使って画像をcontainerの真ん中に設置
  2. hoverを使うことでカーソルが画像の上にある時の挙動を指定
  3. transform : skewで画像に角度を指定して傾けるアニメーションを実現
  4. transitionプロパティを指定して滑らかなアニメーションを実現

 

2. 画像が360°横回転するhoverアニメーション 

動きは下の画像のような感じになります

実際の動きはこちらです
コードを見る
<div class="bg-pic">
  <div class="pic" style="background-image : url('https://source.unsplash.com/1000x800');">
    <div class="heading">
      <p>Never be afraid to try</p>
      <p>Be afraid not to try</p>
    </div>
  </div>
</div>
.container {
  height: 350px;
}
.bg-pic {
  /* flexboxでcontainerの中身をど真ん中に設置 */
  display: flex;
  justify-content: center;
  align-items: center;
}
.pic {
  background-size: cover;
  display: block;
  margin: 0;
  width: 250px;
  height: 250px;
  border: none;
  color: #fff;
  border-radius: 10px;
  cursor: pointer;
  /* cursor: pointerを設定することでカーソルが画像の上にある時カーソルがpointerに変化 */
  transition: 0.5s linear;
  /* アニメーションの滑らかさを調整 */
  outline: none;
  /* クリックした際の画像の枠(outline)が表示されなくなる */
  box-shadow: -5px 5px 5px gray;
  /* 画像に影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、色) */
}
.heading {
  display: block;
  padding          : 1px;
  background-color : whitesmoke;
  border-radius: 10px;
  width            : 100%;
  height           : 100%;
  font-family : georgia;
  color       : #888888;
  opacity : 0;
  transition : opacity .8s;
}
.pic p {
  margin-top: 50px;
  font-size: 20px;
  font-weight: bold;
  color: slategray;
  text-align: center;
}
/* ホバー後の変化 */
.pic:hover .heading {
  opacity : 1;
  transition : opacity .3s .3s;
  /* hover後に文字と背景が現れる時間を指定 */
}
.pic:hover {
  transform: rotateY(-360deg);
  /* Y軸(横軸)の回転角度を設定 */
  box-shadow: -5px 5px 5px gray;
}
ここがポイント!
  1. flexboxを使って画像をcontainerの真ん中に設置
  2. hoverを使うことでカーソルが画像の上にある時の挙動を指定
  3. transform: rotateYで横回転のアニメーションを実現
  4. transitionプロパティを指定して滑らかなアニメーションを実現

 

3. 画像が平面で回転するhoverアニメーション

動きは下の画像のような感じになります

実際の動きはこちらです
コードを見る
<div class="bg-pic">
  <div class="pic">
    <div class="sm-pic" style="background-image : url('https://source.unsplash.com/1000x802');">
      <div class="heading">
        <h1>Hello Japan</h1>
        <p>You are awesome!<br>love it here!</p>
      </div>
    </div>
  </div>
</div>
.container {
  height: 350px;
}
.bg-pic {
  /* flexboxでcontainerの中身をど真ん中に設置 */
  display: flex;
  justify-content: center;
  align-items: center;
}
.sm-pic {
  background-size: cover;
  display: block;
  margin: 0;
  width: 250px;
  height: 250px;
  border: none;
  color: #fff;
  border-radius: 10px;
  cursor: pointer;
  /* cursor: pointerを設定することでカーソルが画像の上にある時カーソルがpointerに変化 */
  transition: 0.5s linear;
  /* アニメーションの滑らかさを調整 */
  outline: none;
  /* クリックした際の画像の枠(outline)が表示されなくなる */
  box-shadow: -5px 5px 5px gray;
  /* 画像に影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、色) */
}
.heading {
  display: block;
  padding          : 1px;
  background-color : whitesmoke;
  border-radius: 10px;
  width            : 100%;
  height           : 100%;
  font-family : georgia;
  color       : #888888;
  opacity : 0;
  transition : opacity .8s;
}
.pic h1 {
  font-size: 30px;
  font-weight: bold;
  color: slategray;
  margin: 50px 0;
  text-align: center;
}
.pic p {
  font-size: 20px;
  font-weight: bold;
  color: slategray;
  text-align: center;
}

/* ホバー後の変化 */
.pic:hover .heading {
  transform: rotate(180deg);
  /* Z軸(平面回転の軸)の回転角度を設定(Z軸はrotateのデフォルト) */
  opacity : 1;
  transition : opacity .3s .3s;
  /* hover後に文字と背景が現れる時間を指定 */
}
.pic:hover .sm-pic {
  transform: rotate(-180deg);
  box-shadow: 0 0 0;
}
ここがポイント!
  1. flexboxを使って画像をcontainerの真ん中に設置
  2. hoverを使うことでカーソルが画像の上にある時の挙動を指定
  3. transform: rotateでZ軸の回転角度を設定し平面での回転アニメーションを実現
  4. transitionプロパティを指定して滑らかなアニメーションを実現

参考

そもそもWebデザインの基礎がわからない。。
そんなあなたにはこれ!

ふたご


でもなあ、独学だと心配だしプログラミングスクールで学びたい!。かといってお金はかけたくないし。。
そんなあなたにはこれ!

ふたご

完全無料で一人前のエンジニアになれるプログラミングスクールあります
  1. プログラミング学習&サポートが無料!
  2. 誰もが知っている超優良企業への就職サポート付き!
  3. 学習言語:Java、PHP、HTML、CSSなど

 

   話だけ聞いてみる