Back
A step-by-step tutorial on how to create a send button with animated icon.
<div class="send-button"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="20" height="20"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 12L3.269 3.126A59.768 59.768 0 0121.485 12 59.77 59.77 0 013.27 20.876L5.999 12zm0 0h7.5" /> </svg> <span>SEND</span> </div>
.send-button { font-family: Tahoma; cursor: pointer; background-color: #34495e; color: #fff; display: flex; align-items: center; width: fit-content; padding: 10px 15px; }Now we'll add some padding to span element with "SEND" text.
.send-button span { padding: 0 20px; }Then we'll rotate svg by -40 degrees and add 200ms transition.
.send-button svg { transform: rotate(-40deg); transition: 0.2s; }On hover, we'll move svg a by 50% to the right and 5% to top, and rotate by 10 degrees. We'll also add 200ms transition.
.send-button:hover svg { transform: rotate(10deg) translate(50%, 5%); transition: 0.2s; }Now we'll create an animation named "move" that will, as the name says, move an element. This animation will move an element by 5% to top and 5% to bottom. This is why we set 5% X translation to svg on button hover. Also, it will rotate an element by 10 degrees in both directions.
@keyframes move { 0% {transform: rotate(10deg) translate(50%, 5%);} 50% {transform: rotate(-10deg) translate(50%, -5%);} 100% {transform: rotate(10deg) translate(50%, 5%);} }Lastly, we'll add created animation to our svg. "move" is the name of our animation, infinite is the iteration count, which means that animation will be infinite, 1s is the duration of the animation (for 1 iteration), and 0.2s (200 milliseconds) is animation delay. I added the delay because of the transition I set on svg. Animation will start as soon as the transition finishes.
.send-button:hover svg {
transform: rotate(10deg) translate(50%, 5%);
transition: 0.2s;
animation: move infinite 1s 0.2s; /* New line -> Animation */
}
<div class="send-button"> <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" width="20" height="20"> <path stroke-linecap="round" stroke-linejoin="round" d="M6 12L3.269 3.126A59.768 59.768 0 0121.485 12 59.77 59.77 0 013.27 20.876L5.999 12zm0 0h7.5" /> </svg> <span>SEND</span> </div> <style> .send-button { font-family: Tahoma; cursor: pointer; background-color: #34495e; color: #fff; display: flex; align-items: center; width: fit-content; padding: 10px 15px; } .send-button span { padding: 0 20px; } .send-button svg { transform: rotate(-40deg); transition: 0.2s; } .send-button:hover svg { transform: rotate(10deg) translate(50%, 5%); transition: 0.2s; animation: move infinite 1s 0.2s; } @keyframes move { 0% {transform: rotate(10deg) translate(50%, 5%);} 50% {transform: rotate(-10deg) translate(50%, -5%);} 100% {transform: rotate(10deg) translate(50%, 5%);} } </style>Thank you for reading this article.