انتقل إلى المحتوى
TopClass UI

شريط التنقّل

ترويسة مثبّتة روابطها HTML من الخادم، ويكتب جزء صغير واحد في المتصفح ارتفاعها في --tc-sticky-top.

split - الحجم لم يُقَس بعد

شريط التنقّل

split - الحجم لم يُقَس بعد

ترويسة مثبّتة روابطها HTML من الخادم، ويكتب جزء صغير واحد في المتصفح ارتفاعها في --tc-sticky-top.

تثبيت

الشيفرة

navbar.tsx
import { Button } from 'topclassui/button'
import { NavbarActions, NavbarBrand, NavbarLink, NavbarLinks, NavbarRoot } from 'topclassui/navbar'

<NavbarRoot>
  <NavbarBrand href="/">TopClass UI</NavbarBrand>
  <NavbarLinks>
    <NavbarLink href="/docs">Docs</NavbarLink>
    <NavbarLink href="/components">Components</NavbarLink>
    <NavbarLink href="/icons">Icons</NavbarLink>
  </NavbarLinks>
  <NavbarActions>
    <Button render={<a href="/login" />}>Sign in</Button>
  </NavbarActions>
</NavbarRoot>

يكتب الشريط ارتفاعه في --tc-sticky-top، فيتوقف هدف الرابط #anchor تحته لا خلفه.

كل الحالات، بدون تمرير الفأرة

حالتان

أو استورده من الحزمة

topclassui/navbar
import { NavbarRoot, NavbarBrand, NavbarLinks, NavbarLink, NavbarActions } from 'topclassui/navbar'

ثبّت مرة واحدة:npm i topclassui@beta zod

أمثلة

  • خمسة أجزاء بأسماء مسطّحة، ولا يوجد Navbar وحده: NavbarRoot (عنصر header) وNavbarBrand وNavbarLinks (عنصر nav) وNavbarLink وNavbarActions.
  • في Next.js مرّر رابط الإطار عبر render={<Link href="/docs" />} على NavbarBrand أو NavbarLink. عنصرًا فقط، لا دالة.
  • مع sticky={false} يمرّ الشريط مع الصفحة، ولا يرسل حينها أي JavaScript إلى المتصفح.
  • دون سكربت يبقى المتغير 0px. اكتب :root { --tc-sticky-top: 3.75rem } في CSS لصف واحد، ويستبدله الشريط بالقيمة المقيسة.
  • شريط مثبّت واحد في الصفحة: شريطان يكتبان المتغير نفسه، فأعطِ الثاني sticky={false}.
  • الصفحة التي تمرّر داخل صندوق من صنعك تحتاج scroll-padding-top: var(--tc-sticky-top) على ذلك الصندوق.
  • على الشاشة الضيقة تمرّر الروابط أفقيًا داخل الشريط، وتنزل الإجراءات إلى صف ثانٍ. الصفحة نفسها لا تمرّر أفقيًا أبدًا.
basic
with-search
many-links
not-sticky
tall-page
بالعربية، من اليمين إلى اليسار

الخصائص

NavbarRoot

خصائص NavbarRoot
الخاصيةالنوعالافتراضيالحدودالوصف
childrenReactNode--The parts, in order: NavbarBrand, NavbarLinks and NavbarActions. Each one is optional.
stickybooleantrue-NavbarRoot: the bar stays at the top while the page scrolls, and publishes its height as --tc-sticky-top.

NavbarBrand

خصائص NavbarBrand
الخاصيةالنوعالافتراضيالحدودالوصف
childrenReactNode--The name of the site, with a logo before it if there is one.
renderReactElement--The element the brand is drawn as, such as render={<Link href="/" />}. A plain anchor without it.

NavbarLinks

خصائص NavbarLinks
الخاصيةالنوعالافتراضيالحدودالوصف
childrenReactNode--The links: one NavbarLink each.
labelsLabels--The built-in strings; the nav is named by labels.navbar.label. Defaults to English.
localestring--Accepted so {...getLabels(locale)} spreads cleanly. Nothing here formats a number, so it never reaches the element.

NavbarLink

خصائص NavbarLink
الخاصيةالنوعالافتراضيالحدودالوصف
childrenReactNode--The text of the link.
currentbooleanfalse-NavbarLink: the link of the page being read. It sets aria-current="page" and draws the link heavier.
renderReactElement--The element the link is drawn as, such as render={<Link href="/docs" />}. A plain anchor without it.

NavbarActions

خصائص NavbarActions
الخاصيةالنوعالافتراضيالحدودالوصف
childrenReactNode--What sits at the end of the bar: a Button, a search Input, an Avatar.

لوحة المفاتيح وإمكانية الوصول

لوحة مفاتيح Navbar
المفاتيحما يفعله
Tabينتقل إلى الشعار، ثم كل رابط، ثم كل إجراء، بترتيب القراءة.
ShiftTabيعود إلى الخلف.
Enterيتبع الرابط الذي عليه التركيز.
  • current على رابط NavbarLink واحد يضع aria-current="page". يصبح الرابط أثقل وأغمق معًا، وتحته خط في وضع الألوان القسرية.
  • NavbarLinks معلم تنقّل اسمه «التنقل الرئيسي» من labels.navbar.label. إن وُجد اثنان في الصفحة فأعطِ أحدهما aria-label، واسمك هو الغالب.
  • الرابط الذي عليه تركيز لوحة المفاتيح يظهر كاملًا داخل القائمة التي تمرّر.

من اليمين إلى اليسار

مع dir="rtl" يجلس الشعار على اليمين والإجراءات على اليسار. مرّر labels={ar} إلى NavbarLinks ليأخذ اسمه بالعربية.

الخادم والمتصفح

يُعرض على الخادم، والجزء التفاعلي مكوّن متصفح لا يُرسل إلا عند استخدامه.

الملفات: index.tsx, client.tsx.

على الشارة: split - الحجم لم يُقَس بعد.