Видимость - это свойство, которое можно анимировать согласно спецификации, но переходы видимости не работают постепенно, как можно было бы ожидать. Вместо этого переходы при задержке видимости скрывают элемент. С другой стороны, сделать элемент видимым работает немедленно. Это так, как определено в спецификации (в случае функции синхронизации по умолчанию), и как это реализовано в браузерах.
Это также полезное поведение, поскольку на самом деле можно представить различные визуальные эффекты, чтобы скрыть элемент. Затухание элемента - это лишь один из видов визуального эффекта, который задается с помощью непрозрачности. Другие визуальные эффекты могут перемещать элемент, например, с помощью свойства transform, также см. Http://taccgl.org/blog/css-transition-visibility.html
Часто бывает полезно комбинировать переход непрозрачности с переходом видимости! Хотя непрозрачность, кажется, работает правильно, полностью прозрачные элементы (с непрозрачностью: 0) по-прежнему получают события мыши. Так, например, ссылки на элементе, который был затемнен только с переходом непрозрачности, по-прежнему реагируют на щелчки (хотя и не видны), а ссылки за исчезнувшим элементом не работают (хотя и видны через затененный элемент). См. Http://taccgl.org/blog/css-transition-opacity-for-fade-effects.html .
Этого странного поведения можно избежать, просто используя оба перехода: переход по видимости и переход по непрозрачности. Таким образом, свойство видимости используется для отключения событий мыши для элемента, в то время как прозрачность используется для визуального эффекта. Однако следует проявлять осторожность, чтобы не скрыть элемент во время воспроизведения визуального эффекта, который в противном случае был бы невидим. Здесь становится кстати особая семантика перехода видимости. При скрытии элемента элемент остается видимым при воспроизведении визуального эффекта и впоследствии скрывается. С другой стороны, при открытии элемента переход видимости делает элемент видимым немедленно, то есть до воспроизведения визуального эффекта.
opacity
может принимать несколько значений между0
и1
, в то время какvisibility
может быть толькоvisible
илиhidden
(без промежуточных значений)