การเปลี่ยน 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 ของบทช่วยสอนที่ทันสมัยมากขึ้น: fadeIn และ fadeOut เช่นเอฟเฟกต์เพื่อซ่อนองค์ประกอบการแสดงและคำแนะนำเครื่องมือตัวอย่าง: แสดงซ่อนคำแนะนำหรือข้อความช่วยเหลือโดยใช้การเปลี่ยน CSS3ที่นี่พร้อมโค้ดตัวอย่าง

UPDATE 2: (รายละเอียดเพิ่มเติมร้องขอโดย @ big-money)

เมื่อแสดงองค์ประกอบ (โดยเปลี่ยนเป็นคลาสที่มองเห็นได้) เราต้องการให้การมองเห็น: มองเห็นได้เตะเข้าทันทีดังนั้นจึงสามารถเปลี่ยนเฉพาะคุณสมบัติความทึบได้ และเมื่อซ่อนองค์ประกอบ (โดยเปลี่ยนเป็นคลาสที่ซ่อนอยู่) เราต้องการชะลอการมองเห็น: การประกาศที่ซ่อนไว้เพื่อให้เราเห็นการเปลี่ยนแปลงที่เลือนหายไปก่อน เรากำลังดำเนินการนี้โดยการประกาศการเปลี่ยนแปลงในคุณสมบัติการมองเห็นโดยมีระยะเวลา 0 วินาทีและความล่าช้า คุณสามารถดูบทความโดยละเอียดได้ที่นี่

ฉันรู้ว่าฉันสายเกินไปที่จะตอบ แต่โพสต์คำตอบนี้เพื่อช่วยคนอื่น หวังว่าจะช่วยคุณได้ !!


10
คำตอบที่ดีฉันต้องการเพิ่มdisplay:noneเพื่อลบกล่องเมื่อภาพเคลื่อนไหว "ซ่อน" จบลงมีความคิดอย่างไร
Apolo

1
ฉันไม่แน่ใจว่าคุณต้องการอะไรที่นี่ แต่คุณสามารถลองdisplay:blockแทนvisibility: visibleใน.visibleชั้นเรียนdisplay:noneแทนvisibility: hiddenใน.hiddenชั้นเรียนได้จากตัวอย่างด้านบน
immayankmodi

4
@MMTac ไม่ได้ผลเนื่องจากdisplayไม่ใช่หนึ่งในคุณสมบัติ CSS ที่เคลื่อนไหวได้ ดูเคลื่อนไหวจาก“display: บล็อก” เป็น“display: none”
peterflynn

@MayankModi จุด 0 แรกในการมองเห็นสำหรับเอฟเฟกต์ fadeOut คืออะไร? เป็นความเข้าใจของฉันคุณต้องการเพียงแค่ 2s
Big Money

1
@BigMoney เป็นระยะเวลาและล่าช้า (แน่นอนว่าคุณสามารถแก้ไขตัวเลขเหล่านั้นได้ตามความต้องการของคุณซึ่งจะใช้เป็นตัวอย่าง) ตรวจสอบว่าฉันได้อัปเดตรายละเอียดเนื่องจากคำตอบนี้ยังคงใช้งานได้
immayankmodi

13

เนื่องจากdisplayไม่ใช่หนึ่งในคุณสมบัติ CSS ที่เคลื่อนไหวได้ การdisplay:noneแทนที่ภาพเคลื่อนไหว fadeOut หนึ่งครั้งด้วยภาพเคลื่อนไหว CSS3 แท้เพียงแค่ตั้งค่าwidth:0และheight:0ที่เฟรมสุดท้ายและใช้animation-fill-mode: forwardsเพื่อเก็บwidth:0และheight: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
ดูเป็นHigh Performance ภาพเคลื่อนไหว คุณควรหลีกเลี่ยงการใช้คุณสมบัติ CSS ที่ทำให้เกิดการจัดวางใหม่widthและheightมีความละเอียดอ่อนทั้งคู่
Penny Liu

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

@lifeisfoo ฉันลองใช้วิธีแก้ปัญหาข้างต้นแล้ว แต่นี่เป็นวิธีที่ง่ายและง่ายที่สุดในการทำและอีกสิ่งหนึ่งที่สำคัญคือข้อความจะจางหายไปโดยอัตโนมัติหลังจากผ่านไปสักครู่ (10) จึงไม่จำเป็นต้องคลิกใด ๆ
Vishal Biradar

3

คุณลืมเพิ่มคุณสมบัติตำแหน่งลงใน.dummy-wrapคลาสและค่าบน / ซ้าย / ล่าง / ขวาจะไม่ใช้กับองค์ประกอบตำแหน่งคงที่ (ค่าเริ่มต้น)

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


ขอบคุณ แต่ฉันจะซ่อนตัวหลังจากการเปลี่ยนแปลงทั้งหมดได้อย่างไร

มีหลายวิธี - คุณสามารถเพิ่มtopค่าเพื่อให้ "ปิด" วิวพอร์ตหรือใช้ความทึบของภาพเคลื่อนไหวเพื่อให้ภาพดูจางลงอย่างที่ต้องการ ..
Jason Yaraghi

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.