CSS3 Transition - Hiệu ứng mờ dần


96

Tôi đang cố gắng triển khai hiệu ứng "fade out" trong CSS thuần túy. Đây là trò chơi . Tôi đã xem xét một số giải pháp trực tuyến, tuy nhiên, sau khi đọc tài liệu trực tuyến , tôi đang cố gắng tìm ra lý do tại sao hoạt ảnh trang chiếu không hoạt động. Bất kỳ gợi ý?

.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>

Câu trả lời:


96

Bạn có thể sử dụng chuyển đổi để thay thế:

.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
không cần tiền tố trình duyệt những ngày này chỉ đơn giản là ... chuyển đổi: opacity 3s dễ dàng-in-out;
danday74

177

Đây là một cách khác để làm tương tự.

phai màu

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

hiệu ứng fadeOut

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

UPDATE 1: Tôi đã tìm thấy hướng dẫn cập nhật hơn CSS3 Transition: fadeIn và fadeOut như các hiệu ứng để ẩn các phần tử hiển thịChú giải công cụ Ví dụ: Hiển thị Ẩn Gợi ý hoặc Văn bản Trợ giúp bằng cách sử dụng CSS3 Transition tại đây với mã mẫu.

UPDATE 2: (Đã thêm chi tiết do @ big-money yêu cầu)

Khi hiển thị phần tử (bằng cách chuyển sang lớp hiển thị), chúng ta muốn khả năng hiển thị: hiển thị xuất hiện ngay lập tức, vì vậy chỉ cần chuyển thuộc tính opacity là được. Và khi ẩn phần tử (bằng cách chuyển sang lớp ẩn), chúng ta muốn trì hoãn khai báo khả năng hiển thị: ẩn, để chúng ta có thể nhìn thấy quá trình chuyển đổi mờ dần trước. Chúng tôi đang thực hiện việc này bằng cách khai báo một quá trình chuyển đổi trên thuộc tính khả năng hiển thị, với thời lượng 0 giây và độ trễ. Bạn có thể xem chi tiết bài viết tại đây.

Tôi biết tôi đã quá muộn để trả lời nhưng đăng câu trả lời này để tiết kiệm thời gian cho người khác. Hy vọng nó sẽ giúp bạn !!


10
Câu trả lời hay, tôi đang tìm cách thêm display:noneđể xóa hộp khi hoạt ảnh "ẩn" kết thúc, có ý kiến ​​gì không?
Apolo

1
Tôi không chắc bạn cần gì ở đây nhưng bạn có thể thử display:blockthay vì visibility: visibletrong .visiblelớp học display:nonethay vì visibility: hiddentrong .hiddenlớp từ ví dụ trên.
immayankmodi

4
@MMTac Điều đó không hoạt động vì displaykhông phải là một trong những thuộc tính CSS động . Xem Hoạt ảnh từ “display: block” thành “display: none” .
peterflynn 12/12/14

@MayankModi điểm 0 đầu tiên về khả năng hiển thị đối với hiệu ứng fadeOut là gì? Tôi hiểu rằng bạn chỉ cần 2 giây
Big Money

1
@BigMoney nó có thời lượng và độ trễ (chắc chắn bạn có thể sửa đổi những con số đó theo yêu cầu của mình, những con số đó chỉ được sử dụng chẳng hạn). Kiểm tra xem tôi đã cập nhật chi tiết vì câu trả lời này vẫn đang hoạt động.
immayankmodi

13

displaykhông phải là một trong những thuộc tính CSS động. Một display:nonethay thế hoạt ảnh fadeOut bằng hoạt ảnh CSS3 thuần túy, chỉ cần đặt width:0height:0ở khung cuối cùng, và sử dụng animation-fill-mode: forwardsđể giữ width:0height:0thuộc tính.

@-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
Nhìn vào Ảnh động Hiệu suất cao . Bạn nên tránh sử dụng các thuộc tính CSS kích hoạt bố cục lại widthheightcả hai đều nhạy cảm.
Penny Liu

4

Đây là mã làm việc cho câu hỏi của bạn.
Thưởng thức mã hóa ....

<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>

Vui lòng đính kèm giải thích về giải pháp của bạn: nó hoạt động như thế nào? tại sao nó khác với các giải pháp khác đã được đăng?
lifeisfoo

@lifeisfoo Tôi đã thử với tất cả các giải pháp trên, nhưng đây là cách đơn giản và dễ thực hiện nhất và một điều quan trọng hơn là văn bản sẽ tự động biến mất sau vài giây (10). Vì vậy, không cần bất kỳ nhấp chuột.
Vishal Biradar

3

Bạn quên thêm thuộc tính vị trí vào .dummy-wraplớp và các giá trị trên cùng / trái / dưới cùng / phải không áp dụng cho các phần tử được định vị tĩnh (mặc định)

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


Cảm ơn, nhưng làm thế nào tôi sẽ ẩn sau khi chuyển đổi hoàn toàn?

Có một số cách - bạn chỉ có thể tăng topgiá trị để nó di chuyển "ra khỏi" khung nhìn hoặc bạn có thể sử dụng độ mờ cho hoạt ảnh để nó mờ đi như bạn muốn ..
Jason Yaraghi

1
tuyệt vời .. Tôi hiểu rồi, nhưng còn một câu hỏi nữa, Tại sao div ẩn lại xuất hiện?

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;
}

demo tại đây.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.