CSS Asoslari - 29-dars
prefers-reduced-motion nima va qanday ishlaydi. Animatsiya yoqmaydigan odamlar uchun qanday qilib accessibility ta'minlash kerak. @media (prefers-reduced-motion: reduce) qanday ishlaydi va qachon o'chadi.
29-dars
prefers-reduced-motion nima o'zi?
"Animatsiya yoqmaydigan odamlar uchun"
1. Avval real hayot
Hamma animatsiyani yoqtirmaydi.
Ba'zi odamlar:
- ko'zi charchaydi
- boshi aylanadi
- saytda hamma narsa qimirlasa yomon bo'ladi
Shu sabab telefon va kompyuterda bitta sozlama bor:
"Animatsiyalarni kamaytir"
Odam o'zi yoqadi. Biz majburlamaymiz.
2. CSS bu yerda nima qiladi?
CSS so'raydi:
"Bu odam animatsiyani kamaytirishni xohlayaptimi?"
Agar ha bo'lsa:
@media (prefers-reduced-motion: reduce) {
/* animatsiyani kamaytir */
}
Agar yo'q bo'lsa:
- bu kod umuman ishlamaydi
- animatsiya normal qoladi
3. Eng muhim joy (diqqat)
π SEN animatsiya yozishni to'xtatmaysan π SEN faqat tanlov berasan
Ya'ni:
- 10 odam β animatsiya bilan
- 1 odam β animatsiyasiz
Hamma xursand π
4. Oddiy misol (100% tushunarli)
Avval:
.button {
transition: transform 200ms;
}
Endi qo'shamiz:
.button {
transition: transform 200ms;
}
@media (prefers-reduced-motion: reduce) {
.button {
transition: none;
}
}
π§ Natija:
- Oddiy odam β tugma silliq harakatlanadi
- Motion yoqmaydigan odam β tugma darrov o'zgaradi
5. QACHON o'chadi?
βοΈFaqat bitta holatda:
foydalanuvchi OS sozlamasida "Reduce motion" ni yoqqan bo'lsa
Aks holda:
- hech qachon o'chmaydi
- sen yozgan animatsiya ishlaydi
6. NIMANI o'chiramiz?
Ko'pincha:
- katta animatsiyalar
- loop bo'ladiganlar
- ko'zni charchatadiganlar
Masalan:
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
.loader {
animation: spin 1s infinite;
}
@media (prefers-reduced-motion: reduce) {
.loader {
animation: none;
}
}
Shuni o'chirish yaxshi.
7. To'liq misol (real loyiha)
/* Normal holat */
.card {
transition: transform 300ms ease, box-shadow 300ms ease;
}
.card:hover {
transform: translateY(-8px);
box-shadow: 0 12px 24px rgba(0, 0, 0, 0.15);
}
/* Animatsiya yoqmaydiganlar uchun */
@media (prefers-reduced-motion: reduce) {
.card {
transition: none;
}
.card:hover {
transform: none;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
}
π§ Bu yerda:
- Normal β hover bo'lganda card yuqoriga ko'tariladi
- Reduced motion β faqat shadow o'zgaradi, transform yo'q
8. Qaysi animatsiyalarni o'chirish kerak?
β O'chirish kerak:
animation: spin infinitetransition: transform 500ms(katta harakatlar)@keyframesbilan loop animatsiyalar- Parallax effect'lar
β οΈ O'chirish shart emas:
- Kichik transition'lar (100-200ms)
- Color o'zgarishi
- Opacity o'zgarishi
π Lekin yaxshiroq bo'ladi agar ularni ham o'chirsang.
9. Global qilish (eng yaxshi amaliyot)
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}
π§ Bu:
- Barcha animatsiyalarni deyarli o'chiradi
- Lekin 0.01ms qoldiradi (to'liq o'chirish ba'zida muammo qiladi)
10. Qanday tekshirish mumkin?
Chrome DevTools:
- F12 β Console
- Yoz:
window.matchMedia('(prefers-reduced-motion: reduce)').matches - Agar
truebo'lsa β reduce motion yoqilgan
OS sozlamalari:
Windows:
- Settings β Ease of Access β Display β Show animations
macOS:
- System Preferences β Accessibility β Display β Reduce motion
iOS:
- Settings β Accessibility β Motion β Reduce Motion
11. Nega bu muhim?
Accessibility (a11y)
π Bu accessibility standarti.
π WCAG (Web Content Accessibility Guidelines) tavsiya qiladi.
π Ba'zi odamlar uchun bu zarur.
Real statistik:
- ~15% odamlar motion sensitivity'ga ega
- Ko'pchilik saytni tashlab ketadi agar animatsiya ko'p bo'lsa
12. Xulosa
β
Har doim prefers-reduced-motion ni hisobga oling
β Katta animatsiyalarni o'chiring
β Kichik transition'larni ham o'chirish yaxshi
β Global qilish eng oson yo'l
π Bu β professional dasturchi belgisi.