CSS Web制作

【CSS】backgroundのlinear-gradientでtransitionが効かない時の対処法

※ 当サイトではアフィリエイト広告を利用しています

hoverでグラデーションの色をtransition使ってじんわり変化させたいけど上手くいかない??

例えばボタンの背景色をグラデーションにしていて、hover時にはグラデーションを反転させたいとします。

普通に反転させるだけなら問題ないのですが、transitionを使ってじんわり変化させようとすると上手くいきません。

これはbackgroundにはtransitionが効かないのが原因で、今回はその対処法について解説します。

 

完全無料のプログラミングスクール『ZeroPlus Gate』
30日間でWeb制作を学べる無料のプログラミングスクールがこちら
  • 30日間でWeb制作を学べる
  • 完全無料
  • 現役エンジニアへの質問無制限
  • オンラインの動画学習なので時間場所を問わず勉強可能
  • 最大4回の学習サポート面談
  • 受付は1日25名までの先着制
無料なのに専属のメンターが付き、現役エンジニアへの質問も無制限という破格のサービスです。
いきなり数十万するプログラミングスクールは厳しい・・・という人のお試しに最適。
現在は無料ですがいつ有料になるか分からないので、気になる方はお早めに👇

\ 完全無料 /

ZeroPlus Gate公式サイト

先着1日25名まで!

backgroundのlinear-gradientでtransitionが効かない時の対処法

まずはbackgroundでグラデーションにした場合で見てみましょう。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

文字色はtransitionが効いていますが、backgroundlinear-gradientを使った背景のグラデーションには効いていないのが分かります。

このグラデーションもじんわり変化させたいときは擬似要素を使います。

 

擬似要素とopacityで再現

擬似要素を使ってもbackgroundにはtransitionが効かない事には変わりないので、代わりに透過度を変化させるopacityを使って再現してみます。

See the Pen
Untitled
by junpei (@junpei-sugiyama)
on CodePen.

文字色は先ほどまでと同じように変化させています。

そして背景色は2つ重ねていて、hoverすると上の背景色が透明になって下にある反転した背景色が現れるということです。

またテキストと背景色の上下関係を意識しないとテキストが背景色の後ろに隠れてしまうので、ここではspanタグで囲いposition: relative;を設定しています(spanタグを使わない場合はz-indexをマイナスにしたりする必要があります)

コードはこちらです(CSSはレイアウトのためのスタイルは省略)

<div class="btn">
  <span>hover</span>
</div>
.btn {
  background: linear-gradient(to right,#87ceeb, #4169e1); /* 文字を上に表示するための記述 */
  color: #333;
  position: relative;
  transition: all 1s ease-out;
}
/* 文字を上に表示するための記述 */
.btn span {
  position: relative;
}
/* ボタンhover後の背景色 */
.btn::before {
  background: linear-gradient(to right, #4169e1, #87ceeb);
  content: "";
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  transition: all 1s ease-out;
  width: 100%;
}
/* ボタンhoverで文字色変更 */
.btn:hover {
  color: #f2f2f2;
}
/* ボタンhoverで元の背景色透過 */
.btn:hover::before {
  opacity: 0;
}



background-colorはtransitionが効く

おまけですが、background-colorにはtransitionが効きます。

See the Pen
ボタン(background-color)
by junpei (@junpei-sugiyama)
on CodePen.

background-colorの背景色と、colorの文字色はtransitionが効いてじんわり変化しているのが分かります。

まとめ

今回はbackgroundのlinear-gradientでtransitionが効かない時の対処法を解説しました。

マニアックな内容だと思いますが、この記事が参考になったというツイートを見たことがあるので、同じ現象で悩む人もいるかと思います。

以上になります。

この記事が役に立ったと思ったら、シェアボタンからX(旧Twitter)などにシェアすると、いいねされてフォロワーが増えたりすることがあるよ!

 

Web制作おすすめ教材と案件獲得サービス
当ブログではWeb制作学習におすすめの教材を厳選してご紹介しています。
こちらの記事を参考に教材を購入して成果を出している人もたくさんいるので、自分に必要な教材を探してみて下さい。
また、学習面だけでなく営業面である案件獲得サービスもご紹介しています。
スキルが身についても仕事がなければ意味がないので、営業に不安がある人はこちらの記事をぜひ参考にしてみて下さい。
この記事を参考にスキルと営業力を身につけて稼げるようになりましょう!

-CSS, Web制作