CSS3トランジション-フェードアウト効果


96

純粋なCSSで「フェードアウト」効果を実装しようとしています。これがフィドルです。私はオンラインでいくつかの解決策を調べましたが、オンラインドキュメントを読んだ後、スライドアニメーションが機能しない理由を理解しようとしています。ポインタはありますか?

.dummy-wrap {
  animation: slideup 2s;
  -moz-animation: slideup 2s;
  -webkit-animation: slideup 2s;
  -o-animation: slideup 2s;
}

.success-wrap {
  width: 75px;
  min-height: 20px;
  clear: both;
  margin-top: 10px;
}

.successfully-saved {
  color: #FFFFFF;
  font-size: 20px;
  padding: 15px 40px;
  margin-bottom: 20px;
  text-align: center;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
  background-color: #00b953;
}

@keyframes slideup {
  0% {top: 0px;}
  75% {top: 0px;}
  100% {top: -20px;}
}

@-moz-keyframes slideup {
  0% {top: 0px;}
  75% {top: 0px;}
  100% {top: -20px;}
}

@-webkit-keyframes slideup {
  0% {top: 0px;}
  75% {top: 0px;}
  100% {top: -20px;}
}

@-o-keyframes slideup {
  0% {top: 0px;}
  75% {top: 0px;}
  100% {top: -20px;}
}
<div class="dummy-wrap">
  <div class="success-wrap successfully-saved">Saved</div>
</div>

回答:


96

代わりにトランジションを使用できます。

.successfully-saved.hide-opacity{
    opacity: 0;
}

.successfully-saved {
    color: #FFFFFF;
    text-align: center;

    -webkit-transition: opacity 3s ease-in-out;
    -moz-transition: opacity 3s ease-in-out;
    -ms-transition: opacity 3s ease-in-out;
    -o-transition: opacity 3s ease-in-out;
     opacity: 1;
}

3
最近はブラウザのプレフィックスは必要ありません。単純な古い...遷移:不透明度3sイーズインアウト;
danday74

177

これを行う別の方法があります。

フェードイン効果

.visible {
  visibility: visible;
  opacity: 1;
  transition: opacity 2s linear;
}

フェードアウト効果

.hidden {
  visibility: hidden;
  opacity: 0;
  transition: visibility 0s 2s, opacity 2s linear;
}

UPDATE 1: 最新のチュートリアルCSS3トランジション:show要素を非表示にするfadeInおよびfadeOutのようなエフェクトツールチップの例:サンプルコードを使用してCSS3トランジションを使用して非表示のヒントまたはヘルプテキストを表示する

UPDATE 2: (@ big-moneyから要求された詳細を追加)

(visibleクラスに切り替えることで)要素を表示するときは、visibility:visibleを即座に開始する必要があるため、opacityプロパティのみを遷移しても問題ありません。また、要素を非表示にする場合(非表示クラスに切り替えることにより)、visibility:hidden宣言を遅らせて、最初にフェードアウト遷移を確認できるようにします。これを行うには、可視性プロパティで遷移を宣言します。期間は0で、遅延はあります。詳細な記事はこちらでご覧いただけます。

私は答えるには遅すぎることを知っていますが、他の人の時間を節約するためにこの答えを投稿します。お役に立てば幸いです!!


10
いい答えです。display:none「非表示」アニメーションが終了したときにボックスを消去するために追加したいと思っています。何か考えはありますか?
アポロ2014

1
私はあなたがここで必要なものではないんだけど、あなたは試すことができますdisplay:blockの代わりvisibility: visible.visibleクラス同様display:noneの代わりvisibility: hidden.hidden上記の例からクラス。
immayankmodi 2014

4
@MMTacはアニメート可能なCSSプロパティのdisplay1つではないため、機能しません。「display:block」から「display:none」へのアニメーションを参照してください。
peterflynn 2014

@MayankModiフェードアウト効果の可視性の最初の0のポイントは何ですか?2が必要なのは私の理解です
Big Money

1
@BigMoneyこれは期間と遅延のためのものです(要件に応じてこれらの数値を変更できることは確かです。たとえば、これらは単に使用されます)。この回答はまだアクティブなので、詳細を更新したことを確認してください。
immayankmodi

13

displayはアニメート可能なCSSプロパティの1つではないためです。1つのdisplay:nonefadeOutアニメーションを純粋なCSS3アニメーションに置き換え、最後のフレームで設定width:0し、プロパティを保持するためにheight:0使用animation-fill-mode: forwardsします。width:0height:0

@-webkit-keyframes fadeOut {
    0% { opacity: 1;}
    99% { opacity: 0.01;width: 100%; height: 100%;}
    100% { opacity: 0;width: 0; height: 0;}
}  
@keyframes fadeOut {
    0% { opacity: 1;}
    99% { opacity: 0.01;width: 100%; height: 100%;}
    100% { opacity: 0;width: 0; height: 0;}
}

.display-none.on{
    display: block;
    -webkit-animation: fadeOut 1s;
    animation: fadeOut 1s;
    animation-fill-mode: forwards;
}

1
高性能アニメーションを調べてください。あなたは、トリガーがレイアウトを再CSSプロパティを使用しないよう、必要があるwidthheightの両方に敏感です。
ペニー劉

4

これはあなたの質問のための作業コードです。
コーディングをお楽しみください。

<html>
   <head>

      <style>

         .animated {
            background-color: green;
            background-position: left top;
            padding-top:95px;
            margin-bottom:60px;
            -webkit-animation-duration: 10s;animation-duration: 10s;
            -webkit-animation-fill-mode: both;animation-fill-mode: both;
         }

         @-webkit-keyframes fadeOut {
            0% {opacity: 1;}
            100% {opacity: 0;}
         }

         @keyframes fadeOut {
            0% {opacity: 1;}
            100% {opacity: 0;}
         }

         .fadeOut {
            -webkit-animation-name: fadeOut;
            animation-name: fadeOut;
         }
      </style>

   </head>
   <body>

      <div id="animated-example" class="animated fadeOut"></div>

   </body>
</html>

あなたの解決策の説明を添付してください:それはどのように機能しますか?すでに投稿されている他のソリューションと異なるのはなぜですか?
lifeisfoo 2017

@lifeisfoo何よりも解決策を試しましたが、これは最も簡単で簡単な方法であり、もう1つ重要なことは、数秒後にテキストが自動的に消えることです(10)。したがって、クリックする必要はありません。
Vishal Biradar 2017

3

.dummy-wrapクラスにpositionプロパティを追加するのを忘れたため、上/左/下/右の値が静的に配置された要素に適用されません(デフォルト)

http://jsfiddle.net/dYBD2/2/


ありがとう、でも移行後にどうやって隠すの?

いくつかの方法があります-あなただけ増やすことができtop、それは、ビューポート「オフ」またはあなたが望むように見えるようにそれがフェードアウトするように、アニメーションのための不透明度を使用することができます移動するよう..値を
ジェイソンYaraghi

1
素晴らしい..わかりましたが、もう1つ質問があります。なぜ、非表示のdivがフェードアウトして戻ってくるのですか?

3
.fadeOut{
    background-color: rgba(255, 0, 0, 0.83);
    border-radius: 8px;
    box-shadow: silver 3px 3px 5px 0px;
    border: 2px dashed yellow;
    padding: 3px;
}
.fadeOut.end{
    transition: all 1s ease-in-out;
    background-color: rgba(255, 0, 0, 0.0);
    box-shadow: none;
    border: 0px dashed yellow;
    border-radius: 0px;
}

こちらのデモ。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.