Result


四方から別の色のボーダーが囲うようにアニメーションするエフェクトです

css

a {/*基本*/
  font-size: 1.5em;
  letter-spacing: 0.1em;
  text-decoration: none;
}

.btn {/*基本*/
  position: relative;
  display: inline-block;
  padding: 0.5em 2em;
  cursor: pointer;
  overflow: hidden;
}
.btn:before, 
.btn:after {/*疑似要素を追加*/
  content: "";
  position: absolute;
  left: 0;
  height: 2px;
  width: 100%;
  background-color: #252525;
}
.btn:before {/*上下に配置*/
  top: 0;
}
.btn:after {
  bottom: 0;
}
.btn:hover > * > *:before, 
.btn:hover > * > *:after {/*ホバーで発火*/
   transform: translate3d(0, 0, 0);
}
.btn:hover > * > * > *:before, 
.btn:hover > * > * > *:after {
   transform: translate3d(0, 0, 0);
}
.btn > *:before, .btn > *:after {/*アニメーションするボーダーのスタイリング*/
  content: "";
  position: absolute;
  top: 0;
  height: 100%;
  width: 2px;
  background-color: #252525;
}
.btn > *:before {/*左右に配置*/
  left: 0;
}
.btn > *:after {
  right: 0;
}
.btn > * > *:before, 
.btn > * > *:after {/*アニメーションするボーダーのスタイリング*/
  content: "";
  position: absolute;
  left: 0;
  z-index: 9;
  height: 2px;
  width: 100%;
  background-color: #168dff;
}
.btn > * > *:before {
  top: 0;
  transform: translate3d(-105%, 0, 0);
  transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);

}
.btn > * > *:after {
  bottom: 0;
  transform: translate3d(105%, 0, 0);
  transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);

}
.btn > * > * > *:before, 
.btn > * > * > *:after {
  content: "";
  position: absolute;
  top: 0;
  z-index: 9;
  height: 100%;
  width: 2px;
  background-color: #168dff;
}
.btn > * > * > *:before {
  left: 0;
  transform: translate3d(0, 105%, 0);
  transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);

}
.btn > * > * > *:after {
  right: 0;
  transform: translate3d(0, -105%, 0);
  transition: transform 0.8s cubic-bezier(0.4, 0, 0.2, 1);
}

html

<a class="btn">
  <span>
    <span>
      <span>Hover Me</span>
    </span>
  </span>
</a>

via

Button Border Slide Mixin