مشروط
استخدم المكوِّن الإضافي المشروط لجافا سكريبت في Bootstrap لإضافة مربعات حوار إلى موقعك من أجل الصناديق المبسطة أو إشعارات المستخدم أو المحتوى المخصص بالكامل.
كيف تعمل
قبل البدء في المكون النموذجي لـ Bootstrap ، تأكد من قراءة ما يلي حيث تغيرت خيارات القائمة الخاصة بنا مؤخرًا.
- يتم إنشاء النماذج باستخدام HTML و CSS و JavaScript. يتم وضعهم فوق كل شيء آخر في المستند وإزالة التمرير من
<body>
بحيث يتم تمرير المحتوى الشرطي بدلاً من ذلك. - سيؤدي النقر فوق "الخلفية" المشروطة إلى إغلاق النموذج تلقائيًا.
- لا يدعم Bootstrap سوى نافذة مشروطة واحدة في كل مرة. لا يتم دعم النماذج المتداخلة لأننا نعتقد أنها تجارب مستخدم سيئة.
- تستخدم الوسائط
position: fixed
، والتي يمكن أن تكون في بعض الأحيان خاصة بعض الشيء حول عرضها. كلما كان ذلك ممكنًا ، ضع HTML الشرطي في موضع المستوى الأعلى لتجنب التداخل المحتمل من العناصر الأخرى. من المحتمل أن تواجه مشكلات عند تضمين عنصر.modal
داخل عنصر ثابت آخر. - مرة أخرى ، نظرًا
position: fixed
لوجود بعض المحاذير المتعلقة باستخدام الوسائط على الأجهزة المحمولة. راجع مستندات دعم المتصفح للحصول على التفاصيل. - نظرًا للكيفية التي تحدد بها HTML5 دلالاتها ، فإن
autofocus
سمة HTML ليس لها أي تأثير في أشكال Bootstrap. لتحقيق نفس التأثير ، استخدم بعض JavaScript المخصص:
var myModal = document.getElementById('myModal')
var myInput = document.getElementById('myInput')
myModal.addEventListener('shown.bs.modal', function () {
myInput.focus()
})
prefers-reduced-motion
الاستعلام عن الوسائط. راجع
قسم الحركة المخفضة في وثائق إمكانية الوصول الخاصة بنا .
استمر في القراءة للحصول على عروض توضيحية وإرشادات الاستخدام.
أمثلة
مكونات مشروطة
يوجد أدناه مثال مشروط ثابتposition
( بمعنى display
أنه تم تجاوزه). يتم تضمين الرأس الشرطي والجسم الشرطي (مطلوب لـ padding
) والتذييل الشرطي (اختياري). نطلب منك تضمين رؤوس مشروطة مع إجراءات الرفض كلما أمكن ذلك ، أو تقديم إجراء رفض صريح آخر.
<div class="modal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Modal title</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<p>Modal body text goes here.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
عرض حي
قم بتبديل عرض توضيحي مشروط يعمل عن طريق النقر فوق الزر أدناه. سوف ينزلق لأسفل ويتلاشى للداخل من أعلى الصفحة.
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
Launch demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
خلفية ثابتة
عند ضبط الخلفية على ثابت ، لن يتم إغلاق النموذج عند النقر خارجها. انقر فوق الزر أدناه لتجربته.
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#staticBackdrop">
Launch static backdrop modal
</button>
<!-- Modal -->
<div class="modal fade" id="staticBackdrop" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="staticBackdropLabel">Modal title</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Understood</button>
</div>
</div>
</div>
</div>
تمرير محتوى طويل
عندما تصبح النماذج طويلة جدًا بالنسبة لإطار عرض المستخدم أو الجهاز ، يتم التمرير بشكل مستقل عن الصفحة نفسها. جرب العرض أدناه لترى ما نعنيه.
يمكنك أيضًا إنشاء نموذج قابل للتمرير يسمح بتمرير الجسم الشرطي عن طريق الإضافة .modal-dialog-scrollable
إلى .modal-dialog
.
<!-- Scrollable modal -->
<div class="modal-dialog modal-dialog-scrollable">
...
</div>
تتمحور عموديًا
أضف .modal-dialog-centered
إلى .modal-dialog
المركز العمودي للوضع.
<!-- Vertically centered modal -->
<div class="modal-dialog modal-dialog-centered">
...
</div>
<!-- Vertically centered scrollable modal -->
<div class="modal-dialog modal-dialog-centered modal-dialog-scrollable">
...
</div>
تلميحات الأدوات و popovers
يمكن وضع تلميحات الأدوات والأدوات المنبثقة داخل نماذج حسب الحاجة. عند إغلاق النماذج ، يتم أيضًا رفض أي تلميحات أدوات ومنبثقة بداخلها تلقائيًا.
<div class="modal-body">
<h5>Popover in a modal</h5>
<p>This <a href="#" role="button" class="btn btn-secondary popover-test" title="Popover title" data-bs-content="Popover body content is set in this attribute.">button</a> triggers a popover on click.</p>
<hr>
<h5>Tooltips in a modal</h5>
<p><a href="#" class="tooltip-test" title="Tooltip">This link</a> and <a href="#" class="tooltip-test" title="Tooltip">that link</a> have tooltips on hover.</p>
</div>
باستخدام الشبكة
استخدم نظام شبكة Bootstrap داخل نموذج عن طريق التداخل .container-fluid
داخل ملف .modal-body
. بعد ذلك ، استخدم فئات نظام الشبكة العادية كما تفعل في أي مكان آخر.
<div class="modal-body">
<div class="container-fluid">
<div class="row">
<div class="col-md-4">.col-md-4</div>
<div class="col-md-4 ms-auto">.col-md-4 .ms-auto</div>
</div>
<div class="row">
<div class="col-md-3 ms-auto">.col-md-3 .ms-auto</div>
<div class="col-md-2 ms-auto">.col-md-2 .ms-auto</div>
</div>
<div class="row">
<div class="col-md-6 ms-auto">.col-md-6 .ms-auto</div>
</div>
<div class="row">
<div class="col-sm-9">
Level 1: .col-sm-9
<div class="row">
<div class="col-8 col-sm-6">
Level 2: .col-8 .col-sm-6
</div>
<div class="col-4 col-sm-6">
Level 2: .col-4 .col-sm-6
</div>
</div>
</div>
</div>
</div>
</div>
محتوى مشروط متنوع
هل لديك مجموعة من الأزرار التي تؤدي جميعها إلى نفس النموذج بمحتويات مختلفة قليلاً؟ استخدم سمات HTMLevent.relatedTarget
و HTML لتغيير محتويات النموذج بناءً على الزر الذي تم النقر عليه.data-bs-*
يوجد أدناه عرض توضيحي مباشر متبوعًا بمثال HTML و JavaScript. لمزيد من المعلومات ، اقرأ مستندات الأحداث المشروطة للحصول على تفاصيل حول relatedTarget
.
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@mdo">Open modal for @mdo</button>
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@fat">Open modal for @fat</button>
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal" data-bs-whatever="@getbootstrap">Open modal for @getbootstrap</button>
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">New message</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<form>
<div class="mb-3">
<label for="recipient-name" class="col-form-label">Recipient:</label>
<input type="text" class="form-control" id="recipient-name">
</div>
<div class="mb-3">
<label for="message-text" class="col-form-label">Message:</label>
<textarea class="form-control" id="message-text"></textarea>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Send message</button>
</div>
</div>
</div>
</div>
var exampleModal = document.getElementById('exampleModal')
exampleModal.addEventListener('show.bs.modal', function (event) {
// Button that triggered the modal
var button = event.relatedTarget
// Extract info from data-bs-* attributes
var recipient = button.getAttribute('data-bs-whatever')
// If necessary, you could initiate an AJAX request here
// and then do the updating in a callback.
//
// Update the modal's content.
var modalTitle = exampleModal.querySelector('.modal-title')
var modalBodyInput = exampleModal.querySelector('.modal-body input')
modalTitle.textContent = 'New message to ' + recipient
modalBodyInput.value = recipient
})
التبديل بين الوسائط
قم بالتبديل بين الوسائط المتعددة مع بعض المواضع الذكية للسمات data-bs-target
و . data-bs-toggle
على سبيل المثال ، يمكنك تبديل وضع إعادة تعيين كلمة المرور من خلال نموذج تسجيل دخول مفتوح بالفعل. يرجى ملاحظة أنه لا يمكن فتح العديد من الوسائط في نفس الوقت - فهذه الطريقة تقوم ببساطة بالتبديل بين شكلين منفصلين.
<div class="modal fade" id="exampleModalToggle" aria-hidden="true" aria-labelledby="exampleModalToggleLabel" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalToggleLabel">Modal 1</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Show a second modal and hide this one with the button below.
</div>
<div class="modal-footer">
<button class="btn btn-primary" data-bs-target="#exampleModalToggle2" data-bs-toggle="modal">Open second modal</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="exampleModalToggle2" aria-hidden="true" aria-labelledby="exampleModalToggleLabel2" tabindex="-1">
<div class="modal-dialog modal-dialog-centered">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalToggleLabel2">Modal 2</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Hide this modal and show the first with the button below.
</div>
<div class="modal-footer">
<button class="btn btn-primary" data-bs-target="#exampleModalToggle" data-bs-toggle="modal">Back to first</button>
</div>
</div>
</div>
</div>
<a class="btn btn-primary" data-bs-toggle="modal" href="#exampleModalToggle" role="button">Open first modal</a>
تغيير الرسوم المتحركة
يحدد $modal-fade-transform
المتغير حالة التحويل .modal-dialog
قبل الرسوم المتحركة الخفوتية المشروطة ، $modal-show-transform
ويحدد المتغير التحويل .modal-dialog
في نهاية الرسوم المتحركة الخفوتية المشروطة.
إذا كنت تريد على سبيل المثال تكبير الرسوم المتحركة ، يمكنك تعيين $modal-fade-transform: scale(.8)
.
إزالة الرسوم المتحركة
بالنسبة للشروط التي تظهر ببساطة بدلاً من أن تتلاشى للعرض ، قم بإزالة .fade
الفئة من ترميزك الشرطي.
<div class="modal" tabindex="-1" aria-labelledby="..." aria-hidden="true">
...
</div>
ارتفاعات ديناميكية
إذا تغير ارتفاع أحد الوسائط أثناء فتحه ، فيجب عليك الاتصال myModal.handleUpdate()
لإعادة ضبط موضع الشرط في حالة ظهور شريط التمرير.
إمكانية الوصول
تأكد من إضافة aria-labelledby="..."
، مع الإشارة إلى العنوان الشرطي ، إلى .modal
. بالإضافة إلى ذلك ، يمكنك تقديم وصف لمربع الحوار الخاص بك aria-describedby
باستخدام .modal
. لاحظ أنك لست بحاجة إلى الإضافة role="dialog"
لأننا نضيفها بالفعل عبر JavaScript.
تضمين أشرطة فيديو يوتيوب
يتطلب تضمين مقاطع فيديو YouTube في النماذج وجود JavaScript إضافي غير موجود في Bootstrap لإيقاف التشغيل تلقائيًا والمزيد. راجع منشور Stack Overflow المفيد هذا للحصول على مزيد من المعلومات.
أحجام اختيارية
تحتوي النماذج على ثلاثة أحجام اختيارية ، وهي متاحة عبر فئات المُعدِّل ليتم وضعها على ملف .modal-dialog
. تبدأ هذه الأحجام عند نقاط توقف معينة لتجنب أشرطة التمرير الأفقية في إطارات العرض الأضيق.
بحجم | فصل | أقصى عرض مشروط |
---|---|---|
صغير | .modal-sm |
300px |
تقصير | لا أحد | 500px |
كبير | .modal-lg |
800px |
كبير جدا | .modal-xl |
1140px |
يشكّل النموذج الافتراضي الخاص بنا بدون فئة معدِّل الحجم "المتوسط".
<div class="modal-dialog modal-xl">...</div>
<div class="modal-dialog modal-lg">...</div>
<div class="modal-dialog modal-sm">...</div>
مشروط ملء الشاشة
تجاوز آخر هو خيار عرض نموذج منبثق يغطي منفذ عرض المستخدم ، وهو متاح عبر فئات المُعدِّل التي يتم وضعها في ملف .modal-dialog
.
فصل | التوفر |
---|---|
.modal-fullscreen |
دائماً |
.modal-fullscreen-sm-down |
أقل576px |
.modal-fullscreen-md-down |
أقل768px |
.modal-fullscreen-lg-down |
أقل992px |
.modal-fullscreen-xl-down |
أقل1200px |
.modal-fullscreen-xxl-down |
أقل1400px |
<!-- Full screen modal -->
<div class="modal-dialog modal-fullscreen-sm-down">
...
</div>
ساس
المتغيرات
$modal-inner-padding: $spacer;
$modal-footer-margin-between: .5rem;
$modal-dialog-margin: .5rem;
$modal-dialog-margin-y-sm-up: 1.75rem;
$modal-title-line-height: $line-height-base;
$modal-content-color: null;
$modal-content-bg: $white;
$modal-content-border-color: rgba($black, .2);
$modal-content-border-width: $border-width;
$modal-content-border-radius: $border-radius-lg;
$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width);
$modal-content-box-shadow-xs: $box-shadow-sm;
$modal-content-box-shadow-sm-up: $box-shadow;
$modal-backdrop-bg: $black;
$modal-backdrop-opacity: .5;
$modal-header-border-color: $border-color;
$modal-footer-border-color: $modal-header-border-color;
$modal-header-border-width: $modal-content-border-width;
$modal-footer-border-width: $modal-header-border-width;
$modal-header-padding-y: $modal-inner-padding;
$modal-header-padding-x: $modal-inner-padding;
$modal-header-padding: $modal-header-padding-y $modal-header-padding-x; // Keep this for backwards compatibility
$modal-sm: 300px;
$modal-md: 500px;
$modal-lg: 800px;
$modal-xl: 1140px;
$modal-fade-transform: translate(0, -50px);
$modal-show-transform: none;
$modal-transition: transform .3s ease-out;
$modal-scale-transform: scale(1.02);
عقدة
يتم إنشاء نماذج ملء الشاشة سريعة الاستجابة عبر $breakpoints
الخريطة وحلقة في scss/_modal.scss
.
@each $breakpoint in map-keys($grid-breakpoints) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
$postfix: if($infix != "", $infix + "-down", "");
@include media-breakpoint-down($breakpoint) {
.modal-fullscreen#{$postfix} {
width: 100vw;
max-width: none;
height: 100%;
margin: 0;
.modal-content {
height: 100%;
border: 0;
@include border-radius(0);
}
.modal-header {
@include border-radius(0);
}
.modal-body {
overflow-y: auto;
}
.modal-footer {
@include border-radius(0);
}
}
}
}
إستعمال
The modal plugin toggles your hidden content on demand, via data attributes or JavaScript. It also overrides default scrolling behavior and generates a .modal-backdrop
to provide a click area for dismissing shown modals when clicking outside the modal.
Via data attributes
Toggle
Activate a modal without writing JavaScript. Set data-bs-toggle="modal"
on a controller element, like a button, along with a data-bs-target="#foo"
or href="#foo"
to target a specific modal to toggle.
<button type="button" data-bs-toggle="modal" data-bs-target="#myModal">Launch modal</button>
Dismiss
Dismissal can be achieved with the data
attribute on a button within the modal as demonstrated below:
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
or on a button outside the modal using the data-bs-target
as demonstrated below:
<button type="button" class="btn-close" data-bs-dismiss="modal" data-bs-target="#my-modal" aria-label="Close"></button>
Via JavaScript
Create a modal with a single line of JavaScript:
var myModal = new bootstrap.Modal(document.getElementById('myModal'), options)
Options
Options can be passed via data attributes or JavaScript. For data attributes, append the option name to data-bs-
, as in data-bs-backdrop=""
.
Name | Type | Default | Description |
---|---|---|---|
backdrop |
boolean or the string 'static' |
true |
Includes a modal-backdrop element. Alternatively, specify static for a backdrop which doesn't close the modal on click. |
keyboard |
boolean | true |
Closes the modal when escape key is pressed |
focus |
boolean | true |
Puts the focus on the modal when initialized. |
Methods
Asynchronous methods and transitions
All API methods are asynchronous and start a transition. They return to the caller as soon as the transition is started but before it ends. In addition, a method call on a transitioning component will be ignored.
Passing options
Activates your content as a modal. Accepts an optional options object
.
var myModal = new bootstrap.Modal(document.getElementById('myModal'), {
keyboard: false
})
toggle
Manually toggles a modal. Returns to the caller before the modal has actually been shown or hidden (i.e. before the shown.bs.modal
or hidden.bs.modal
event occurs).
myModal.toggle()
show
Manually opens a modal. Returns to the caller before the modal has actually been shown (i.e. before the shown.bs.modal
event occurs).
myModal.show()
Also, you can pass a DOM element as an argument that can be received in the modal events (as the relatedTarget
property).
var modalToggle = document.getElementById('toggleMyModal') // relatedTarget
myModal.show(modalToggle)
hide
Manually hides a modal. Returns to the caller before the modal has actually been hidden (i.e. before the hidden.bs.modal
event occurs).
myModal.hide()
handleUpdate
Manually readjust the modal’s position if the height of a modal changes while it is open (i.e. in case a scrollbar appears).
myModal.handleUpdate()
dispose
Destroys an element’s modal. (Removes stored data on the DOM element)
myModal.dispose()
getInstance
Static method which allows you to get the modal instance associated with a DOM element
var myModalEl = document.getElementById('myModal')
var modal = bootstrap.Modal.getInstance(myModalEl) // Returns a Bootstrap modal instance
getOrCreateInstance
Static method which allows you to get the modal instance associated with a DOM element, or create a new one in case it wasn’t initialized
var myModalEl = document.querySelector('#myModal')
var modal = bootstrap.Modal.getOrCreateInstance(myModalEl) // Returns a Bootstrap modal instance
Events
Bootstrap’s modal class exposes a few events for hooking into modal functionality. All modal events are fired at the modal itself (i.e. at the <div class="modal">
).
Event type | Description |
---|---|
show.bs.modal |
This event fires immediately when the show instance method is called. If caused by a click, the clicked element is available as the relatedTarget property of the event. |
shown.bs.modal |
This event is fired when the modal has been made visible to the user (will wait for CSS transitions to complete). If caused by a click, the clicked element is available as the relatedTarget property of the event. |
hide.bs.modal |
This event is fired immediately when the hide instance method has been called. |
hidden.bs.modal |
This event is fired when the modal has finished being hidden from the user (will wait for CSS transitions to complete). |
hidePrevented.bs.modal |
يتم تشغيل هذا الحدث عند عرض النموذج ، وتكون الخلفية الخاصة به ويتم static إجراء نقرة خارج النموذج أو الضغط على مفتاح الهروب باستخدام خيار لوحة المفاتيح أو data-bs-keyboard التعيين على false . |
var myModalEl = document.getElementById('myModal')
myModalEl.addEventListener('hidden.bs.modal', function (event) {
// do something...
})