انیمیشن و ایجاد عناصر متحرک در طراحی وب سایت ها، موجب زیباتر شدن و بهبود تجربه کاربری سایت خواهد شد. از این رو بسیاری از افراد به دنبال طراحی سایت هایی هستند که از عناصر انیمیشن نیز بهره ببرند. در این مقاله، ساخت انیمیشن در CSS و دستورالعمل های ایجاد انیمیشن با استفاده از زبان CSS را به شما معرفی می کنیم.
CSS امکان استفاده از انیمیشن عناصر HTML را بدون استفاده از JavaScript یا Flash فراهم می کند!
در این قسمت با خصوصیات زیر آشنا می شوید:
@keyframes
animation-name
animation-duration
animation-delay
animation-iteration-count
animation-direction
animation-timing-function
animation-fill-mode
animation
ویژگی ها | کروم | اکسپلورر | فایرفاکس | سافاری | اپرا |
@keyframes | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animation-name | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animation-duration | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animation-delay | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animation-iteration-count | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animation-direction | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animation-timing-function | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animation-fill-mode | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
animation | 43.0 | 10.0 | 16.0 | 9.0 | 30.0 |
انیمیشن اجازه می دهد تا یک عنصر در طی زمان خصوصیات رفتاری و ظاهر خود را تغییر دهد.
شما می توانید بسیاری از ویژگی های CSS مورد نظر خود را تغییر دهید. برای استفاده از انیمیشن در CSS، ابتدا باید چندین کلیدواژه را برای انیمیشن مشخص کنید.
Keyframes مراحل و استایلهای انیمیشن در CSS را تعریف میکند.
وقتی استایل CSS را در داخل keyframes مشخص می کنید، انیمیشن به تدریج در زمان های مشخص از سبک فعلی به سبک جدید تغییر می کند. برای ساخت یک انیمیشن، باید انیمیشن را به یک عنصر وصل کنید.
به قطعه کد زیر توجه کنید، با کمک انیمیشن “example”، تگ <div> را به انیمیشن تبدیل میکنیم. انیمیشن 4 ثانیه دوام خواهد داشت و به تدریج رنگ پس زمینه عنصر را از “قرمز” به “زرد” تغییر می دهد:
<!DOCTYPE html>
<html >
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: red;
animation-name: example;
animation-duration: 4s;
}
@keyframes example {
from {background-color: red;}
to {background-color: yellow;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
نکته : خاصیت انیمیشن در CSS با المنت animation-duration مشخص می شود که نشان می دهد انیمیشن چه مدت طول می کشد تا به پایان برسد. اگر المنت animation-duration مشخص نشده باشد، انیمیشن رخ نخواهد داد، زیرا مقدار پیش فرض آن 0 ثانیه است. در مثال بالا مشخص کردیم که با استفاده از کلمات کلیدی “from” و “to” (که نشان دهنده 0٪ (شروع) و 100٪ (کامل)) استایل تغییر خواهد کرد، همچنین می توان از درصد استفاده کرد. با استفاده از درصد، می توانید هر چقدر که می خواهید استایل را تغییر دهید. در صورتی که انیمیشن 25٪ کامل شود، 50٪ کامل و دوباره پس از اتمام انیمیشن 100٪ کامل شد، مثال زیر رنگ پس زمینه عنصر را تغییر می دهد:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: red;
animation-name: example;
animation-duration: 4s;
}
@keyframes example {
0% {background-color: red;}
25% {background-color: yellow;}
50% {background-color: blue;}
100% {background-color: green;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
مثال زیر هنگامی که انیمیشن 25٪ کامل، 50٪ کامل و دوباره پس از اتمام انیمیشن 100٪ کامل شود، پس زمینه و موقعیت عنصر را تغییر خواهد داد:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: red;
position: relative;
animation-name: example;
animation-duration: 4s;
}
@keyframes example {
0% {background-color:red; left:0px; top:0px;}
25% {background-color:yellow; left:200px; top:0px;}
50% {background-color:blue; left:200px; top:200px;}
75% {background-color:green; left:0px; top:200px;}
100% {background-color:red; left:0px; top:0px;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
خوب، تا اینجا با کارکرد انیمیشن آشنا شدید، اکنون زمان آن رسیده که تمام ویژگی های انیمیشن را به شما معرفی کنیم.
ویژگی animation-delay، تأخیر برای شروع یک انیمیشن را مشخص می کند.
مثال زیر قبل از شروع انیمیشن 2 ثانیه تأخیر دارد:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: red;
position: relative;
animation-name: example;
animation-duration: 4s;
animation-delay: 2s;
}
@keyframes example {
0% {background-color:red; left:0px; top:0px;}
25% {background-color:yellow; left:200px; top:0px;}
50% {background-color:blue; left:200px; top:200px;}
75% {background-color:green; left:0px; top:200px;}
100% {background-color:red; left:0px; top:0px;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
همچنین می توانید از مقدار منفی استفاده کنید. با استفاده کردن از این خصوصیت، انیمیشن به نظر می رسد که قبلاً برای N ثانیه بازی کرده است ، این حالت را با این مثال بیشتر توضیح میدهیم :
فرض کنید همه دوستانتان در حال تماشای فوتبال هستند که شما نیز به آن ها ملحق می شوید، شما زمانیکه شروع به تماشا می کنید بازی دقیقه 25 را نشان میدهد، 25 دقیقه از بازی گذشته و شما آن را از دست داده اید.
بنابراین زمان منفی به این معناست که به عنوان مثال 5 دقیقه از انیمشین گذشته و شما اکنون آن را مشاهده می کنید.
در مثال زیر ، انیمیشن به گونه ای شروع می شود که گویی قبلاً 2 ثانیه از آن گذشته است:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: red;
position: relative;
animation-name: example;
animation-duration: 4s;
animation-delay: -2s;
}
@keyframes example {
0% {background-color:red; left:0px; top:0px;}
25% {background-color:yellow; left:200px; top:0px;}
50% {background-color:blue; left:200px; top:200px;}
75% {background-color:green; left:0px; top:200px;}
100% {background-color:red; left:0px; top:0px;}
}
</style>
</head>
<body>
for 2 seconds:</p>
<div></div>
</body>
</html>
ویژگی animation-iteration-count شمارش تعداد دفعات اجرای یک انیمیشن را مشخص می کند.
مثال زیر انیمیشن را 3 بار قبل از توقف اجرا می کند:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: red;
position: relative;
animation-name: example;
animation-duration: 4s;
animation-iteration-count: 3;
}
@keyframes example {
0% {background-color:red; left:0px; top:0px;}
25% {background-color:yellow; left:200px; top:0px;}
50% {background-color:blue; left:200px; top:200px;}
75% {background-color:green; left:0px; top:200px;}
100% {background-color:red; left:0px; top:0px;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
مثال زیر از مقدار “infinite” استفاده می کند تا انیمیشن برای همیشه ادامه یابد:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: red;
position: relative;
animation-name: example;
animation-duration: 4s;
animation-iteration-count: infinite;
}
@keyframes example {
0% {background-color:red; left:0px; top:0px;}
25% {background-color:yellow; left:200px; top:0px;}
50% {background-color:blue; left:200px; top:200px;}
75% {background-color:green; left:0px; top:200px;}
100% {background-color:red; left:0px; top:0px;}
}
</style>
</head>
<body>
<p><b>Note:</b> This example does not work in Internet Explorer 9 and earlier versions.</p>
<div></div>
</body>
</html>
ویژگی animation-direction مشخص می کند که آیا یک انیمیشن باید به جلو یا عقب یا در چرخه های متناوب حرکت کند.
ویژگی animation-direction می تواند مقادیر زیر را داشته باشد:
مثال زیر انیمیشن را در جهت معکوس (به عقب) اجرا می کند:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: red;
position: relative;
animation-name: example;
animation-duration: 4s;
animation-direction: reverse;
}
@keyframes example {
0% {background-color:red; left:0px; top:0px;}
25% {background-color:yellow; left:200px; top:0px;}
50% {background-color:blue; left:200px; top:200px;}
75% {background-color:green; left:0px; top:200px;}
100% {background-color:red; left:0px; top:0px;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
مثال زیر از مقدار “alternate” استفاده می کند تا انیمیشن ابتدا به جلو و سپس به سمت عقب اجرا شود:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: red;
position: relative;
animation-name: example;
animation-duration: 4s;
animation-iteration-count: 2;
animation-direction: alternate;
}
@keyframes example {
0% {background-color:red; left:0px; top:0px;}
25% {background-color:yellow; left:200px; top:0px;}
50% {background-color:blue; left:200px; top:200px;}
75% {background-color:green; left:0px; top:200px;}
100% {background-color:red; left:0px; top:0px;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
مثال زیر از مقدار “alternate-reverse” استفاده می کند تا انیمیشن ابتدا به جلو و سپس به سمت عقب اجرا شود:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: red;
position: relative;
animation-name: example;
animation-duration: 4s;
animation-iteration-count: 2;
animation-direction: alternate-reverse;
}
@keyframes example {
0% {background-color:red; left:0px; top:0px;}
25% {background-color:yellow; left:200px; top:0px;}
50% {background-color:blue; left:200px; top:200px;}
75% {background-color:green; left:0px; top:200px;}
100% {background-color:red; left:0px; top:0px;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
ویژگی animation-timing-function منحنی سرعت انیمیشن را مشخص می کند.
این ویژگی می تواند مقادیر زیر را داشته باشد:
مثال زیر تمام ویژگی های گفته شده را نشان می دهد:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 50px;
background-color: red;
font-weight: bold;
position: relative;
animation: mymove 5s infinite;
}
#div1 {animation-timing-function: linear;}
#div2 {animation-timing-function: ease;}
#div3 {animation-timing-function: ease-in;}
#div4 {animation-timing-function: ease-out;}
#div5 {animation-timing-function: ease-in-out;}
@keyframes mymove {
from {left: 0px;}
to {left: 300px;}
}
</style>
</head>
<body>
<div id="div1">linear</div>
<div id="div2">ease</div>
<div id="div3">ease-in</div>
<div id="div4">ease-out</div>
<div id="div5">ease-in-out</div>
</body>
</html>
انیمیشن های CSS قبل از پخش اولین keyframe یا بعد از پخش آخرین keyframe، روی یک عنصر تأثیر نمی گذارند. خاصیت animation-fill-mode می تواند بر این رفتار غلبه کند.
ویژگی animation-fill-mode در هنگام پخش انیمیشن سبکی را برای عنصر هدف (قبل از شروع یا بعد از اتمام یا هر دو) مشخص نمی کند.
ویژگی animation-fill-mode می تواند مقادیر زیر را داشته باشد:
مثال زیر اجازه می دهد تا عنصر <div> با پایان یافتن انیمیشن مقادیر استایل را از آخرین keyframe حفظ کند:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background: red;
position: relative;
animation-name: example;
animation-duration: 3s;
animation-fill-mode: forwards;
}
@keyframes example {
from {top: 0px;}
to {top: 200px; background-color: blue;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
مثال زیر به عنصر <div> اجازه می دهد تا مقادیر استایل تنظیم شده توسط اولین keyframe را قبل از شروع انیمیشن بدست آورد (در طول دوره animation-delay):
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background: red;
position: relative;
animation-name: example;
animation-duration: 3s;
animation-delay: 2s;
animation-fill-mode: backwards;
}
@keyframes example {
from {top: 0px; background-color: yellow;}
to {top: 200px;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
مثال زیر اجازه می دهد تا عنصر <div> قبل از شروع انیمیشن مقادیر استایل تنظیم شده توسط اولین keyframe را بدست آورد، و پس از پایان انیمیشن مقادیر استایل را از آخرین keyframe حفظ کند:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background: red;
position: relative;
animation-name: example;
animation-duration: 3s;
animation-delay: 2s;
animation-fill-mode: both;
}
@keyframes example {
from {top: 0px; background-color: yellow;}
to {top: 200px; background-color: blue;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
در مثال زیر از شش ویژگی انیمیشن استفاده شده است:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: red;
position: relative;
animation-name: example;
animation-duration: 5s;
animation-timing-function: linear;
animation-delay: 2s;
animation-iteration-count: infinite;
animation-direction: alternate;
}
@keyframes example {
0% {background-color:red; left:0px; top:0px;}
25% {background-color:yellow; left:200px; top:0px;}
50% {background-color:blue; left:200px; top:200px;}
75% {background-color:green; left:0px; top:200px;}
100% {background-color:red; left:0px; top:0px;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
با استفاده از ویژگی انیمیشن shorthand می توانید همان انیمیشن قبلی را بدست آورید:
<!DOCTYPE html>
<html>
<head>
<style>
div {
width: 100px;
height: 100px;
background-color: red;
position: relative;
animation: myfirst 5s linear 2s infinite alternate;
}
@keyframes myfirst {
0% {background-color:red; left:0px; top:0px;}
25% {background-color:yellow; left:200px; top:0px;}
50% {background-color:blue; left:200px; top:200px;}
75% {background-color:green; left:0px; top:200px;}
100% {background-color:red; left:0px; top:0px;}
}
</style>
</head>
<body>
<div></div>
</body>
</html>
پیروز وموفق باشید.