إطار Bootstrap 5

التلميحات والقوائم الجانبية

12 دقيقة الدرس 33 من 40

التلميحات والقوائم الجانبية في Bootstrap 5

توفر التلميحات (Tooltips) تلميحات ومعلومات مفيدة عندما يمرر المستخدمون فوق العناصر. القوائم الجانبية (Offcanvas) هي مكون قوي تم تقديمه في Bootstrap 5 لإنشاء لوحات جانبية وأدراج تنزلق من حافة منطقة العرض.

أساسيات التلميحات

تعرض التلميحات تراكبات نصية صغيرة تظهر عند التمرير أو التركيز أو النقر.

<!-- تلميح أساسي --> <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-title="هذا تلميح"> مرر فوقي </button> <!-- تهيئة جميع التلميحات --> <script> // يجب تهيئة التلميحات const tooltipTriggerList = document.querySelectorAll('[data-bs-toggle="tooltip"]'); const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl)); </script>
مهم: مثل النوافذ المنبثقة، تتطلب التلميحات تهيئة بجافا سكريبت للعمل. قم دائمًا بتضمين سكريبت التهيئة.

اتجاهات التلميحات

تحكم في موضع التلميح باستخدام خاصية data-bs-placement.

<!-- أعلى (افتراضي) --> <button type="button" class="btn btn-primary" data-bs-toggle="tooltip" data-bs-placement="top" data-bs-title="تلميح في الأعلى"> تلميح في الأعلى </button> <!-- يمين --> <button type="button" class="btn btn-success" data-bs-toggle="tooltip" data-bs-placement="right" data-bs-title="تلميح على اليمين"> تلميح على اليمين </button> <!-- أسفل --> <button type="button" class="btn btn-warning" data-bs-toggle="tooltip" data-bs-placement="bottom" data-bs-title="تلميح في الأسفل"> تلميح في الأسفل </button> <!-- يسار --> <button type="button" class="btn btn-danger" data-bs-toggle="tooltip" data-bs-placement="left" data-bs-title="تلميح على اليسار"> تلميح على اليسار </button>

تخصيص التلميحات

خصص مظهر وسلوك التلميح باستخدام خيارات جافا سكريبت.

