1. У рамки сделать цвет transparent, тогда и рамка будет не видна, и прыгать при смене цвета не будет.
2. Можно использовать gradient, но накладно и не уверен в производительности.
3. Псевдоэлементы, но тут ещё большая засада — при анимации псевдообластей на мобильных устройствах могут появиться тормоза.
А вообще есть много подходов, включая совсем экзотические:)