BottomNavigation
نوار ناوبری ثابتِ پایینِ صفحه در چیدمان موبایل: هر مقصد یک آیکون روی یک برچسبِ کوتاه است. برخلاف Tabs که محتوای همان صفحه را عوض میکند، اینجا هر آیتم معمولاً یک مسیر جداست؛ برای همین value باید از بیرون (از مسیر فعلیِ روتر) بیاید، نه از state داخلیِ خودِ کامپوننت.
این کامپوننت فعلاً برای ۱ فریمورک از ۴ فریمورک آماده است.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
نصب
با CLI اختصاصی dig-ui کامپوننت را از رجیستری دیگ نصب کنید؛ وابستگیها و فایلها خودکار اضافه میشوند.
pnpm dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/bottom-navigation.jsonnpx dig-ui@latest add https://design-system-tau-green.vercel.app/r/bottom-navigation.jsonyarn dlx dig-ui@latest add https://design-system-tau-green.vercel.app/r/bottom-navigation.jsonbunx --bun dig-ui@latest add https://design-system-tau-green.vercel.app/r/bottom-navigation.jsonاین کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
استفاده
import {
BottomNavigation,
BottomNavigationItem,
} from "@/components/ui/bottom-navigation"
// value از مسیرِ فعلیِ روتر میآید، نه از state داخلیِ صفحه
<BottomNavigation value={activeRoute} onValueChange={navigate}>
<BottomNavigationItem value="home" icon={<Home />} label="خانه" />
</BottomNavigation>این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
ترکیب اجزا
دسترسپذیری
- هر آیتم role="tab" و aria-selected دارد؛ اگر آیتمها واقعاً به مسیر دیگری میروند (نه تغییرِ محتوای همان صفحه)، از Link با asChild استفاده کنید تا کلیک راست/باز کردن در تب جدید هم کار کند.
- برچسبِ متنی زیر هر آیکون همیشه نمایش داده میشود؛ آیکونِ تنها بدون متن برای موبایل خوانا نیست.
- برای اعلانِ نخوانده از badge استفاده کنید، نه رنگِ صرف؛ صفحهخوان محتوای badge را هم میخواند.
مرجع API
این کامپوننت هنوز برای Vue پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Reka UI در دست کار است.
این کامپوننت هنوز برای Svelte پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Bits UI در دست کار است.
این کامپوننت هنوز برای Angular پورت نشده است.
نسخهٔ ریاکت آماده است؛ پورت این فریمورک روی Angular CDK در دست کار است.
نمونهها
پنج مقصد
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
دکمهٔ افزودن وسط (FAB)
BottomNavigationFab یک دکمهٔ گردِ برجسته میسازد که با translate کمی بالاتر از نوار میزند. چون flex-1 نیست، فضای خودش را میگیرد و بقیهٔ آیتمها هنوز مساوی تقسیم میشوند. با یا بدون value قابلاستفاده است — اگر مقصدِ واقعی نیست (مثلاً فقط یک مودال باز میکند)، value ندهید تا هیچوقت state=active نگیرد.
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
با نشان اعلان (Badge)
این نمونه هنوز برای Vue پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Svelte پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
این نمونه هنوز برای Angular پورت نشده است؛ آنچه میبینید نسخهٔ ریاکت است.
کدام نمونه برای کدام موقعیت
| نمونه | کجا به کار میآید |
|---|---|
| پنج مقصد | بیشترین تعدادی که این الگو خوانا میماند؛ بیشتر از پنج، آیکونها له میشوند |
| دکمهٔ افزودن وسط (FAB) | اپهایی که یک کنشِ اصلی (ساخت پست، سفارش تازه) باید همیشه در دسترس باشد |
| با نشان اعلان (Badge) | آیتمی که پیام یا اعلانِ نخوانده دارد |