🌵
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さん、ありがとうございます!😊
なるほど!すごく分かりやすくありがとうございます。