hoverで画像の色が暴れ出す!filter: hue-rotateとtransitionでCSSエフェクト3選

今回はfilter: hue-rotateで画像に「色相回転エフェクト」を効かせてtransitionで滑らかなアニメーションを実装してみました。
filter: blurも3つ目のアニメーションで使用しているので「ぼかしエフェクト」も確認できます。
htmlとcssだけしか使っていません。
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。

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

 

色相回転エフェクトのイメージはこちらです
コードを見る
<div class="bg-pic">
  <div class="pic">
    <div class="sm-pic" style="background-image : url('https://images.unsplash.com/photo-1444703686981-a3abbc4d4fe3?ixlib=rb-1.2.1&auto=format&fit=crop&w=1650&q=80');">
    </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: 1.8s linear;
  /* アニメーションの滑らかさを調整 */
  outline: none;
  /* クリックした際の画像の枠(outline)が表示されなくなる */
  box-shadow: -5px 5px 5px gray;
  /* 画像に影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、色) */
  filter: hue-rotate(0deg);
  /* 色相回転の回転角度を指定 */
}
/* ホバー後の変化 */
.pic:hover .sm-pic {
  filter: hue-rotate(1200deg);
  /* 色相回転の回転角度を指定 */
}

 

1. 画像がイルミネーションみたいに光りながら回転する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>TREND</h1>
        <p>Don't miss it</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: .7s linear;
  /* アニメーションの滑らかさを調整 */
  outline: none;
  /* クリックした際の画像の枠(outline)が表示されなくなる */
  box-shadow: -5px 5px 5px gray;
  /* 画像に影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、色) */
  filter: hue-rotate(0deg);
  /* 色相回転の回転角度を指定 */
}
.heading {
  display: block;
  padding          : 1px;
  background-color : whitesmoke;
  border-radius: 10px;
  width            : 100%;
  height           : 100%;
  font-family : georgia;
  color       : #888888;
  opacity : 0;
  transition : opacity 1.0s;
}
.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(0deg);
  /* Z軸(平面回転の軸)の回転角度を設定(Z軸はrotateのデフォルト) */
  opacity : 1;
  transition : opacity .5s .5s;
  /* hover後に文字と背景が現れる時間を指定 */
}
.pic:hover .sm-pic {
  transform: rotateZ(360deg);
  box-shadow: 0 0 0;
  filter: hue-rotate(1000deg);
  /* 色相回転の回転角度を指定 */
}
ここがポイント!
  1. filter: hue-rotateで色相回転の角度を指定(角度を大きくするとクラブのような臨場感も出せたりします)
  2. transform: rotateYで横回転のアニメーションを実現
  3. transitionプロパティを指定して滑らかなエフェクトを実現

 

2. 臨場感あふれる花火画像が立体的に回転する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: 1.5s linear;
  /* アニメーションの滑らかさを調整 */
  outline: none;
  /* クリックした際の画像の枠(outline)が表示されなくなる */
  box-shadow: -5px 5px 5px gray;
  /* 画像に影をつける(左から水平方向の長さ、垂直方向の長さ、ぼかしの長さ、色) */
  filter: hue-rotate(0deg);
  /* 色相回転の回転角度を指定 */
}
.heading {
  display: block;
  padding          : 1px;
  background-color : whitesmoke;
  border-radius: 10px;
  width            : 100%;
  height           : 100%;
  font-family : georgia;
  color       : #888888;
  opacity : 0;
  transition : opacity 1.4s;
}
.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(0deg);
  /* Z軸(平面回転の軸)の回転角度を設定(Z軸はrotateのデフォルト) */
  opacity : 1;
  transition : opacity 1.0s 1.0s;
  /* hover後に文字と背景が現れる時間を指定 */
}
.pic:hover .sm-pic {
  transform: rotateX(180deg)rotateY(180deg)rotateZ(180deg);
  box-shadow: 0 0 0;
  filter: hue-rotate(1500deg);
  /* 色相回転の回転角度を指定 */
}
ここがポイント!
  1. filter: hue-rotateで色相回転の角度を指定
  2. transitionプロパティをhoverの前後で別々の時間で指定して滑らかなエフェクトを実現
  3. transform: rotateXYZの3つ指定で「超立体的なアニメーション」を実現

 

3. 色相回転しながらぼかしアニメーションを効かせて消えていくhoverエフェクト

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

コードを見る
<div class="container">
  <div class="image">
    <img src="https://images.unsplash.com/photo-1551607117-21fa129a211d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1720&q=80" style="background-size:cover;" class="img" alt="">
    <div class="background">
      <p>filter: blur</p>
    </div>
  </div>
</div>
.image {
  overflow: hidden;
  position: relative;
  display: flex;
  transition: 1500ms ease-in;
  /* エフェクトの速度調整 */
}
.background {
  display: block;
  z-index: -1;
  position: absolute;
  background-color: #fff;
  width: 350px;
  height: 220px;
  position: absolute;
  top: 0;
  left: 537px;
}
.background p {
  transition: 1500ms ease-in;
  margin-top: 90px;
  font-size: 25px;
  font-weight: bold;
}
/* hover前のスタイル */
img {
  transition: 1500ms ease-in;
  /* エフェクトの速度調整 */
  margin: 0 auto;
  width: 350px;
  height: 220px;
  cursor: pointer;
  filter: hue-rotate(0deg);
  /* 色相回転の回転角度を指定 */
}
/* hover後のスタイル */
img:hover {
  opacity: 0;
  filter: blur(50px);
  /* ぼかしの回転角度を指定 */
  filter: hue-rotate(1500deg);
  /* 色相回転の回転角度を指定 */
}
ここがポイント!
  1. filter: hue-rotateで色相回転の角度を指定
  2. hover前後に別々のfilter: blurを指定してかっこいいぼかしエフェクトを実現
  3. transitionプロパティを指定して滑らかなエフェクトを実現

参考

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

ふたご


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

ふたご

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

 

   話だけ聞いてみる