Complete configuration of animation properties
Complete Configuration of Animation Properties
CSS animation properties offer a rich set of configuration options to create complex animation effects. By combining different property values, developers can precisely control every detail of an animation, from duration to motion curves, playback count, and direction.
animation-name
The animation-name
property specifies the name of the @keyframes
rule to be applied. This name must match a defined @keyframes
rule.
@keyframes slide {
from { transform: translateX(0); }
to { transform: translateX(100px); }
}
.element {
animation-name: slide;
}
Multiple animation names can be specified, separated by commas:
.element {
animation-name: slide, fade;
}
animation-duration
animation-duration
defines the time it takes for an animation to complete one cycle, in seconds (s) or milliseconds (ms).
.element {
animation-duration: 2s; /* Single animation */
animation-duration: 1s, 3s; /* Multiple animations */
}
animation-timing-function
animation-timing-function
defines the speed curve of the animation, controlling how the speed changes during the cycle.
Common values:
ease
(default): Slow start, then fast, then slow endlinear
: Constant speedease-in
: Slow startease-out
: Slow endease-in-out
: Slow start and endcubic-bezier(n,n,n,n)
: Custom Bézier curve
.element {
animation-timing-function: ease-in-out;
animation-timing-function: cubic-bezier(0.1, 0.7, 1.0, 0.1);
}
animation-delay
animation-delay
defines the delay before the animation starts.
.element {
animation-delay: 0.5s; /* 0.5-second delay */
animation-delay: 0s, 1s; /* Different delays for multiple animations */
}
Negative values cause the animation to start immediately but from a mid-cycle state:
.element {
animation-delay: -1s; /* Starts from the state after 1 second */
}
animation-iteration-count
animation-iteration-count
defines how many times the animation plays.
.element {
animation-iteration-count: 3; /* Plays 3 times */
animation-iteration-count: infinite; /* Infinite loop */
}
Different playback counts can be set for multiple animations:
.element {
animation-iteration-count: 1, infinite;
}
animation-direction
animation-direction
defines whether the animation should play in reverse.
Options:
normal
(default): Plays forwardreverse
: Plays backwardalternate
: Forward on odd counts, backward on even countsalternate-reverse
: Backward on odd counts, forward on even counts
.element {
animation-direction: alternate;
}
animation-fill-mode
animation-fill-mode
defines how styles are applied before and after the animation executes.
Options:
none
(default): No styles applied before or after executionforwards
: Retains the styles of the last frame after completionbackwards
: Applies the styles of the first frame during the delayboth
: Applies bothforwards
andbackwards
.element {
animation-fill-mode: forwards;
}
animation-play-state
animation-play-state
defines whether the animation is running or paused.
.element {
animation-play-state: running; /* Default value */
}
.element:hover {
animation-play-state: paused; /* Pauses on hover */
}
Shorthand Property: animation
The animation
property is a shorthand for all the above animation properties, with the following syntax:
animation: name duration timing-function delay iteration-count direction fill-mode play-state;
Example:
.element {
animation: slide 2s ease-in-out 0.5s infinite alternate forwards;
}
Multiple animations can be defined simultaneously:
.element {
animation:
slide 2s ease-in-out 0.5s infinite alternate,
fade 1s linear 1s 3 normal;
}
Keyframe Animation: @keyframes
The @keyframes
rule defines the keyframe styles in an animation sequence.
@keyframes example {
0% {
background-color: red;
transform: scale(1);
}
50% {
background-color: yellow;
transform: scale(1.5);
}
100% {
background-color: green;
transform: scale(1);
}
}
Percentages represent points in the animation's duration, or from
(0%) and to
(100%) can be used:
@keyframes example {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
Animation Performance Optimization
- Prioritize using
transform
andopacity
properties for animations, as they can be GPU-accelerated. - Avoid animating layout properties (e.g., width, height, margin).
- Use the
will-change
property to hint the browser about upcoming changes.
.element {
will-change: transform, opacity;
}
Practical Example
Create a bouncing ball effect:
@keyframes bounce {
0%, 100% {
transform: translateY(0);
}
50% {
transform: translateY(-100px);
}
}
.ball {
width: 50px;
height: 50px;
border-radius: 50%;
background-color: #ff5722;
animation:
bounce 1s cubic-bezier(0.5, 0.05, 0.5, 1) infinite,
fade 2s ease-in-out infinite alternate;
}
Browser Compatibility Considerations
While modern browsers support CSS animations well, consider:
- Adding vendor prefixes for older browser compatibility.
- Providing JavaScript fallback solutions.
- Testing performance across different devices.
.element {
-webkit-animation: slide 2s ease;
-moz-animation: slide 2s ease;
-o-animation: slide 2s ease;
animation: slide 2s ease;
}
Animation Event Listeners
JavaScript can listen for animation events:
const element = document.querySelector('.animated-element');
element.addEventListener('animationstart', () => {
console.log('Animation started');
});
element.addEventListener('animationend', () => {
console.log('Animation ended');
});
element.addEventListener('animationiteration', () => {
console.log('Animation iterated');
});
Combining Animations with Media Queries
In responsive design, adjust animations based on screen size:
@media (max-width: 768px) {
.element {
animation: slide 1s ease;
}
}
@media (min-width: 769px) {
.element {
animation: slide 2s ease;
}
}
Animation Performance Monitoring
Use the performance
API to monitor animation performance:
function measureAnimation() {
const start = performance.now();
requestAnimationFrame(() => {
const end = performance.now();
console.log(`Animation frame duration: ${end - start}ms`);
});
}
measureAnimation();
本站部分内容来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了你的权益请来信告知我们删除。邮箱:cc@cccx.cn