Transition — property, duration, timing-function, delay
Muammodan boshlaylik
Tugmaga hover qo'shdingiz:
.btn { background: #2563eb; }
.btn:hover { background: #1d4ed8; }
Sichqoncha kelganda rang birdaniga almashadi — "lop" etib. Ishlaydi, lekin arzon ko'rinadi. Zamonaviy interfeyslarda holat o'zgarishi silliq: rang asta-sekin o'tadi, kartochka biroz ko'tariladi, menyu ochilganda yumshoq paydo bo'ladi.
Bitta qator — transition — har qanday holat o'zgarishini animatsiyaga aylantiradi.
Asosiy foydalanish
.btn {
background: #2563eb;
transition: background 200ms;
}
.btn:hover {
background: #1d4ed8;
}
Endi rang 200 millisekund davomida silliq o'tadi — va sichqoncha ketganda xuddi shunday orqaga.
[!INFO]
transitionni asosiy holatga yozing (.btn),:hoverga emas. Aks holda animatsiya faqat bir tomonga ishlaydi: hover ga kirishda silliq, chiqishda — birdaniga.
transition — o'zgarishni animatsiyalash, uning o'zi hech narsani o'zgartirmaydi. O'zgarishni boshqa narsa keltirib chiqaradi: :hover, :focus, class qo'shilishi (JavaScript), media query.
To'rt xususiyat
transition: <property> <duration> <timing-function> <delay>;
transition-property — nima animatsiyalanadi
transition-property: background;
transition-property: transform, opacity; /* bir nechta */
transition-property: all; /* hamma narsa */
[!WARNING]
transition: all— qulay, lekin xavfli: kelajakda qo'shilgan har qanday xususiyat (masalan,widthyokipadding) ham animatsiyalanadi — kutilmagan "sudralish" va tezlik muammolari. Aniq xususiyatlarni yozing.
transition-duration — davomiyligi
transition-duration: 200ms; /* yoki 0.2s */
| Davomiylik | Qachon |
|---|---|
| 100–150ms | Mayda: hover rangi, fokus |
| 200–300ms | Odatiy: tugmalar, kartochka ko'tarilishi, dropdown |
| 300–500ms | Katta: modal, yon panel, sahifa elementlari |
| > 500ms | Kamdan-kam — interfeys "sekin" tuyuladi |
Interfeys animatsiyalari tez bo'lishi kerak — foydalanuvchi kutmasligi uchun.
transition-timing-function — tezlik egri chizig'i
Animatsiya davomida tezlik qanday o'zgaradi:
| Qiymat | Xarakter | Qachon |
|---|---|---|
ease |
Tez boshlanadi, sekin tugaydi (standart) | Umumiy |
linear |
Bir tekis | Aylanish, progress bar |
ease-in |
Sekin boshlanadi, tezlashadi | Ekrandan chiqib ketish |
ease-out |
Tez boshlanadi, sekinlashadi | Ekranga kirib kelish, paydo bo'lish |
ease-in-out |
Sekin–tez–sekin | Joyida o'zgarish |
cubic-bezier(...) |
O'zingizning egri chiziq | Brendga xos "his" |
.panel {
transition: transform 300ms cubic-bezier(0.16, 1, 0.3, 1); /* "ease-out-expo" — yumshoq to'xtash */
}
Haqiqiy dunyoda narsalar birdaniga to'xtamaydi — ease-out tabiiy his beradi. DevTools da transition yonidagi egri chiziq belgisiga bosing — vizual muharrir ochiladi.
transition-delay — kechikish
transition-delay: 100ms;
Dropdown sichqoncha tasodifan o'tib ketganda ochilib ketmasligi uchun foydali:
.dropdown-menu {
opacity: 0;
visibility: hidden;
transition: opacity 200ms, visibility 200ms;
}
.dropdown:hover .dropdown-menu {
opacity: 1;
visibility: visible;
transition-delay: 150ms; /* ochilishda kechikish */
}
Qisqa yozuv va bir nechta transition
.card {
transition:
transform 250ms ease-out,
box-shadow 250ms ease-out,
border-color 150ms;
}
.card:hover {
transform: translateY(-4px);
box-shadow: 0 12px 24px rgb(0 0 0 / 0.12);
border-color: #2563eb;
}
Har bir xususiyat — o'z davomiyligi va egri chizig'i bilan, vergul bilan ajratiladi.
Nimani animatsiyalash mumkin
Faqat oraliq qiymati bor xususiyatlar: rang (qizildan ko'kka), raqamlar (0 dan 1 gacha), uzunliklar.
| Animatsiyalanadi | Animatsiyalanmaydi |
|---|---|
color, background-color, border-color |
display (block ↔ none — oraliq yo'q) |
opacity |
font-family |
transform |
background-image (gradient lar — qisman) |
width, height, padding, margin (lekin sekin — pastda) |
height: auto (standartda) |
box-shadow, border-radius |
display: none ni animatsiyalash
Element paydo bo'lishi va yo'qolishi — display o'rniga opacity + visibility:
.toast {
opacity: 0;
visibility: hidden; /* ko'rinmas va bosib bo'lmaydi */
transform: translateY(8px);
transition: opacity 200ms, transform 200ms, visibility 200ms;
}
.toast.show {
opacity: 1;
visibility: visible;
transform: translateY(0);
}
Tezlik: faqat transform va opacity
Brauzer sahifani chizish uchun uch bosqichdan o'tadi (1-dars): layout → paint → composite. Qaysi xususiyat o'zgarishiga qarab:
| Xususiyat | Qaysi bosqichlar qayta ishlaydi | Narxi |
|---|---|---|
width, height, margin, top, left, font-size |
layout + paint + composite | ❌ Qimmat — butun sahifa qayta hisoblanishi mumkin |
color, background, box-shadow |
paint + composite | ⚠️ O'rtacha |
transform, opacity |
Faqat composite (GPU da) | ✅ Arzon, silliq 60 fps |
/* ❌ har kadrda layout qayta hisoblanadi, telefonda "qotadi" */
.panel { transition: left 300ms; }
.panel.open { left: 0; }
/* ✅ GPU da, silliq */
.panel { transition: transform 300ms; }
.panel.open { transform: translateX(0); }
Harakatlantirish — transform: translate(), kattalashtirish — transform: scale(), paydo bo'lish — opacity. Batafsil — 29-dars.
Foydalanuvchini hurmat qilish
26-darsdan — tizimda "harakatni kamaytirish" yoqilgan bo'lsa:
@media (prefers-reduced-motion: reduce) {
* {
transition-duration: 0.01ms !important;
}
}
Rang o'zgarishlari kabi mayda effektlarni qoldirish mumkin, lekin harakat (siljish, kattalashish) — o'chirilsin.
Nima uchun shunday?
Nima uchun animatsiyalar shunchaki "bezak" emas, balki interfeysning muhim qismi hisoblanadi?
Chunki ular tushunishga yordam beradi. Inson ko'zi to'satdan o'zgarishni yaxshi kuzatmaydi: element birdaniga paydo bo'lsa, "qayerdan keldi?", birdaniga yo'qolsa — "nima bo'ldi?" degan savol tug'iladi. Qisqa animatsiya sabab va natijani bog'laydi: menyu tugmadan "chiqadi", o'chirilgan element "yo'qolib ketadi", yangi xabar "tushadi". Bu hayotdagi jismlar xatti-harakatiga o'xshash bo'lgani uchun miya uni zo'riqmasdan tushunadi. Lekin chegara muhim: animatsiya tez (300ms gacha) va ma'noli bo'lishi kerak — aks holda u yordam emas, to'siqqa aylanadi.
Xulosa
Eslab qoling:
transition: xususiyat davomiylik egri-chiziq kechikish- Asosiy holatga yozing (
.btn),:hoverga emas — ikki tomonga ishlaydi allemas — aniq xususiyatlar- Davomiylik: 150–300ms; egri chiziq: kirish —
ease-out, chiqish —ease-in displayanimatsiyalanmaydi →opacity+visibility- Tez animatsiya — faqat
transformvaopacity;width/left— qimmat prefers-reduced-motionni hurmat qiling
Keyingi dars
29-dars: Transform — translate, rotate, scale, skew