دسته: علوم کامپیوتری
طراحی وب: ۸- انیمیشن
انیمیشن در CSS امکان تغییر پراپرتیهای یک المنت را در زمان معین و با سرعت دلخواه میدهد.
مزایای انیمیشن CSS نسبت به جاواسکریپت
- نیازی به یادگیری و به کاربردن جاواسکریپت نیست.
- با لگ کمتری نمایش داده میشود. (حتی در کامپیوترهای ضعیف)
راه اندازی یک انیمیشن در CSS دو بخش دارد.
- تعریف
- کاربرد
تعریف انیمیشن
در هنگام تعریف انیمیشن ابتدا یک نام به آن داده میشود. سپس گامهای انیمیشن تعریف میشود. در مثال زیر یک انیمیشن به نام to-circle تعریف شده و گامهای انیمیشن نیز مشخص شده است.
@keyframes to-circle {
0% {
border-radius:0%;
}
20% {
border-radius:10%;
}
40% {
border-radius:20%;
}
60% {
border-radius:30%;
}
80% {
border-radius:40%;
}
100% {
border-radius:50%;
}
}
- نام انیمیشن
- گامهای انیمیشن
- پراپرتیهای هر گام
در تعیین گامها می توانید بجای 0% از from و بجای 100% از to استفاده کنید.
پراپرتیهای انیمیشن
برای تعیین شیوهی کار انیمیشن چند پراپرتی وجود دارد.
- animation-name
- animation-duration
- animation-timing-function
- animation-delay
- animation-iteration-count
- animation-direction
- animation-fill-mode
- animation-play-state
animation-name
ابتدا باید انیمیشنی را که میخواهید اجرا شود، مشخص کنید.
@keyframes zoom-in {
from {
opacity: 0;
transform: scale(0.2, 0.2);
}
to {
opacity: 1;
}
}
img {
animation-name: zoom-in;
}
img:active {
animation-name: none;
}
animation-duration
مدت زمان انیمیشن را مشخص می کند. واحد زمان s برای ثانیه یا ms برای میلی ثانیه باید حتما نوشته شود. مقدار پیش فرض صفر است.
animation-timing-function
تابعی را معرفی میکند که به کمک آن مقادیر میانی پراپرتی محاسبه میشود.
animation-delay
قبل از انیمیشن چقدر باید منتظر ماند. واحد زمان s برای ثانیه یا ms برای میلی ثانیه باید حتما نوشته شود. مقدار پیش فرض صفر است.
animation-iteration-count
انیمیشن چند بار تکرار شود. مقدار پیش فرض یکبار است برای اینکه پیوسته تکرار شود، مقدار infinity را به کار برید.
animation-direction
جهت انیمیشن را مشخص میکند از آغاز به پایان یا عکس آن.
animation-fill-mode
این پراپرتی مشخص میکند قبل و بعد از انیمیشن المنت به چه صورتی نمایش داده شود.
animation-play-state
این پراپرتی مشخص میکند انیمیشن اجرا شود یا موقتا متوقف شود.
دستور خلاصه
همه دستورهای بالا را میتوانید در یک دستور زیر خلاصه کنید.
animation: name duration timing-function delay iteration-count direction fill-mode play-state;
مثال
Flash
@keyframes flash {
0%,50%,100% {
opacity: 1;
}
25%,75% {
opacity: 0.5;
}
}
.item {
animation-name: flash;
animation-duration: 1s;
}
.item:active {
animation-name: none;
}
مثال
Square to Circle
@keyframes square-to-circle {
0% {
border-radius:0 0 0 0;
background: #4285F4;
transform: rotate(0deg);
}
25% {
border-radius:50% 0 0 0;
background: #FBBC05;
transform: rotate(45deg);
}
50% {
border-radius:50% 50% 0 0;
background: #34A853;
transform: rotate(90deg);
}
75% {
border-radius:50% 50% 50% 0;
background: #EA4335;
transform: rotate(135deg);
}
100% {
border-radius:50% 50% 50% 50%;
background: #000000;
transform: rotate(180deg);
}
}
.item {
animation: square-to-circle 2s .5s infinite cubic-bezier(1,.15,.3,1.35) alternate;
}
تمرین ۱
- این فایل را دانلود کنید.
- آن را در فولدر web2 باز کنید.
- در فایل CSS آن تغییراتی بدهید تا همانند ویدیوی زیر شود.
طراحی وب: ۷- ترنسفورم سه بعدی
فضای سهبعدی
برای نمایش المنتها در فضای سه بعدی باید از محورهای مختصات سه بعدی استفاده کرد. جهت این محورها به دو صورت میتواند باشد. که به آن راستگرد و یا چپگرد میگویند. اگر سه انگشت شست، نشانه و میانی دست خود را طوری باز کنید که هر یک از آنها با زاویه ۹۰ درجه نسبت به دیگری قرار گیرد. انگشت شست جهت محور x را تعیین میکند. و انگشت نشانه جهت محور y را و انگشت میانی جهت محور z را نشان میدهد.
X: انگشت شست
Y: انگشت نشانه
Z: انگشت میانی
اگر از دست راست استفاده کنید جهت محورهای مختصات راستگرد و اگر از دست چپ استفاده کنید چپگرد خواهد بود.
راستگرد: دست راست
چپگرد: دست چپ
بیشتر جاها سیستم راستگرد به کار میرود. ولی در کامپیوتر سیستم مختصات چپ گرد است.
فانکشنهای ترنسفورم
با پراپرتی transform در فضای سه بعدی نیز میتوانید سایز، جا و یا شکل المنت را تغییر دهید.
فرم کلی آن به شکل زیر است:
transform: function( );
در پراپرتی ترنسفورم فانکشنهای زیر را میتوان به کار برد.
- rotate: چرخش
- translate: جابجایی
- scale: تغییر اندازه
- skew: کجی
- matrix: کلی
rotate
برای چرخاندن المنت حول محور x از فانکشن rotateX استفاده کنید.
زاویه را با یکی از واحدهای زیر بنویسید.
deg: درجه
rad: رادیان
grad: گرادیان
turn: تعداد دور
برای چرخاندن المنت حول محور y از فانکشن rotateY استفاده کنید.
برای چرخاندن المنت حول محور z از فانکشن rotateZ استفاده کنید. این معادل دستور rotate است.
برای چرخاندن المنت حول محور دلخواه از فانکشن rotate3d به شکل زیر استفاده کنید.
transform: rotate3d(x, y, z, angle);
محور مورد نظر، خطی است که از مبدأ مختصات و نقطهای با مختصات (x، y، z) میگذرد. و angle زاویه چرخش است.
translate
برای جابجایی المنت بر روی محور x از فانکشن tranlateX استفاده کنید. در این جا از هر واحدی میتوانید استفاده کنید.
برای جابجایی المنت بر روی محور y از فانکشن tranlateY استفاده کنید.
برای جابجایی المنت بر روی محور z از فانکشن tranlateZ استفاده کنید.
برای جابجایی المنت به نقطه دلخواه از فانکشن translate3d به شکل زیر استفاده کنید.
transform: translate3d(x, y, z);
scale
برای تغییر اندازه المنت بر روی محور x از فانکشن scaleX استفاده کنید. (این مقدار نسبی است و واحد نمیخواهد.)
برای تغییر اندازه المنت بر روی محور y از فانکشن scaleY استفاده کنید.
برای تغییر اندازه المنت بر روی محور z از فانکشن scaleZ استفاده کنید. اگر المنت در صفحه باشد، این فانکشن هیچ تأثیری ندارد.
ولی اگر المنت با صفحه مانیتور زاویه داشته باشد تغییر میکند.
برای تغییر اندازه المنت بر روی هر سه محور از فانکشن scale3d به شکل زیر استفاده کنید.
transform: scale3d(x,y,z);
skew
پراپرتی skew تنها بر روی محورهای x و y کار میکند.
matrix
برای این که همه موارد بالا را در یک فانکشن بگنجانید میتوانید عبارت matrix3d را به کار برید.
پشت المنت
این پراپرتی تعیین میکند که هنگام چرخش المنت، محتوای آن از پشت دیده شود یا نه.
backface-visibility: visible(Default)|hidden;
مبدأ مختصات
به نقطه تقاطع محورها، مبدأ مختصات میگویند. فاصلهها، چرخش و یا پیچش به دور آن صورت میگیرد. در ترنسفورم به صورت پیش فرض مبدأ مختصات هر المنت در مرکز آن در نظر گرفته میشود. ولی شما میتوانید آن را تغییر دهید.
با کمک پراپرتی transform-origin میتوانید جای مبدأ را برای آن المنت تعیین کنید.
transform-origin: x y z;
x: left | center | right | length (default: 50%) y: top | center | bottom | length (default: 50%) z: length (default: 0)
پرسپکتیو
پرسپکتیو perspective یا ژرفانمایی به معنای نمایش یک شیء سه بعدی بر روی سطح دو بعدی است، همان گونه که با چشم دیده میشود. جای چشم بیننده (دیدگاه) در شکل تصویری که دیده میشود بسیار موثر است.
Perspective: A point of view.
با دو پراپرتی perspective و perspective-origin دیدگاه (جای چشم بیننده) را میتوان تعیین کرد. این پراپرتیها باید به پرنت داده شوند.
perspective
با کمک پراپرتی perspective میتوانید فاصله دیدگاه را از صفحه z=0 تعیین کنید. (مقدار z نقطه دیدگاه)
perspective: z;
perspective-origin
با کمک پراپرتی perspective-origin میتوانید x و y دیدگاه را تعیین کنید.
perspective-origin: x y;
x: left | center | right | length (default: 50%) y: top | center | bottom | length (default: 50%)
تخت یا سه بعدی
این پراپرتی تعیین میکند که المنت تخت باشد یا سه بعدی. این پراپرتی را باید به پرنت بدهید.
transform-style: flat(Default)|preserve-3d;
مثال
چرخش تصویر حول محور y:
.parent {
position: relative;
transform-style: preserve-3d;
perspective: 1000px;
}
.card {
position: absolute;
transition: all 1s;
backface-visibility: hidden;
}
.card .back {
transform: rotateY(180deg);
}
.parent:hover .card {
transform: rotateY(180deg);
}
مثال
چرخش تصویر حول محور y:
.parent {
position: relative;
transform-style: preserve-3d;
perspective: 1000px;
}
.item {
position: absolute;
transition: all 1s;
backface-visibility: hidden;
transform-origin: center right;
}
item.back {
transform: rotateY(180deg);
}
parent:hover item {
transform: translateX(-100%) rotateY(180deg);
}
مثال
Parallax
.parent {
height: 100vh;
overflow-x: hidden;
overflow-y: scroll;
perspective: 1px;
}
item.back {
position: relative;
z-index: -1;
transform-origin: top;
transform: translateZ(-1px) translateY(-50vh) scale(2);
}
طراحی وب: ۶- ترنسفورم
ترنسفورم به معنای دگرگونی است. با پراپرتی transform در CSS میتوانید سایز، جا و یا شکل المنت را تغییر دهید.
فرم کلی آن به شکل زیر است:
transform: function( );
فانکشنهای ترنسفورم
در پراپرتی ترنسفورم فانکشنهای زیر را میتوان به کار برد.
- rotate: چرخش
- translate: جابجایی
- scale: تغییر اندازه
- skew: کجی
- matrix: کلی
rotate
این فانکشن المنت را حول محور مختصات به اندازه زاویه داده شده، در جهت عقربههای ساعت میچرخاند.
زاویه را با یکی از واحدهای زیر بنویسید.
deg: درجه
rad: رادیان
grad: گرادیان
turn: تعداد دور
translate
برای جابجایی المنت بر روی محور افقی (x) از فانکشن tranlateX استفاده کنید. از واحدهای مختلف می توانید استفاده کنید.
برای جابجایی المنت بر روی محور عمودی (y) از فانکشن tranlateY استفاده کنید.
برای جابجایی المنت بر روی هر دو محور از فانکشن tranlate به شکل زیر استفاده کنید.
transform: translate(x,y);
scale
برای تغییر اندازه المنت بر روی محور افقی (x) از فانکشن scaleX استفاده کنید. (این مقدار نسبی است و واحد نمیخواهد.)
برای تغییر اندازه المنت بر روی محور عمودی (y) از فانکشن scaleY استفاده کنید.
برای تغییر اندازه المنت بر روی هر دو محور از فانکشن scale به شکل زیر استفاده کنید.
transform: scale(x,y);
skew
برای تغییر اندازه کجی المنت بر روی محور افقی (x) از فانکشن skewX استفاده کنید. واحد زاویه استفاده میشود.
برای تغییر اندازه کجی المنت بر روی محور عمودی (y) از فانکشن skewY استفاده کنید.
برای تغییر اندازه کجی المنت بر روی هر دو محور از فانکشن skew به شکل زیر استفاده کنید.
transform: skew(x,y);
matrix
برای این که همه موارد بالا را در یک فانکشن بگنجانید عبارت matrix را به ترتیب زیر بنویسید:
matrix(scaleX, skewY, skewX, scaleY, translateX, translateY)
مبدأ مختصات
به نقطه تقاطع محورها، مبدأ مختصات میگویند. فاصلهها، چرخش و یا پیچش به دور آن صورت میگیرد. در ترنسفورم به صورت پیش فرض مبدأ مختصات هر المنت در مرکز آن در نظر گرفته میشود. ولی شما میتوانید آن را تغییر دهید.
با کمک پراپرتی transform-origin میتوانید جای مبدأ را برای آن المنت تعیین کنید.
transform-origin: x y;
مقدار x و y:
x-value | y-value |
---|---|
left center (default) right value |
top center (default) bottom value |
مثال rotate
مثال scale
مثال skew
مثال
مبدأ مختصات را میتوانید خارج المنت قرار دهید.
مثال
نوشته عمودی
.item {
font-size: 64px;
line-height: 1;
transform-origin: 32px 32px;
transform: rotate(90deg);
}
مثال
ترنسفورم و ترنزیشن
.item {
transition: all 0.5s;
}
.item:hover {
transform: scale(2) rotate(6deg);
box-shadow: 10px 10px 10px rgba(0,0,0,.8);
}
مثال
ترنسفورم و ترنزیشن
.item {
transition: all 0.5s;
}
.item:hover {
transform: translateX(-50%);
}
تمرین ۱
- این فایل را دانلود کنید.
- آن را در فولدر web2 باز کنید.
- در فایل CSS آن تغییراتی بدهید تا همانند ویدیوی زیر هنگام کلیک روی آن، تصویر جابجا شود.
طراحی وب: ۵- ترنزیشن
ترنزیشن به معنای جابجایی است. و در CSS باعث میشود تغییر پراپرتی به آرامی انجام شود. ترنزیشن یک راه ساده برای ایجاد انیمیشن در وب است. برای نمونه شما میتوانید در CSS بنویسید: هنگامی که ماوس روی المنت میرود نحوهی نمایش آن تغییراتی کند. (رنگ، سایز، سایه و … تغییر کند.)
بدون ترنزیشن این تغییرات به یک باره اتفاق میافتد.
ولی با ترنزیشن این تغییرات به آرامی انجام میگیرد.
تریگر – Trigger
به رویدادهایی که باعث این تغییر میشود تریگر یا ماشه میگویند.
رویدادهایی که در ترنزیشن بیشتر به کار میروند، عبارتند از:
- :hover
- :active
- :focus
پراپرتیهای انیمیشن پذیر
همه پراپرتیهای المنت قابلیت متحرک سازی ندارند. تنها برخی از پراپرتیها میتوانند به آرامی و در مدت زمان خاصی به مقدار جدید تغییر کنند. مثلا نوع فونت این امکان را ندارد. ولی سایز و رنگ را میتوان به آرامی تغییر داد. در اینجا لیست کامل پراپرتیهای انیمیشن پذیر آمده است.
تعریف ترنزیشن
ترنزیشن با استفاده از چند پراپرتی کنترل میشود.
transition-duration
مدت زمان ترنزیشن را مشخص می کند. میتوانید یک مدت زمان واحد را برای همه پراپرتیها تعیین کنید. یا برای هر پراپرتی یک مدت زمان جداگانه تعیین کنید. واحد زمان s برای ثانیه یا ms برای میلی ثانیه باید حتما نوشته شود. مقدار پیش فرض صفر است.
transition-property
نام پراپرتیهایی را که ترانزیشنها باید روی آنها اعمال شوند، مشخص میکند. تنها پراپرتیهای فهرست شده در اینجا در مدت مشخص شده و به آرامی تغییر میکنند. تغییرات پراپرتیهای دیگر به طور آنی به طور معمول رخ میدهد.
transition-delay
قبل از ترنزیشن چقدر باید منتظر ماند. واحد زمان s برای ثانیه یا ms برای میلی ثانیه باید حتما نوشته شود. مقدار پیش فرض صفر است.
transition-timing-function
تابعی را معرفی میکند که به کمک آن مقادیر میانی پراپرتی محاسبه میشود. برای طراحی این تابع ویدیوی زیر را ببینید:
دستور خلاصه
هر چهار دستور بالا را میتوانید در یک دستور زیر خلاصه کنید.
transition: property duration timing-function delay;
مثال
در فریم زیر مقادیر را تغییر دهید و با بردن ماوس روی مربع سرمهای نتیجه آن را ببینید.
مثال
ترنزیشن سایه Shadow Transition
.item {
transition: all 0.5s;
}
.item:hover {
box-shadow: 0 10px 20px 0 rgba(0,0,0,0.5);
}
پوینتر ماوس را روی تصویر ببرید و تغییر آن را ببینید.
مثال
ترنزیشن سایه داخلی Inner Shadow
.item {
transition: all 0.5s;
}
.item.button1:hover {
color: Beige;
box-shadow: 200px 0 0 0 DimGray inset;
}
.item.button2:hover {
color: Beige;
box-shadow: 0 60px 0 0 DimGray inset;
}
.item.button3:hover {
color: Beige;
box-shadow: 0 0 0 30px DimGray inset;
}
.item.button4:hover {
color: Beige;
box-shadow: 0 0 100px 0 DimGray inset;
}
پوینتر ماوس را روی دکمهها ببرید و تغییر آن را ببینید.
مثال
ساخت آکوردیون Accordion روش اول
item {
max-height: 0;
transition: max-height 0.5s;
}
item:target {
max-height: 400px;
}
روی آیتمها کلیک کنید و تغییر آن را ببینید.
مثال
ساخت آکوردیون Accordion روش دوم
input {
display: none;
}
item {
max-height: 0;
transition: max-height 0.5s;
}
input:checked ~ item {
max-height: 400px;
}
روی آیتمها کلیک کنید و تغییر آن را ببینید.
تمرین ۱
- این فایل را دانلود کنید.
- آن را در فولدر web2 باز کنید.
- در فایل CSS آن تغییراتی بدهید تا همانند ویدیوی زیر تصاویر به آرامی fade شوند.
طراحی وب: ۴- پوزیشن
پوزیشن موقعیت مکانی یک المنت را در صفحه مشخص میکند.
برای تعیین مکان هر المنت، میتوان فاصله آن را از هر سمت تعیین کرد.
برای محاسبه فاصله، سه محور مختصات در نظر گرفته میشود.
- مکان پیشفرض المنت
- المنت پرنت
- پنجره بروزر
position: static | relative | absolute | fixed | sticky;
- static: None (default value)
- relative: Relative to its default position(1).
- absolute: Relative to its parent position(2).
- fixed: Relative to the browser window(3).
- sticky: Relative to the browser window(3).
پوزیشن پیش فرض – static
اگر برای المنتی پوزیشن تعیین نگردد، به صورت پیشفرض مقدار static در نظر گرفته میشود.
<main>
<section class="red-box"></section>
<section class="orange-box"></section>
<section class="purple-box"></section>
</main>
main {
width: 400px;
height: 400px;
background-color: beige;
}
.red-box {
width: 100px;
height: 100px;
background-color: red;
}
.orange-box {
width: 125px;
height: 125px;
background-color: orange;
}
.purple-box {
width: 150px;
height: 150px;
background-color: purple;
}
در فریم بالا اسکرول کنید. و به محل قرار گرفتن هر المنت دقت کنید.
Static With Coordinates
دادن مختصات المنت بدون تعیین پوزیشن، هیچ کاری نمیکند.
.orange-box {
left:50px; /* 50px from left */
...
}
Relative With Coordinates
تعیین پوزیشن relative بدون تعیین مختصات هیچ کاری نمیکند.
.orange-box {
position: relative; /* relative to its default position. */
...
}
Relative With Coordinates
هنگامیکه پوزیشن relative است؛ مختصات نسبت به مکان پیشفرض المنت محاسبه میشود.
.orange-box {
position: relative; /* relative to its default position. */
top: 50px;
left:50px;
...
}
Absolute Without Coordinates
تعیین پوزیشن absolute بدون دادن مختصات، المنت را در جای پیشفرض خودش نمایش میدهد. ولی آن را در چیدمان بقیه المنتها نادیده میگیرد.
.orange-box {
position: absolute; /* relative to its parent position. */
...
}
Absolute With Coordinates
هنگامیکه پوزیشن المنت absolute است؛ و پوزیشن پرنت آن المنت تعیین نشده باشد. مختصات آن نسبت به پنجره بروزر محاسبه میشود.
.orange-box {
position: absolute; /* relative to its parent position. */
top: 50px;
left:50px;
}
Absolute With Coordinates
هنگامیکه پوزیشن absolute است؛ و پوزیشن پرنت آن المنت تعیین شده باشد. مختصات آن نسبت به پرنت محاسبه میشود.
main {
position: relative; /* relative to its default position. */
...
}
.orange-box {
position: absolute; /* relative to its parent position. */
top: 50px;
left:50px;
...
}
Fixed Without Coordinates
هنگامیکه پوزیشن fixed تعیین شود؛ جای المنت ثابت میماند و با اسکرول کردن جابجا نمیشود. آن را در چیدمان بقیه المنتها نادیده میگیرد.
اگر مختصات داده نشود، المنت را در جای پیشفرض خودش نمایش میدهد.
.orange-box {
position: fixed; /* relative to the browser window. */
...
}
Fixed With Coordinates
هنگامیکه پوزیشن fixed تعیین شود؛ اگر مختصات داده شود، نسبت به پنجره بروزر محاسبه میشود.
.orange-box {
position: fixed; /* relative to the browser window. */
top: 50px;
left:50px;
...
}
Sticky Without Coordinates
واژه sticky به معنای چسبنده است. پوزیشن sticky باعث میشود، هنگام اسکرول، المنت به محل مورد نظر بچسبد. ولی بدون دادن مختصات کاری نمیکند.
.orange-box {
position: sticky; /* relative to the browser window. */
...
}
Sticky With Coordinates
هنگامیکه پوزیشن sticky باشد؛ مختصات نسبت به پنجره بروزر محاسبه میشود.
.orange-box {
position: sticky; /* relative to the browser window. */
top: 50px;
...
}
z-index
ترتیب قرار گرفتن المنتها روی هم را مشخص میکند.
.red-box {
position: absolute;
top: 150px;
left: 150px;
z-index: 3;
...
}
.orange-box {
position: absolute;
top: 100px;
left: 100px;
z-index: 2;
...
}
.purple-box {
position: absolute;
top: 50px;
left: 50px;
z-index: 1;
...
}
خلاصه
حالات گوناگون را در فریم زیر تست کنید. اسکرول کنید و نتیجه را ببینید.
Sticky Navigation Bar
نوار منوی چسبان یکی از کاربردهای پوزیشن است.
nav {
position: sticky;
top: 0px;
}
Auto-Hiding Menu
منوی پنهان شونده نیز یکی از کاربردهای پوزیشن است.
.item {
position: fixed;
top: 50px;
left: -75px;
}
.item:hover {
left: 0px;
}
تمرین ۱
- این فایل را دانلود کنید.
- آن را در فولدر web2 باز کنید.
- یک صفحه با منوی ثابت کناری همانند ویدیوی زیر درست کنید.