ngIf differs from ngShow and ngHide in that ngIf completely removes and recreates the element in the DOM rather than changing its visibility via the display css property. A common case when this difference is significant is when using css selectors that rely on an element's position within the DOM, such as the :first-child or :last-child pseudo-classes.
Don't use ngShow/ngHide in your wrapper or you will end with a 0px box.
Use ngIf since it removes/recreate elements.