.move-motion(@className, @keyframeName) { .make-motion(@className, @keyframeName); .@{className}-enter { opacity: 0; animation-timing-function: cubic-bezier(0.08, 0.82, 0.17, 1); } .@{className}-leave { animation-timing-function: cubic-bezier(0.6, 0.04, 0.98, 0.34); } } .move-motion(move-up, moveUp); .move-motion(move-down, moveDown); .move-motion(move-left, moveLeft); .move-motion(move-right, moveRight); @keyframes moveDownIn { 0% { transform-origin: 0 0; transform: translateY(100%); opacity: 0; } 100% { transform-origin: 0 0; transform: translateY(0%); opacity: 1; } } @keyframes moveDownOut { 0% { transform-origin: 0 0; transform: translateY(0%); opacity: 1; } 100% { transform-origin: 0 0; transform: translateY(100%); opacity: 0; } } @keyframes moveLeftIn { 0% { transform-origin: 0 0; transform: translateX(-100%); opacity: 0; } 100% { transform-origin: 0 0; transform: translateX(0%); opacity: 1; } } @keyframes moveLeftOut { 0% { transform-origin: 0 0; transform: translateX(0%); opacity: 1; } 100% { transform-origin: 0 0; transform: translateX(-100%); opacity: 0; } } @keyframes moveRightIn { 0% { opacity: 0; transform-origin: 0 0; transform: translateX(100%); } 100% { opacity: 1; transform-origin: 0 0; transform: translateX(0%); } } @keyframes moveRightOut { 0% { transform-origin: 0 0; transform: translateX(0%); opacity: 1; } 100% { transform-origin: 0 0; transform: translateX(100%); opacity: 0; } } @keyframes moveUpIn { 0% { transform-origin: 0 0; transform: translateY(-100%); opacity: 0; } 100% { transform-origin: 0 0; transform: translateY(0%); opacity: 1; } } @keyframes moveUpOut { 0% { transform-origin: 0 0; transform: translateY(0%); opacity: 1; } 100% { transform-origin: 0 0; transform: translateY(-100%); opacity: 0; } }