Как сделать такой эффект hover?
При помощи псевдоэлемента. Задать ему ширину 0, а при ховере 100%. А также transition: width 0.2s ease 0s (как в приведённом примере) и z-index: -1.
Вот тут есть похожие и красивые эффекты