Bootstrap: الأكورديون ولوحات الطي
آخر تحديث: 2026-08-26
1. مقدمة الدرس
(1) المتطلبات السابقة
- الدرس 15: مكونات التنبيه
(2) 🎯 ما ستتعلّمه
- استخدام Collapse لتمديد/طي عنصر واحد
- استخدام Accordion لسلوك الأكورديون المرتبط
- استخدام
accordion-flushلإزالة الحدود - استخدام
data-bs-parentللتحكم في السلوك المرتبط - تنفيذ لوحات طي مستقلة (وضع الدائم الانفتاح)
(3) المشكلة
يبني Bob صفحة أسئلة شائعة تحتوي على 8 أسئلة متكررة. يريد تنفيذ ذلك باستخدام الأكورديون: عندما ينقر المستخدم على سؤال، يتمدد الجواب، وعند النقر على سؤال آخر يُطوى السابق تلقائيًا، مما يوفر تجربة سلسة ويوفر مساحة الصفحة.
(4) الحل
يُستخدم مكون Collapse لعرض كميات كبيرة من المحتوى في مساحة محدودة. ينقر المستخدم على عنوان لإظهار التفاصيل وينقر مرة أخرى لإخفائها. الأكورديون هو شكل خاص من مكون Collapse: يبقى لوح واحد فقط مفتوحًا في كل مرة.
لفهم الفكرة: الأكورديون مثل مجموعة من الأدراج القابلة للطي — لا يمكنك سحب درج واحد إلا في كل مرة. الـ Collapse درج واحد؛ الأكورديون عدة أدراج مرتبطة معًا.
(5) الفوائد
يسمح استخدام الأكورديون بتنظيم كميات كبيرة من المحتوى في مساحة محدودة، مما يبقي الصفحة نظيفة ويحسّن تجربة التصفح.
2. لوح Collapse مفرد
أبسط مكون Collapse:
<p>
<button class="btn btn-primary" type="button" data-bs-toggle="collapse" data-bs-target="#collapseExample">
Toggle content
</button>
</p>
<div class="collapse" id="collapseExample">
<div class="card card-body">
This content is hidden by default. Click the button to show or hide it.
</div>
</div>
النتيجة: مكون مع تطبيق أنماط Bootstrap 5.3 (مثل الأزرار والبطاقات وCarousel وCollapse إلخ). تستخدم الصفحة سمة Bootstrap الافتراضية (الفاتحة) وشبكة متجاوبة افتراضيًا.
▶ مثال: لوح Collapse أساسي
<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Collapse Demo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container py-4">
<p>
<a class="btn btn-primary" data-bs-toggle="collapse" href="#singleCollapse" role="button">
Toggle with link
</a>
<button class="btn btn-outline-primary" type="button" data-bs-toggle="collapse" data-bs-target="#singleCollapse">
Toggle with button
</button>
</p>
<div class="collapse" id="singleCollapse">
<div class="card card-body">
This content can be toggled using either the link or the button.
</div>
</div>
<hr>
<p>
<button class="btn btn-success" data-bs-toggle="collapse" data-bs-target=".multi-collapse">
Toggle both
</button>
</p>
<div class="row">
<div class="col">
<div class="collapse multi-collapse" id="multiCollapse1">
<div class="card card-body">First collapsible panel.</div>
</div>
</div>
<div class="col">
<div class="collapse multi-collapse" id="multiCollapse2">
<div class="card card-body">Second collapsible panel.</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
النتيجة: مكون مع تطبيق أنماط Bootstrap 5.3 (مثل الأزرار والبطاقات وCarousel وCollapse إلخ). تستخدم الصفحة سمة Bootstrap الافتراضية (الفاتحة) وشبكة متجاوبة افتراضيًا.
(1) السمات الأساسية لـ Collapse
| السمة/الفئة | الوصف |
|---|---|
data-bs-toggle="collapse" |
يُعرّف المُشغّل |
data-bs-target="#id" |
يحدد العنصر المراد طيه |
class="collapse" |
مخفي افتراضيًا |
class="collapse show" |
ظاهر افتراضيًا (حالة التمدد) |
data-bs-parent="#accordion" |
تحكم مرتبط (يُستخدم للأكورديون) |
3. الأكورديون
الأكورديون هو مجموعة مرتبطة من عدة لوحات collapse، بحيث يمكن تمدد لوح واحد فقط في كل مرة.
<div class="accordion" id="faqAccordion">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse"
data-bs-target="#faq1">
How do I install Bootstrap?
</button>
</h2>
<div id="faq1" class="accordion-collapse collapse show"
data-bs-parent="#faqAccordion">
<div class="accordion-body">
Add the CDN link to your HTML head.
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
data-bs-target="#faq2">
Does Bootstrap need jQuery?
</button>
</h2>
<div id="faq2" class="accordion-collapse collapse"
data-bs-parent="#faqAccordion">
<div class="accordion-body">
No, Bootstrap 5 uses vanilla JavaScript.
</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse"
data-bs-target="#faq3">
What is the grid system?
</button>
</h2>
<div id="faq3" class="accordion-collapse collapse"
data-bs-parent="#faqAccordion">
<div class="accordion-body">
Bootstrap uses a 12-column flexbox grid system.
</div>
</div>
</div>
</div>
النتيجة: مكون مع تطبيق أنماط Bootstrap 5.3 (مثل الأزرار والبطاقات وCarousel وCollapse إلخ). تستخدم الصفحة سمة Bootstrap الافتراضية (الفاتحة) وشبكة متجاوبة افتراضيًا.
(1) بنية الأكورديون
| العنصر | الفئة | الوصف |
|---|---|---|
| الحاوي | accordion |
يُعرّف مجموعة الأكورديون |
| العنصر | accordion-item |
لوح collapse مفرد |
| الترويسة | accordion-header |
حاوي صف الترويسة |
| المُشغّل | accordion-button |
زر العنوان القابل للنقر |
| منطقة المحتوى | accordion-collapse collapse |
المحتوى القابل للطي |
| متن المحتوى | accordion-body |
النص الفعلي المعروض |
(2) الآلية الأساسية
data-bs-parent="#faqAccordion" // مرتبط (لوح واحد مفتوح في كل مرة)
class="accordion-collapse collapse show" // ممدّد افتراضيًا
class="accordion-button collapsed" // حالة الطي
النتيجة: مكون مع تطبيق أنماط Bootstrap 5.3 (مثل الأزرار والبطاقات وCarousel وCollapse إلخ). تستخدم الصفحة سمة Bootstrap الافتراضية (الفاتحة) وشبكة متجاوبة افتراضيًا.
4. تنويعات الأكورديون
<!-- Flush (بدون حد خارجي) -->
<div class="accordion accordion-flush">
<div class="accordion-item">...</div>
</div>
<!-- وضع الدائم الانفتاح (إزالة data-bs-parent) -->
<div class="accordion" id="multiOpen">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" data-bs-toggle="collapse" data-bs-target="#panel1">
Panel 1
</button>
</h2>
<!-- بدون data-bs-parent — مستقل -->
<div id="panel1" class="accordion-collapse collapse show">
<div class="accordion-body">This panel stays open when Panel 2 is opened.</div>
</div>
</div>
</div>
النتيجة: مكون مع تطبيق أنماط Bootstrap 5.3 (مثل الأزرار والبطاقات وCarousel وCollapse إلخ). تستخدم الصفحة سمة Bootstrap الافتراضية (الفاتحة) وشبكة متجاوبة افتراضيًا.
5. أمثلة إضافية للوحات Collapse
▶ مثال: أكورديون أسئلة شائعة (بدون حدود)
<!DOCTYPE html>
<html lang="ar">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>FAQ Accordion</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container py-4">
<div class="accordion accordion-flush" id="faqAccordion">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#faq1">
What is Bootstrap?
</button>
</h2>
<div id="faq1" class="accordion-collapse collapse show" data-bs-parent="#faqAccordion">
<div class="accordion-body">Bootstrap is a free front-end framework for building responsive websites with HTML, CSS, and JavaScript.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq2">
Do I need to know JavaScript?
</button>
</h2>
<div id="faq2" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">Basic Bootstrap components work without JS. Interactive components like modals and carousels need Bootstrap JS.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq3">
Is Bootstrap free?
</button>
</h2>
<div id="faq3" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">Yes, Bootstrap is completely free and open-source under the MIT license.</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#faq4">
What is the grid system?
</button>
</h2>
<div id="faq4" class="accordion-collapse collapse" data-bs-parent="#faqAccordion">
<div class="accordion-body">Bootstrap's grid uses 12 columns with breakpoints for responsive layouts. Classes like col-md-6 create columns that adjust at different screen sizes.</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>
النتيجة: مكون مع تطبيق أنماط Bootstrap 5.3 (مثل الأزرار والبطاقات وCarousel وCollapse إلخ). تستخدم الصفحة سمة Bootstrap الافتراضية (الفاتحة) وشبكة متجاوبة افتراضيًا.
▶ مثال: وضع الدائم الانفتاح (لوحات مستقلة)
<div class="accordion" id="independentAccordion">
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#panelA">
Skills & Expertise
</button>
</h2>
<div id="panelA" class="accordion-collapse collapse show">
<div class="accordion-body">HTML, CSS, JavaScript, Bootstrap, React</div>
</div>
</div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelB">
Work Experience
</button>
</h2>
<div id="panelB" class="accordion-collapse collapse show">
<div class="accordion-body">Senior Developer at TechCorp (2020-present), Frontend Developer at WebStudio (2018-2020)</div>
</div>
</div>
</div>
النتيجة: مكون مع تطبيق أنماط Bootstrap 5.3 (مثل الأزرار والبطاقات وCarousel وCollapse إلخ). تستخدم الصفحة سمة Bootstrap الافتراضية (الفاتحة) وشبكة متجاوبة افتراضيًا.
▶ مثال: مكونات Collapse مستقلة
<div class="container py-4">
<div class="d-flex gap-2 mb-3">
<button class="btn btn-primary" data-bs-toggle="collapse" data-bs-target="#demo1">
Toggle First
</button>
<button class="btn btn-outline-success" data-bs-toggle="collapse" data-bs-target="#demo2">
Toggle Second
</button>
<button class="btn btn-outline-danger" data-bs-toggle="collapse" data-bs-target=".multi-demo">
Toggle All
</button>
</div>
<div class="row">
<div class="col-md-6">
<div class="collapse multi-demo show" id="demo1">
<div class="card card-body">
First panel — visible by default.
</div>
</div>
</div>
<div class="col-md-6">
<div class="collapse multi-demo" id="demo2">
<div class="card card-body">
Second panel — initially hidden.
</div>
</div>
</div>
</div>
</div>
النتيجة: مكون مع تطبيق أنماط Bootstrap 5.3 (مثل الأزرار والبطاقات وCarousel وCollapse إلخ). تستخدم الصفحة سمة Bootstrap الافتراضية (الفاتحة) وشبكة متجاوبة افتراضيًا.
▶ مثال: لوح Collapse داخل بطاقة
<div class="card" style="max-width: 500px;">
<div class="card-header bg-primary text-white">
<h5 class="mb-0">Order Summary</h5>
</div>
<div class="card-body">
<p class="card-text">Your order contains 3 items.</p>
<p>
<a class="btn btn-sm btn-outline-primary" data-bs-toggle="collapse" href="#orderDetails">
View Details
</a>
</p>
<div class="collapse" id="orderDetails">
<div class="border rounded p-3 bg-light">
<div class="d-flex justify-content-between mb-2">
<span>Wireless Mouse</span><span class="text-muted">$29.99</span>
</div>
<div class="d-flex justify-content-between mb-2">
<span>USB-C Hub</span><span class="text-muted">$39.99</span>
</div>
<div class="d-flex justify-content-between">
<span>Mouse Pad</span><span class="text-muted">$12.99</span>
</div>
<hr>
<div class="d-flex justify-content-between fw-bold">
<span>Total</span><span>$82.97</span>
</div>
</div>
</div>
</div>
</div>
النتيجة: مكون مع تطبيق أنماط Bootstrap 5.3 (مثل الأزرار والبطاقات وCarousel وCollapse إلخ). تستخدم الصفحة سمة Bootstrap الافتراضية (الفاتحة) وشبكة متجاوبة افتراضيًا.
(1) كيف يعمل Collapse/Accordion
flowchart TD
A[Trigger<br/>data-bs-toggle=collapse] --> B[data-bs-target=#id]
B --> C[Target Element<br/>class=collapse]
C --> D{Initial State}
D -->|No show| E[Hidden by Default]
D -->|Has show| F[Expanded by Default]
C --> G{Has data-bs-parent?}
G -->|Yes| H[Linked Mode<br/>Only one open at a time]
G -->|No| I[Independent Mode<br/>Toggle individually]
H --> J[Accordion]
I --> K[Regular Collapse]
النتيجة: مكون مع تطبيق أنماط Bootstrap 5.3 (مثل الأزرار والبطاقات وCarousel وCollapse إلخ). تستخدم الصفحة سمة Bootstrap الافتراضية (الفاتحة) وشبكة متجاوبة افتراضيًا.
| فئة Collapse | التأثير | الوصف |
|---|---|---|
collapse |
مخفي افتراضيًا | غير مرئي عند تحميل الصفحة |
collapse show |
ممدّد افتراضيًا | مرئي عند تحميل الصفحة |
collapsing |
في حالة انتقالية | يُضاف تلقائيًا أثناء الحركة |
accordion-collapse |
خاص بالأكورديون | يُستخدم داخل أكورديون |
| سمة data-* | القيمة | الغرض |
|---|---|---|
data-bs-toggle |
collapse |
يُعرّف مُشغّل collapse |
data-bs-target |
#id / .class |
يحدد العنصر المُتحكَّم به |
data-bs-parent |
#accordionId |
قيد مرتبط (أكورديون) |
href |
#id |
مُشغّل من نوع رابط |
| تنويع الأكورديون | الفئة | الميزة | السيناريو |
|---|---|---|---|
| أساسي | accordion |
حدود قياسية | استخدام عام |
| بدون حدود | accordion-flush |
بدون حد خارجي/استدارة | الأسئلة الشائعة، الشريط الجانبي |
| دائم الانفتاح | إزالة data-bs-parent |
عدة لوحات مفتوحة simultaneً | لوحات الإعدادات |
| متداخل في بطاقة | وضعه داخل card-body |
تخطيط مدمج | تفاصيل الطلب |
❓ أسئلة شائعة
data-bs-parent، مما يسمح بفتح لوح واحد فقط في كل مرة.bootstrap.bundle.min.js. تحقق من وحدة تحكم المتصفح لأي أخطاء JS.data-bs-parent. بهذه الطريقة، يعمل كل لوح بشكل مستقل ولا يؤثر على البقية.accordion-body، بما في ذلك عناصر النماذج. احذر من عدم تشغيل تمدد/طي الأكورديون عن طريق الخطأ عند النقر على المدخلات. يمكنك استخدام event.stopPropagation() لمنع فقاعة الأحداث.📖 ملخص
- Collapse:
data-bs-toggle="collapse"+data-bs-target="#id"للتحكم في عنصر واحد - Accordion: حاوي
accordion+accordion-item+accordion-button+accordion-collapse data-bs-parentيُفعّل السلوك المرتبط؛ أزِله للوحات مستقلةaccordion-flushيزيل الحدود
📝 تمارين
- ⭐ أنشئ أكورديون أسئلة شائعة: 5 أسئلة على الأقل، الأول ممدّد افتراضيًا، والباقي مطوي، باستخدام نمط
accordion-flushبدون حدود. - ⭐⭐ نفّذ إجابات الواجب باستخدام أكورديون — كل سؤال كلوح، انقر لإظهار الإجابة.
- ⭐⭐⭐ أنشئ أكورديون تنقل شريطي: يشمل Dashboard (بدون عناصر فرعية)، Products (3 عناصر فرعية)، Orders (عنصران فرعيان)، Settings (4 عناصر فرعية).
الدرس السابق: مكونات التنبيه · الدرس التالي: Bootstrap Icons