UNPKG

@nutui/nutui-react

Version:

京东风格的轻量级移动端 React 组件库,支持一套代码生成 H5 和小程序

236 lines 4.22 kB
/* #ifdef harmony */ /* #endif */ /* #ifndef harmony */ /* #endif */ .nut-animate { /* Animation CSS */ /* Slide Animations */ /* Shake Animation */ /* Ripple Animation */ /* Breath Animation */ /* Twinkle Animation */ /* Flicker Animation */ /* Jump Animation */ /* Float Animation */ /* Loop Animation */ } .nut-animate [class*=nut-animate-] { animation-duration: 0.5s; animation-timing-function: ease-out; animation-fill-mode: both; } @keyframes slide-right { 0% { opacity: 0; transform: translateX(100%); } 100% { opacity: 1; transform: translateX(0); } } @keyframes slide-left { 0% { opacity: 0; transform: translateX(-100%); } 100% { opacity: 1; transform: translateX(0); } } @keyframes slide-top { 0% { opacity: 0; transform: translateY(-100%); } 100% { opacity: 1; transform: translateY(0); } } @keyframes slide-bottom { 0% { opacity: 0; transform: translateY(100%); } 100% { opacity: 1; transform: translateY(0); } } .nut-animate .nut-animate-slide-right { animation-name: slide-right; } .nut-animate .nut-animate-slide-left { animation-name: slide-left; } .nut-animate .nut-animate-slide-top { animation-name: slide-top; } .nut-animate .nut-animate-slide-bottom { animation-name: slide-bottom; } @keyframes shake { 0%, 100% { transform: translateX(0); } 10% { transform: translateX(-9px); } 20% { transform: translateX(8px); } 30% { transform: translateX(-7px); } 40% { transform: translateX(6px); } 50% { transform: translateX(-5px); } 60% { transform: translateX(4px); } 70% { transform: translateX(-3px); } 80% { transform: translateX(2px); } 90% { transform: translateX(-1px); } } .nut-animate .nut-animate-shake { animation-name: shake; } @keyframes ripple { 0% { transform: scale(1); } 50% { transform: scale(1.1); } } .nut-animate .nut-animate-ripple { animation-name: ripple; } @keyframes breath { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.1); } } .nut-animate .nut-animate-breath { animation-name: breath; animation-duration: 2700ms; animation-timing-function: ease-in-out; animation-direction: alternate; } .nut-animate .nut-animate-twinkle { position: relative; } .nut-animate .nut-animate-twinkle::after, .nut-animate .nut-animate-twinkle::before { width: 60px; height: 60px; content: ""; box-sizing: border-box; border: 4px solid rgba(255, 255, 255, 0.6); position: absolute; border-radius: 30px; right: 50%; margin-top: -30px; margin-right: -30px; z-index: 1; transform: scale(0); animation: twinkle 2s ease-out infinite; } .nut-animate .nut-animate-twinkle::after { animation-delay: 0.4s; } @keyframes twinkle { 0% { transform: scale(0); } 20% { opacity: 1; } 50%, 100% { transform: scale(1.4); opacity: 0; } } .nut-animate .nut-animate-flicker { position: relative; overflow: hidden; } .nut-animate .nut-animate-flicker::after { width: 100px; height: 60px; position: absolute; left: 0; top: 0; opacity: 0.73; content: ""; background-image: linear-gradient(106deg, rgba(232, 224, 255, 0) 24%, #e8e0ff 91%); animation: flicker 1.5s linear infinite; transform: skewX(-20deg); filter: blur(3px); } @keyframes flicker { 0% { transform: translateX(-100px) skewX(-20deg); } 40%, 100% { transform: translateX(150px) skewX(-20deg); } } @keyframes jump { 0% { transform: rotate(0) translateY(0); } 25% { transform: rotate(10deg) translateY(20px); } 50% { transform: rotate(0) translateY(-10px); } 75% { transform: rotate(-10deg) translateY(20px); } 100% { transform: rotate(0) translateY(0); } } .nut-animate .nut-animate-jump { transform-origin: center center; animation: jump 0.7s linear; } @keyframes float-pop { 0% { top: 0; } 25% { top: 1px; } 50% { top: 4px; } 75% { top: 1px; } 100% { top: 0; } } .nut-animate .nut-animate-float { position: relative; animation-name: float-pop; } .nut-animate .loop { animation-iteration-count: infinite; }