<template> <a :class="className" class="link--mallki" href="#"> {{ text }} <span :data-letters="text"/> <span :data-letters="text"/> </a> </template> <script> export default { props: { className: { type: String, default: '' }, text: { type: String, default: 'vue-element-admin' } } } </script> <style> /* Mallki */ .link--mallki { font-weight: 800; color: #4dd9d5; font-family: 'Dosis', sans-serif; -webkit-transition: color 0.5s 0.25s; transition: color 0.5s 0.25s; overflow: hidden; position: relative; display: inline-block; line-height: 1; outline: none; text-decoration: none; } .link--mallki:hover { -webkit-transition: none; transition: none; color: transparent; } .link--mallki::before { content: ''; width: 100%; height: 6px; margin: -3px 0 0 0; background: #3888fa; position: absolute; left: 0; top: 50%; -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); -webkit-transition: -webkit-transform 0.4s; transition: transform 0.4s; -webkit-transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1); transition-timing-function: cubic-bezier(0.7, 0, 0.3, 1); } .link--mallki:hover::before { -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } .link--mallki span { position: absolute; height: 50%; width: 100%; left: 0; top: 0; overflow: hidden; } .link--mallki span::before { content: attr(data-letters); color: red; position: absolute; left: 0; width: 100%; color: #3888fa; -webkit-transition: -webkit-transform 0.5s; transition: transform 0.5s; } .link--mallki span:nth-child(2) { top: 50%; } .link--mallki span:first-child::before { top: 0; -webkit-transform: translate3d(0, 100%, 0); transform: translate3d(0, 100%, 0); } .link--mallki span:nth-child(2)::before { bottom: 0; -webkit-transform: translate3d(0, -100%, 0); transform: translate3d(0, -100%, 0); } .link--mallki:hover span::before { -webkit-transition-delay: 0.3s; transition-delay: 0.3s; -webkit-transform: translate3d(0, 0, 0); transform: translate3d(0, 0, 0); -webkit-transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1); transition-timing-function: cubic-bezier(0.2, 1, 0.3, 1); } </style>