CSS Web制作

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

2020年12月30日

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

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

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

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

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

じゅんぺいブログは、Web制作コーディングWordPress制作)の技術記事を中心に、約500記事公開しています。ぜひ他の記事も参考にしてみてください!
完全無料のプログラミングスクール『ZeroPlus Gate』
30日間でWeb制作を学べる無料のプログラミングスクールがこちら
いきなり数十万するプログラミングスクールは厳しい・・・という人のお試しに最適です。
現在は無料ですがいつ有料になるか分からないので、気になる方はお早めに👇
(有料になっていたらすいません🙇‍♂️)

\ 完全無料 /

ZeroPlus Gate公式サイト

毎日先着制!

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)などにシェアすると、いいねされてフォロワーが増えたりすることがあるよ!

 

  • この記事を書いた人

じゅんぺい

37歳からWeb制作とブログ開始。Web制作歴5年目でコーディングとWordPressオリジナルテーマ制作が中心。これまで120件以上を納品。当ブログ月間最高15万PVで、370記事以上はWeb制作の技術記事。コンテンツ販売→累計売上1200万円&1500部超え。X(旧Twitter)フォロワー7200人以上。2024年3月からブログの経験を活かしてライターとしても活動を開始。

-CSS, Web制作