Никакой магии, добавляется просто псевдоэлемент по ховеру и класс js-om. При наведении добавляем класс hover для li, и после действует css
.menu > li > a, .menu > li > a:after {-webkit-transition: all .3s ease-in-out;
-moz-transition: all .3s ease-in-out;
-o-transition: all .3s ease-in-out;
-ms-transition: all .3s ease-in-out;
transition: all .3s ease-in-out;}
.menu > li > a:after {
content: "";
height: 4px;
background: #000;
width: 100%;
position: absolute;
left: 0;
top: -4px;
z-index: 203;
opacity: 0;
filter: alpha(opacity=0);
}
.menu > li.hover > a:after {
opacity: 1;
filter: alpha(opacity=100);
}