≪ Today I learned.
RSS購読
    公開日
    タグ
    CSS
    著者
    ダーシノ

    displayプロパティを使ったフェードイン/フェードアウトアニメーション

    displayプロパティを使った表示/非表示時のアニメーションは、transitionプロパティの対象にならずフェードイン・フェードアウトができなかった。アニメーションするにはJavaScriptでOpacityを変更し、時間経過でdisplayを切り替える必要があった。

    現在は、@starting-styletransition-behaviorを使うことで、CSSだけでフェードイン・フェードアウトのアニメーションが可能になった。

    @starting-styleでフェードインの初期状態を定義し、transition-behavior: allow-discreteで要素の離散アニメーション(フェードアウト)を実現している。

    なお、「離散アニメーション」とはdisplay: noneからdisplay: block(またはその逆)に切り替えるときなど、ゼロヒャクで切り替わるプロパティの間を補間するアニメーションのこと。

    <button id="toggle">Show/Hide</button>
    
    <div id="target">
      <p>...</p>
    </div>
    #target {
      display: none;
      opacity: 0;
      transition: opacity 1s, display 1s;
      transition-behavior: allow-discrete;
    
      &.show {
        display: block;
        opacity: 1;
    
        @starting-style {
          opacity: 0;
        }
      }
    }
    const item = document.querySelector('#target')
    const btn = document.querySelector('#toggle')
    
    btn.addEventListener('click', e => {
      item.classList.toggle('show')
    })

    デモ

    @starting-style + transition-behavior