Во второй части этой серии о переходах CSS3 мы подробно рассмотрим свойства. Но сначала нам нужно знать, что можно, а что нельзя оживлять …
Какие свойства CSS можно анимировать?
В общем, переход может быть применен к любому свойству CSS, которое имеет дискретное значение, которое изменяется между начальным и конечным состояниями. Как правило, это включает в себя свойства макета (ширина, высота, отступы, поля, границы), позиционные свойства (слева, справа, сверху, снизу), преобразования, размеры шрифта, цвета, цвета фона и прозрачности …
-
width
, например, от 10 до 200 пикселей -
padding
, например, от 0 до 10 пикселей -
color
, например, от # F00 до # 00F -
top
, например, от 0 до 300 пикселей -
border-radius
, например, от 10 до 3 пикселей -
transform
, например, повернуть (0 градусов), чтобы повернуть (90 градусов)
Вы также можете применять переходы к цветным ключевым словам, таким как бордовый, фуксия и бирюзовый, поскольку они эффективно переводятся в значения RGB.
Какие свойства CSS не могут быть анимированы?
Вот где это может быть немного сложно. Если вы похожи на меня, то первый переход, который вы попробовали, был примерно таким:
#container p { display: none; transition: all 3s ease; } #container:hover p { display: block; }
Вместо того, чтобы красиво добавить элемент, вы увидите резкий переход, как в CSS2.1. Причина: браузер не может определить промежуточные состояния .
display:none;
удаляет блок со страницы, как будто его там никогда не было Блок не может быть частично отображен; либо есть, либо нет. То же самое верно для visibility
; Вы не можете ожидать, что блок будет наполовину hidden
который, по определению, будет visible
! К счастью, вы можете использовать opacity
для эффектов затухания.
Следующая проблема: вы не можете полагаться на «автоматическое» измерение, например
#container p { height: 0px; transition: all 3s ease; } #container:hover p { height: auto; }
‘auto’ не является дискретным измерением, поэтому браузер не может вычислить точки между нулем и неопределенным значением. Тем не менее, есть умный обходной путь; используйте max-height
и установите для него значение, превышающее реальную высоту блока.
Точно так же вы не можете переключить свойства в ‘auto’ для обработки движения. Этот пример также потерпит неудачу:
#container p { left: 0px; right: auto; transition: all 3s ease; } #container:hover p { left: auto; right: 0px; }
Наконец, не ожидайте, что фоновое изображение волшебным образом из одной фотографии в другую. Есть вероятность, что это будет реализовано в будущем, и некоторые поставщики имели ограниченный успех с CSS3-градиентами, но, вероятно, этого пока лучше избегать.
переход-недвижимость
Свойство transition-property
объявляет, к каким свойствам CSS будет применен переход, например
#container p.one { transition-property: color; } #container p.two { transition-property: width; } #container p.three { transition-property: color, width; }
Если вы рады, что все изменилось, используйте значение all
. Вы также можете отключить переходы, используя значение none
.
Продолжительность перехода
transition-duration
указывает период анимации в секундах (с) или миллисекундах (мс) — тысячные доли секунды. Следующие длительности идентичны:
#container p.one { transition-duration: 3s; } #container p.two { transition-duration: 3000ms; }
переходное время функция
Функция transition-timing-function
определяет, как анимация изменяется по скорости на протяжении всей продолжительности. Есть несколько возможных значений:
- легкость — по умолчанию; анимация начинается медленно, а затем быстро ускоряется. В средней точке он замедляется и замедляется до остановки.
- easy-in-out — похож на easy, но с более тонким ускорением и замедлением.
- замедление — начинается медленно, но ускоряется и резко останавливается.
- замедление — начинается быстро, но замедляется до остановки.
- linear — постоянная скорость на протяжении всей анимации; часто лучше всего использовать для изменения цвета или непрозрачности.
Наконец, у нас есть cubic-bezier
который позволяет вам определить свою собственную странную и замечательную функцию синхронизации. Это немного сложно, поэтому мы вернемся к нему в следующей части этой серии.
Переход задержки
Наконец, transition-delay
указывает период в секундах (с) или миллисекундах (мс) до начала перехода. Следующее идентично:
#container p.one { transition-delay: 0.5s; } #container p.two { transition-delay: 500ms; }
Сокращенное обозначение CSS
Давайте посмотрим на полное объявление перехода:
#container p { transition-property: all; transition-duration: 3s; transition-timing-function: ease-in-out; transition-delay: 0.5s; }
И не забудьте, что вам также понадобятся эквиваленты с префиксом -webkit.
К счастью, вы можете сохранить свои пальцы и здравомыслие, используя единую декларацию transition
которая принимает свойство, продолжительность, функцию синхронизации и задержку в этом порядке, например
#element { /* starting state styles */ color: #F00; -webkit-transition: all 3s ease-in-out 0.5s; transition: all 3s ease-in-out 0.5s; } #element:hover { /* ending state styles */ color: #00F; }
Просмотрите страницу примера, используя этот переход …
Выбор селектора
Во всех этих примерах я определил transition
CSS в стандартном (не размещенном) CSS-селекторе. Однако это будет :hover
селектора :hover
. Другими словами, это идентично:
#element, #element:hover { /* starting and ending state styles */ -webkit-transition: all 3s ease-in-out 0.5s; transition: all 3s ease-in-out 0.5s; }
Таким образом, один и тот же переход будет происходить в обоих направлениях: начальное и конечное состояние и конечное начальное состояние.
В следующей части этой серии мы рассмотрим функцию синхронизации перехода по cubic-bezier
более подробно.