<!-- محتوى HTML في التلميح --> <button type="button" class="btn btn-info" data-bs-toggle="tooltip" data-bs-html="true" data-bs-title="<em>محتوى</em> <strong>HTML</strong>"> تلميح مع HTML </button> <!-- مفعل مخصص --> <button type="button" class="btn btn-secondary" data-bs-toggle="tooltip" data-bs-trigger="click" data-bs-title="انقر للإظهار"> تفعيل بالنقر </button> <!-- تكوين جافا سكريبت --> <script> const tooltip = new bootstrap.Tooltip(element, { animation: true, // تفعيل حركة التلاشي delay: { show: 500, hide: 100 }, // تأخيرات الإظهار/الإخفاء (مللي ثانية) html: false, // السماح بمحتوى HTML placement: 'top', // موضع التلميح trigger: 'hover focus', // كيفية تفعيل التلميح title: 'نص التلميح', // محتوى التلميح offset: [0, 8], // الإزاحة من العنصر customClass: 'my-tooltip' // فئة CSS مخصصة }); // إظهار التلميح tooltip.show(); // إخفاء التلميح tooltip.hide(); // التبديل tooltip.toggle(); </script>

التلميح على العناصر المعطلة

العناصر المعطلة لا يمكنها تفعيل التلميحات مباشرة. استخدم عنصر غلاف.

<!-- غلف الزر المعطل --> <span class="d-inline-block" data-bs-toggle="tooltip" data-bs-title="زر معطل"> <button class="btn btn-primary" type="button" disabled> زر معطل </button> </span>
نصيحة: يجب أن يكون لعنصر الغلاف display: inline-block وخاصية tabindex="0" لتمكين التركيز بلوحة المفاتيح.

القوائم الجانبية Offcanvas (جديد في Bootstrap 5)

ينشئ Offcanvas أشرطة جانبية مخفية تنزلق إلى العرض، مثالي لقوائم التنقل والمحتوى الإضافي.

<!-- زر التفعيل --> <button class="btn btn-primary" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasExample"> فتح القائمة الجانبية </button> <!-- Offcanvas --> <div class="offcanvas offcanvas-start" tabindex="-1" id="offcanvasExample" aria-labelledby="offcanvasExampleLabel"> <div class="offcanvas-header"> <h5 class="offcanvas-title" id="offcanvasExampleLabel">عنوان القائمة</h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="إغلاق"></button> </div> <div class="offcanvas-body"> <p>هذا محتوى القائمة الجانبية. يمكنك إضافة أي محتوى هنا.</p> <div class="dropdown mt-3"> <button class="btn btn-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown"> قائمة منسدلة </button> <ul class="dropdown-menu"> <li><a class="dropdown-item" href="#">إجراء</a></li> <li><a class="dropdown-item" href="#">إجراء آخر</a></li> </ul> </div> </div> </div>

موضع القائمة الجانبية

يمكن أن تنزلق القائمة الجانبية من أي جانب من منطقة العرض.

<!-- الجانب الأيسر (افتراضي) --> <div class="offcanvas offcanvas-start" id="offcanvasLeft"> <div class="offcanvas-header"> <h5 class="offcanvas-title">قائمة يسارية</h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas"></button> </div> <div class="offcanvas-body"> المحتوى ينزلق من اليسار. </div> </div> <!-- الجانب الأيمن --> <div class="offcanvas offcanvas-end" id="offcanvasRight"> <div class="offcanvas-header"> <h5 class="offcanvas-title">قائمة يمينية</h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas"></button> </div> <div class="offcanvas-body"> المحتوى ينزلق من اليمين. </div> </div> <!-- أعلى --> <div class="offcanvas offcanvas-top" id="offcanvasTop"> <div class="offcanvas-header"> <h5 class="offcanvas-title">قائمة علوية</h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas"></button> </div> <div class="offcanvas-body"> المحتوى ينزلق من الأعلى. </div> </div> <!-- أسفل --> <div class="offcanvas offcanvas-bottom" id="offcanvasBottom"> <div class="offcanvas-header"> <h5 class="offcanvas-title">قائمة سفلية</h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas"></button> </div> <div class="offcanvas-body"> المحتوى ينزلق من الأسفل. </div> </div>

الخلفية والتمرير في Offcanvas

تحكم في سلوك الخلفية وتمرير الجسم.

<!-- مع خلفية (افتراضي) --> <div class="offcanvas offcanvas-start" data-bs-backdrop="true" data-bs-scroll="false" id="offcanvasWithBackdrop"> <!-- المحتوى --> </div> <!-- بدون خلفية --> <div class="offcanvas offcanvas-start" data-bs-backdrop="false" id="offcanvasWithoutBackdrop"> <!-- المحتوى --> </div> <!-- السماح بتمرير الجسم --> <div class="offcanvas offcanvas-start" data-bs-scroll="true" data-bs-backdrop="true" id="offcanvasWithScroll"> <!-- المحتوى --> </div> <!-- خلفية ثابتة (لا يمكن الإغلاق بالنقر خارجها) --> <div class="offcanvas offcanvas-start" data-bs-backdrop="static" id="offcanvasStatic"> <!-- المحتوى --> </div>
الخيارات:
  • data-bs-backdrop="true" - إظهار الخلفية (افتراضي)
  • data-bs-backdrop="false" - بدون خلفية
  • data-bs-backdrop="static" - خلفية لكن لا يمكن الإغلاق بالنقر عليها
  • data-bs-scroll="true" - السماح بتمرير الجسم أثناء فتح القائمة
  • data-bs-scroll="false" - تعطيل تمرير الجسم (افتراضي)

قائمة تنقل Offcanvas

حالة استخدام شائعة: قائمة تنقل متجاوبة.

<!-- شريط تنقل مع Offcanvas --> <nav class="navbar navbar-dark bg-dark"> <div class="container-fluid"> <a class="navbar-brand" href="#">موقعي</a> <button class="navbar-toggler" type="button" data-bs-toggle="offcanvas" data-bs-target="#offcanvasNavbar"> <span class="navbar-toggler-icon"></span> </button> <div class="offcanvas offcanvas-end" tabindex="-1" id="offcanvasNavbar"> <div class="offcanvas-header"> <h5 class="offcanvas-title">القائمة</h5> <button type="button" class="btn-close btn-close-white" data-bs-dismiss="offcanvas"></button> </div> <div class="offcanvas-body"> <ul class="navbar-nav justify-content-end flex-grow-1 pe-3"> <li class="nav-item"> <a class="nav-link active" href="#">الرئيسية</a> </li> <li class="nav-item"> <a class="nav-link" href="#">حول</a> </li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown"> الخدمات </a> <ul class="dropdown-menu"> <li><a class="dropdown-item" href="#">تصميم الويب</a></li> <li><a class="dropdown-item" href="#">التطوير</a></li> </ul> </li> <li class="nav-item"> <a class="nav-link" href="#">اتصل</a> </li> </ul> <form class="d-flex mt-3" role="search"> <input class="form-control me-2" type="search" placeholder="بحث"> <button class="btn btn-outline-success" type="submit">بحث</button> </form> </div> </div> </div> </nav>

واجهة جافا سكريبت لـ Offcanvas

تحكم في القائمة الجانبية برمجيًا باستخدام جافا سكريبت.

<script> // الحصول على عنصر القائمة الجانبية const offcanvasEl = document.getElementById('myOffcanvas'); // إنشاء نسخة من القائمة مع خيارات const offcanvas = new bootstrap.Offcanvas(offcanvasEl, { backdrop: true, // إظهار الخلفية keyboard: true, // الإغلاق بمفتاح ESC scroll: false // تعطيل تمرير الجسم }); // إظهار القائمة offcanvas.show(); // إخفاء القائمة offcanvas.hide(); // التبديل offcanvas.toggle(); // مستمعي الأحداث offcanvasEl.addEventListener('show.bs.offcanvas', function (event) { console.log('القائمة على وشك الظهور'); }); offcanvasEl.addEventListener('shown.bs.offcanvas', function (event) { console.log('القائمة ظهرت بالكامل'); }); offcanvasEl.addEventListener('hide.bs.offcanvas', function (event) { console.log('القائمة على وشك الاختفاء'); }); offcanvasEl.addEventListener('hidden.bs.offcanvas', function (event) { console.log('القائمة اختفت بالكامل'); }); </script>

Offcanvas متجاوب

قدم Bootstrap 5.2+ قائمة جانبية متجاوبة تنشط فقط أسفل نقاط توقف معينة.

<!-- Offcanvas فقط على الشاشات الصغيرة --> <div class="offcanvas-lg offcanvas-start" id="responsiveOffcanvas"> <div class="offcanvas-header"> <h5 class="offcanvas-title">قائمة متجاوبة</h5> <button type="button" class="btn-close" data-bs-dismiss="offcanvas"></button> </div> <div class="offcanvas-body"> <p>على الشاشات الكبيرة (≥992px)، يظهر هذا كمحتوى عادي.</p> <p>على الشاشات الأصغر، يتصرف كقائمة جانبية.</p> </div> </div> <!-- الفئات المتجاوبة المتاحة --> <!-- offcanvas-sm, offcanvas-md, offcanvas-lg, offcanvas-xl, offcanvas-xxl -->
حالة الاستخدام: القائمة الجانبية المتجاوبة مثالية للتنقل الذي يجب أن يكون مخفيًا في شريط جانبي على الهاتف المحمول ولكن مرئي في التخطيط على سطح المكتب.

تمرين عملي

المهمة 1: أنشئ شريط أدوات بأزرار أيقونات تظهر تلميحات عند التمرير:

  • أنشئ 6 أزرار أيقونات (استخدم نصًا مثل "📄" و "✂️" و "📋" و "💾" و "🖨️" و "⚙️" كأيقونات)
  • يجب أن يكون لكل زر تلميح وصفي (مثل "ملف جديد" و "قص" و "نسخ" و "حفظ" و "طباعة" و "إعدادات")
  • ضع التلميحات في الأسفل
  • أضف تأخيرًا صغيرًا (500 مللي ثانية) قبل إظهار التلميحات

المهمة 2: أنشئ تخطيط لوحة تحكم متجاوبة كاملة مع قائمة جانبية:

  • رأس مع شعار وزر قائمة الهامبرغر
  • قائمة جانبية يسارية مع قائمة تنقل (لوحة التحكم، التحليلات، التقارير، الإعدادات)
  • قم بتضمين قسم ملف المستخدم في القائمة الجانبية مع صورة رمزية واسم
  • أضف خلفية بسلوك ثابت
  • قم بتضمين نموذج بحث في القائمة الجانبية

تحدي إضافي: أنشئ قائمة جانبية لسلة التسوق تنزلق من اليمين مع عناصر المنتج والكميات والسعر الإجمالي وزر الدفع. أضف شارة على أيقونة السلة تظهر عدد العناصر.

أفضل الممارسات

  • استخدم التلميحات للمعلومات التكميلية المختصرة فقط
  • اجعل نص التلميح قصيرًا وموجزًا (جملة أو جملتان كحد أقصى)
  • لا تضع معلومات حرجة في التلميحات يحتاج المستخدمون لرؤيتها
  • تأكد من أن التلميحات لا تغطي العناصر التفاعلية
  • استخدم القائمة الجانبية لقوائم التنقل على الأجهزة المحمولة
  • فكر في استخدام فئات القائمة الجانبية المتجاوبة لتجارب أفضل على سطح المكتب
  • وفر دائمًا زر إغلاق واضح في رؤوس القوائم الجانبية
  • استخدم الخلفية الثابتة للمحتوى المهم الذي لا يجب إغلاقه عن طريق الخطأ
  • اختبر سلوك التلميح والقائمة الجانبية على أجهزة اللمس
  • تأكد من أن التنقل بلوحة المفاتيح يعمل بشكل صحيح (مفاتيح Tab و Esc)