🌵
box-shadowのtransitionが効かないとき
こういうの作ったんですけどね
hoverした時にふわっとアニメーションさせたくて、transitionを設定してたんですけどね。
↓こういう感じで
.c-grid-item {
box-shadow:
-3px -3px 12px rgba(255, 255, 255, 0.7),
3px 3px 12px rgba(17, 17, 17, 0.3)
;
transition: box-shadow ease-in-out 0.5s;
&:hover {
box-shadow:
inset 3px 3px 12px rgba(17, 17, 17, 0.3),
inset -3px -3px 12px rgba(255, 255, 255, 0.7)
;
}
}
効かないんですね。この書き方。
はじめて知りました。
効く書き方
.c-grid-item {
box-shadow:
-3px -3px 12px rgba(255, 255, 255, 0.7),
3px 3px 12px rgba(17, 17, 17, 0.3),
inset 3px 3px 12px transparent,
inset -3px -3px 12px transparent
;
transition: box-shadow ease-in-out 0.5s;
&:hover {
box-shadow:
-3px -3px 12px transparent,
3px 3px 12px transparent,
inset 3px 3px 12px rgba(17, 17, 17, 0.3),
inset -3px -3px 12px rgba(255, 255, 255, 0.7)
;
}
}
アニメーション後の動きの部分を、一括で指定しておいてtransparentで透明化しておくんですね。
おお、ふわってなってくれた😚
効かない理由?
調べてもあんまり出てこなくて、これといった理由はわからないんですが・・・
もしかしたら、hover前のbox-shadowを上書きしてしまって、元の指定がなかったことになるからかなあとも思ったんですけど、他の要素だとそんなことないので。
やっぱり違うのかも。
正しい情報教えてください😂
Discussion
理由はよく分からないですがCSSでは「もともと無いものはtransitionできない」というパターンはありますよね。
display: none→display: blockへの変更時にアニメーションできないとか。確かに!
display: none→display: blockと同じような感じと捉えたら、今回のbox-shadowも理解できそうです😆catnoseさん、ありがとうございますー!
それは、CSS はプロパティ一部のみの追加・上書きはできず、プロパティごとの追加・上書きしかできないからです。
box-shadowに限らず、background、font、transform…すべてがそうです。また、transitionやanimationも関係ございません。例えば、
という設定があるとしましょう。これに、画像以外の部分の背景色を
#000にしたいとしましょう。background-color: #000;とすれば問題はありません。background-colorというプロパティごとの追加・上書きだからです。しかし
background: #000;とすると、上記の背景画像、リピート、背景位置がすべてデフォルト値に上書きされます。background: #000;はbackground: url(https://via.placeholder.com/300x200) no-repeat center;に対して背景色部分のみを追加・上書きするのではなく、backgroundごと上書きすることになります。もしbackgroundでやる場合は、background: #000 url(https://via.placeholder.com/300x200) no-repeat center;としなければなりません。ああ、
backgroundの説明がわかりやすいです!transitionもanimationも関係なかった!😂でも、私が最初に出した例で書いても動きそうと思う人は一定数いそうな気がしますね・・・
正しい情報を伝えていかなくては。
Kiteさん、ありがとうございます!😊
なるほど!すごく分かりやすくありがとうございます。