The element toggled with v-show is visually present (i.e. not display: none) when in the @enter callback—even before the call to done—just as it is with v-if.
Vue keeps (defers removal of) display: noneuntil after @after-enter.
Callbacks for v-if and v-show are thus not interchangeable.
E.g.: starting an animation on @enter that relies on retrieving the global position of an element would work for v-if, but fail for v-show due to the lack of offsets/offset parents as a result of display: none.
Relevant: https://github.com/vuejs/vue/blob/ae93d2bef8e20402ae3501aa5cdcf14b0ee19c12/src/platforms/web/runtime/directives/show.js#L31-L32 ?
The strange thing is that if you log $el.style, then the display property is set to "", which is correct, yet $el.style.display reports "none". Could this be an issue where the afterEnter callback fires too early?
1ms later it's correct: https://jsfiddle.net/6x2g6v02/2/
fix transition v-show display toggle timing for enter hooks (fix #4418)