JSFiddle - React, Tailwind, and code Playground

HTML

<a class="btn">Button</a>

CSS

.btn {
  position: relative;
  font-size: 40px;
  cursor: pointer;
}

.btn::before {
  content: '';
  height: 1px;
  width: 100%;
  background-color: red;
  position: absolute;
  bottom: -1px;
  right: 0;
  -webkit-transition: all 0s ease-in-out;
  -moz-transition: all 0s ease-in-out;
  -ms-transition: all 0s ease-in-out;
  transition: all 0s ease-in-out;
}

.btn::after {
  content: '';
  height: 1px;
  width: 0;
  background-color: red;
  position: absolute;
  bottom: -1px;
  left: 0;
  -webkit-transition: all 0s ease-in-out;
  -moz-transition: all 0s ease-in-out;
  -ms-transition: all 0s ease-in-out;
  transition: all 0s ease-in-out;
}

.btn:hover::before {
  width: 0;
  -webkit-transition: all 0.4s ease-in-out;
  -moz-transition: all 0.4s ease-in-out;
  -ms-transition: all 0.4s ease-in-out;
  transition: all 0.4s ease-in-out;
}
.btn:hover::after {
  width: 100%;
  -webkit-transition: all 0.4s ease-in-out;
  -moz-transition: all 0.4s ease-in-out;
  -ms-transition: all 0.4s ease-in-out;
  transition: all 0.4s ease-in-out;
  -webkit-transition-delay: 0.4s;
  -moz-transition-delay: 0.4s;
  -ms-transition-delay: 0.4s;
  transition-delay: 0.4s;
}