Как задать плавное появление блока?
Просто: pointer-events: none;
Сложнее: повеситься на событие transitionEnd, явно убирать блок из DOM при скрытии после конца анимации.
Добавить 

visibility: hidden / visibility: visible

И еще можно использовать свойство pointer-events: none;

Оно отменяет "рабочесть" блока (на него нажать, выделить и т.п.)