LoginSignup
267
187

More than 5 years have passed since last update.

display: none; のDOMに対してtransitionを使う際の注意

Last updated at Posted at 2014-10-07

例えば、初期状態で

display: none;
opacity: 0;

としてあるDOMを、あるイベントによって

display: block;

にすると同時にopacityを1へとアニメーションしたい場合。
それをcssのtransitionを使って実現しようとすると、

css:

.hoge{
    display: none;
    opacity: 0;
    transition: opacity 1s linear 0s;
}

.hoge.show{
    display: block;
    opacity: 1;
}

と直感的に書いてしまいがちであるが、これではうまく動かない。
なぜならshowがクラス名として付与された時点で初めて

display: block;

となり、このタイミングでDOMが生成されているため。
従って、display: none; 状態のときの

opacity: 0;

というプロパティはtransitionのスタート値とはならず、 0 -> 1 へのアニメーションは走らない。

上記の仕様を実現するには、cssのanimationを使うと良い。

@keyframes show{
    from{
        opacity: 0;
    }
    to{
        opacity: 1;
    }
}

.hoge{
    display: none;
}

.hoge.show{
    display: block;
    animation: show 1s linear 0s;
}

※ベンダープレフィックスは割愛

267
187
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
267
187