Menu
flag Ar iconالعربيةdown icon

وسم nav في HTML: شريط التنقل والقوائم ومسار التنقل

العنصر <nav> يحدد مجموعة من روابط التنقل الرئيسية. تعلّم كيف تبني شريط تنقل بـ <nav> وقائمة، وكيف تميّز الصفحة الحالية، وكيف تسمّي عدة عناصر nav في صفحة واحدة، وكيف تصنع زر قائمة للجوال.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

شريط تنقل باستخدام nav

أحط قائمتك بـ <nav> وضع الروابط في قائمة. يحوّل flexbox القائمة إلى شريط أفقي:

list-style: none وpadding: 0 تزيلان النقاط والإزاحة. وdisplay: block على كل رابط تتيح لحشوه أن يشغل مساحة حقيقية في الشريط، فيصبح الصندوق كله بحشوه هدفًا للنقر. احذف سطر display: flex وستصبح القائمة نفسها قائمة عمودية، وهذا شكل قائمة الشريط الجانبي.

<nav> نفسه لا مظهر له. وظيفته المعنى: تعرضه قارئات الشاشة كـ معلم تنقل، فيستطيع المستخدم القفز إلى القائمة، أو تجاوزها، بمفتاح واحد.

تمييز الصفحة الحالية

أضف aria-current="page" إلى رابط الصفحة المعروضة. تقول لقارئات الشاشة «أنت هنا»، وتعطي CSS نقطة ارتكاز لإبراز الرابط:

انقل aria-current="page" إلى رابط آخر وسينتقل الإبراز معه. تنسيق السمة بدلًا من فئة .active يُبقي المظهر وإمكانية الوصول متزامنين: لا يمكن أن يوجد أحدهما دون الآخر.

عدة عناصر nav في صفحة واحدة: التسميات ومسار التنقل

يمكن أن يكون في الصفحة قائمة رئيسية ومسار تنقل وفهرس محتويات، كل منها في <nav> خاص. أعطِ كلًا منها aria-label، فيعلن قارئ الشاشة «Breadcrumb navigation» بدلًا من ثلاثة إدخالات «navigation» متطابقة:

يستخدم مسار التنقل قائمة مرتبة <ol> لأن الترتيب مهم. والشرطات المائلة تأتي من ::before في CSS، فلا تقرأ قارئات الشاشة «شرطة مائلة» بين كل عنصرين. العنصر الأخير هو الصفحة الحالية وليس رابطًا.

فهرس المحتويات

قائمة روابط إلى أقسام الصفحة نفسها تنقلٌ أيضًا. روابط #id تنتقل إلى العنصر الذي يحمل ذلك المعرّف، جرّبها في المعاينة:

هنا تأتي التسمية من عنوان ظاهر عبر aria-labelledby، وهذا أفضل من aria-label حين يكون العنوان موجودًا أصلًا على الشاشة.

زر قائمة الجوال

على الشاشات الضيقة تختبئ القوائم عادةً خلف زر. استخدم <button> حقيقيًا مع aria-expanded، وأبقِ الروابط داخل <nav>:

aria-expanded تخبر قارئ الشاشة إن كانت القائمة مفتوحة، والسمة hidden تزيل القائمة من الشاشة ومن شجرة إمكانية الوصول معًا ما دامت مغلقة. وعلى الشاشات العريضة تُظهر القائمة باستعلام وسائط وتخفي الزر.

أخطاء شائعة

  • إحاطة كل مجموعة روابط بـ <nav>. استخدمه للقائمة الرئيسية ومسار التنقل وترقيم الصفحات وفهارس المحتويات. الروابط داخل النص ليست مجموعات تنقل.
  • زر قائمة مصنوع من <div>. لا يمكن التركيز عليه أو ضغطه بلوحة المفاتيح. استخدم <button>.
  • عدة عناصر nav بلا تسميات. أضف aria-label أو aria-labelledby لكل منها كي يمكن التمييز بينها.
  • الاكتفاء بتلوين الرابط الحالي. أضف aria-current="page"، فاللون وحده لا يُعلن وقد لا يراه الجميع.
  • روابط href="#" في بيئة الإنتاج. مقبولة في عرض تجريبي، لكن عناصر القائمة الحقيقية تحتاج إلى عناوين حقيقية كي تعمل عند فتحها في تبويب جديد. تشرح صفحة الروابط كيف تعمل قيم href.

الأسئلة الشائعة

ما هو وسم nav في HTML؟

<nav> عنصر دلالي يحيط بمجموعة من روابط التنقل الرئيسية، مثل قائمة الموقع أو فهرس المحتويات أو مسار التنقل. تسرده قارئات الشاشة كمعلم تنقل كي يستطيع المستخدمون القفز إليه مباشرة.

هل يجب أن تكون الروابط داخل nav في قائمة؟

هذا هو النمط الشائع وهو نمط جيد: قائمة <ul> من عناصر <li> تتيح لقارئات الشاشة إعلان عدد الروابط في القائمة. والروابط العادية مباشرة داخل <nav> صالحة أيضًا، مثلًا لرابطين أو ثلاثة في صف.

هل تحتاج كل مجموعة روابط إلى عنصر nav؟

لا. استخدم <nav> لمجموعات التنقل الرئيسية فقط. بضعة روابط في فقرة أو قائمة قصيرة من الروابط القانونية في التذييل لا تحتاج إليه، وكثرة معالم التنقل تجعل إيجاد كل منها أصعب.

كيف أصنع شريط تنقل أفقيًا؟

ضع الروابط في <ul> داخل <nav>، ثم أعطِ القائمة display: flex; list-style: none; padding: 0; وgap. يرتّب flexbox العناصر في صف.

كيف أُظهر الصفحة الحالية في شريط التنقل؟

أضف aria-current="page" إلى رابط الصفحة التي يوجد فيها المستخدم، ونسّقه بالمحدد [aria-current="page"]. عندها تعلن قارئات الشاشة أنها الصفحة الحالية أيضًا.

هل يمكن أن يكون في الصفحة أكثر من nav؟

نعم، مثل قائمة رئيسية ومسار تنقل وفهرس محتويات. أعطِ كلًا منها aria-label مختلفة مثل "Main" أو "Breadcrumb" كي يميّز مستخدمو قارئات الشاشة بينها.

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن