في هذا الدرس 6تصفّح المواضيع
يوفّر مكوّن الطي والإظهار Collapse في إطار Bootstrap 5.3 آلية أنيقة لإخفاء الكتل التفصيلية الطويلة وإظهارها عند الطلب بانتقال بصري ناعم، مما يحافظ على نظافة شاشة المستخدم فوق الطية الأولى. وعلى خلاف الإصدار الرابع القديم، يعمل هذا المكوّن بالكامل عبر جافاسكريبت القياسية داخل حزمة bootstrap.bundle.min.js دون أي اعتماد على مكتبة jQuery.
تعتمد دورة حياة العنصر القابل للطي على ثلاث مراحل متعاقبة يديرها الإطار تلقائياً: يبدأ العنصر مخفياً بكلاس .collapse، وعند النقر يستبدله الإطار مؤقتاً بكلاس .collapsing ريثما تكتمل حركة الارتفاع، ثم يستقر على .collapse.show لعرض المحتوى كاملاً، أو يمكنك إضافة .show منذ البداية لفتحه افتراضياً عند تحميل الصفحة.
أضاف الإصدار الخامس كلاس .collapse-horizontal لدعم الطي العرضي الأفقي على محور العرض width بدلاً من محور الارتفاع height، وهو مثالي لإظهار بطاقة مساعدة جانبية أو تفاصيل سريعة بجوار الأزرار.
لكي ينساب النص بسلاسة أثناء فتح العرض من الصفر دون إعادة تكسير الأسطر في كل إطار زمني، احرص على منح البطاقة الداخلية عرضاً محدداً (مثل style="width: 280px;") مع وضع حد أدنى للارتفاع على الحاوية الخارجية إن أردت تثبيت العناصر المجاورة.
<button class="btn btn-primary mb-2" type="button"
data-bs-toggle="collapse" data-bs-target="#sideNote">
Toggle Side Note
</button>
<div style="min-height: 110px;">
<div class="collapse collapse-horizontal" id="sideNote">
<div class="card card-body" style="width: 280px;">
Horizontal panel slides smoothly along the width axis.
</div>
</div>
</div>
تقبل السمة data-bs-target أي محدّد CSS Selector صالح وليس مجرّد معرّف مفرد #id؛ مما يمكّنك من طيّ أو إظهار عدّة بطاقات معاً بضغطة زر واحدة عبر إعطائها كلاساً مشتركاً مثل .multi-collapse وتمريره في data-bs-target=".multi-collapse".
اختبر في المختبر التفاعلي التالي الفرق المباشر بين الطي الرأسي، والطي الأفقي، والتحكم المتعدد:
لا يكتمل بناء مكوّن الطي الاحترافي دون ضبط عقد الإتاحة لقارئات الشاشة ولوحة المفاتيح؛ إذ يجب ضبط السمة aria-expanded="false" على زر المشغل إذا كان القسم مغلقاً عند البداية، أو aria-expanded="true" إذا بدأ القسم مفتوحاً بكلاس .show، وسيواصل الإطار تبديل قيمتها تلقائياً بعد ذلك.
كما تربط السمة aria-controls="panelId" الزر بمعرّف الكتلة المطوية برمجياً، وعندما يتحكم زر واحد في عدة كتل تفصل بين معرّفاتها بمسافة مثل aria-controls="colA colB".
عندما تحتاج إلى فتح قسم مطوي أو إغلاقه استجابةً لمنطق برمجي مخصص (مثل إظهار خيارات الشحن فور اختيار التوصيل السريع)، استخدم الواجهة القياسية bootstrap.Collapse.getOrCreateInstance(el, { toggle: false }) لتفادي إنشاء نسخ مكررة في الذاكرة أو تشغيل الحركة فور التهيئة دون قصد.
كذلك يوفّر المكوّن أربعة أحداث دقيقة في دورة حياته يمكنك الاستماع إليها بـ addEventListener: الحدثان الفوريان show.bs.collapse وhide.bs.collapse لحظة بدء النقرة، والحدثان اللاحقان shown.bs.collapse وhidden.bs.collapse بعد اكتمال انتقال CSS تماماً.
<button id="apiBtn" class="btn btn-primary mb-2"
type="button">Toggle via JS API</button>
<span id="stateBadge"
class="badge text-bg-secondary ms-2">Closed</span>
<div class="collapse" id="apiPanel">
<div class="card card-body">bootstrap.Collapse</div>
</div>
مرجع كلاسات وسمات وأحداث مكوّن Collapse
| العنصر / الواجهة | النوع | الوظيفة الدقيقة في Bootstrap 5.3 |
|---|---|---|
.collapse | كلاس حالة | يخفي الكتلة افتراضياً بانتظار التفعيل التصريحي أو البرمجي. |
.collapse.show | كلاس حالة | يعرض الكتلة مفتوحة منذ لحظة تحميل المستند. |
.collapse-horizontal | كلاس محور | يبدّل الحركة من الارتفاع الرأسي إلى العرض الأفقي مع اشتراط عرض للطفل. |
data-bs-toggle="collapse" | سمة تشغيل | تربط الزر أو الرابط بمحرك الطي التلقائي دون كود جافاسكريبت. |
shown.bs.collapse | حدث DOM | ينطلق بعد انتهاء حركة الانفتاح بالكامل واستقرار الأبعاد. |
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
تعلّمت في هذا الدرس دورة حياة مكوّن الطي .collapse، وتشغيله عبر الأزرار والروابط بسمة data-bs-target، وتطبيق الطي الأفقي .collapse-horizontal والتحكم المتعدد، مع استيفاء سمات aria-expanded وإدارة الأحداث عبر bootstrap.Collapse. الخطوة التالية: انتقل الآن إلى الدرس التالي لبناء القوائم المطوية المتكاملة عبر مكوّن Accordion الأصيل في بوتستراب 5.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Collapse Component مكوّن الطي والإظهار
- إضافة تفاعلية في بوتستراب 5 تبدّل إظهار وإخفاء حاويات المحتوى بحركة ارتفاع أو عرض انسيابية بالاعتماد على جافاسكريبت القياسية.
- للمراجعة
- 02 Horizontal Collapse الطي الأفقي العرضي
- كلاس تعديلي في بوتستراب 5 يحول محور حركة الانطواء من الارتفاع إلى العرض مع اشتراط تحديد عرض ثابت للعنصر الداخلي.
- للمراجعة
- 03 Transition Class (.collapsing) كلاس المرحلة الانتقالية
- كلاس مؤقت يضيفه إطار بوتستراب تلقائياً لحظة بدء حركة الفتح أو الإغلاق لضبط الارتفاع التدرجي ثم يزيله فور انتهائها.
- للمراجعة
- 04 Multi-Target Selector محدّد الأهداف المتعددة
- تمرير اسم كلاس مشترك في سمة data-bs-target لتمكين زر واحد من فتح أو طي عدة عناصر في اللحظة نفسها.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 ARIA ARIA
- Accessible Rich Internet Applications
- مجموعة سمات قياسية مثل aria-expanded وaria-controls تبلّغ قارئات الشاشة بحالة فتح أو طي المحتوى لحظياً.
- للمراجعة
- 02 DOM DOM
- Document Object Model
- الشجرة البرمجية للصفحة التي تبقى العناصر المطوية موجودة بداخلها وتطلق عبرها أحداث الفتح والإغلاق.
- للمراجعة
- 03 API API
- Application Programming Interface
- الدوال البرمجية القياسية في كائن bootstrap.Collapse للتحكم في العناصر المطوية من كود جافاسكريبت.
- للمراجعة
- 04 CSS CSS
- Cascading Style Sheets
- تتولى تنفيذ الانتقال البصري السلس للارتفاع أو العرض عند تبديل كلاسات الطي.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
أنشئ زراً بكلاس btn-primary يستخدم سمتي data-bs-toggle="collapse" وdata-bs-target="#receiptBox" مع ضبط aria-expanded="false" وaria-controls="receiptBox" لإظهار بطاقة تفاصيل داخلية.
-
صمّم حاوية تحمل كلاسي collapse وcollapse-horizontal بداخلها بطاقة بعرض 260px، واربط زراً بحدث نقر يستدعي bootstrap.Collapse.getOrCreateInstance مع خيار toggle: false.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما السمة القياسية في بوتستراب 5 التي حلّت محل سمة data-toggle="collapse" القديمة؟
اعتمد بوتستراب 5 البادئة الموحدة data-bs-* لجميع المكونات التفاعلية لمنع التعارض مع المكتبات الأخرى.
ما تركيبة الكلاسات التي تجعل القسم القابل للطي يظهر مفتوحاً منذ لحظة تحميل الصفحة؟
إضافة كلاس show بجانب كلاس collapse تجعل المحتوى ظاهراً افتراضياً مع ضبط aria-expanded="true" على الزر.
ما الشرط العملي على العنصر الابن المباشر عند استخدام الطي الأفقي collapse-horizontal لضمان سلاسة الحركة؟
يمنع العرض الثابت للعنصر الداخلي انكسار الأسطر المتكرر أثناء تزايد عرض الحاوية الأب من الصفر.
يحتاج مكوّن Collapse في بوتستراب 5 إلى وجود مكتبة jQuery لتشغيل حركة الارتفاع.
تخلّى بوتستراب 5 نهائياً عن مكتبة jQuery ويعمل مكوّن Collapse بالكامل عبر جافاسكريبت القياسية.
لماذا يُنصح بتمرير الخيار { toggle: false } عند إنشاء نسخة من bootstrap.Collapse برمجياً؟
لأن القيمة الافتراضية لخيار toggle هي true، فإن تمرير false يجهّز الكائن للتحكم اللاحق دون تشغيل الحركة لحظة قراءة الكود.
أي حدث من أحداث Collapse ينطلق فقط بعد اكتمال حركة الفتح البصرية تماماً؟
ينطلق show.bs.collapse فور بدء الفتح، بينما ينتظر shown.bs.collapse انتهاء انتقال CSS واستقرار ارتفاع العنصر.
يمكن لزر واحد أن يطوي أو يظهر عدة عناصر collapse معاً إذا أشارت سمة data-bs-target إلى محدّد كلاس مشترك.
تقبل سمة data-bs-target أي محدّد CSS قياسي فتطبق الإجراء على كافة العناصر الحاملة للكلاس المشترك.
إخفاء السجلات السرية داخل عنصر .collapse يمنع الزوار من قراءتها عبر أدوات المطور في المتصفح.
العنصر المطوي يظل محمّلاً بالكامل في شجرة DOM؛ لذا يجب فحص الصلاحيات وحجب البيانات الحساسة من الخادم دائماً.