Modal
Utilitzeu el connector modal de JavaScript de Bootstrap per afegir diàlegs al vostre lloc per a caixes de llum, notificacions d'usuari o contingut completament personalitzat.
Com funciona
Abans de començar amb el component modal de Bootstrap, assegureu-vos de llegir el següent, ja que les nostres opcions de menú han canviat recentment.
- Els modals es creen amb HTML, CSS i JavaScript. Es col·loquen sobre tota la resta del document i eliminen el desplaçament de
<body>
manera que el contingut modal es desplaça. - Si feu clic al "teló de fons" modal, tancarà automàticament el modal.
- Bootstrap només admet una finestra modal alhora. No s'admeten els modalitats imbricades, ja que creiem que són experiències d'usuari deficients.
- Els modals utilitzen
position: fixed
, que de vegades pot ser una mica particular pel que fa a la seva representació. Sempre que sigui possible, col·loqueu el vostre HTML modal en una posició de primer nivell per evitar possibles interferències d'altres elements. És probable que tingueu problemes en niuar un.modal
dins d'un altre element fix. - Una vegada més, a causa de
position: fixed
, hi ha algunes advertències amb l'ús de modals en dispositius mòbils. Consulteu els nostres documents d'assistència per al navegador per obtenir més informació. - A causa de com HTML5 defineix la seva semàntica, l'
autofocus
atribut HTML no té cap efecte en els modals d'Bootstrap. Per aconseguir el mateix efecte, utilitzeu JavaScript personalitzat:
$('#myModal').on('shown.bs.modal', function () {
$('#myInput').trigger('focus')
})
L'efecte d'animació d'aquest component depèn de la prefers-reduced-motion
consulta de mitjans. Consulteu la secció de moviment reduït de la nostra documentació d'accessibilitat .
Continueu llegint per obtenir demostracions i directrius d'ús.
Exemples
Components modals
A continuació es mostra un exemple modal estàticposition
(és a dir, el seu i display
s'han substituït). S'inclouen la capçalera modal, el cos modal (obligatori per a padding
) i el peu de pàgina modal (opcional). Us demanem que incloeu capçaleres modals amb accions d'ignoració sempre que sigui possible o proporcioneu una altra acció d'ignorar explícita.
<div class="modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</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-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
Demo en directe
Commuteu una demostració modal de treball fent clic al botó següent. Es lliscarà cap avall i s'esvaeix des de la part superior de la pàgina.
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
Launch demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
Desplaçament de contingut llarg
Quan els modals es fan massa llargs per a la finestra o el dispositiu de l'usuari, es desplacen independentment de la pròpia pàgina. Proveu la demostració a continuació per veure què volem dir.
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalLong">
Launch demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="exampleModalLong" tabindex="-1" role="dialog" aria-labelledby="exampleModalLongTitle" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLongTitle">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
També podeu crear un modal desplaçable que permeti desplaçar-vos pel cos del modal afegint .modal-dialog-scrollable
- hi .modal-dialog
.
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalScrollable">
Launch demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="exampleModalScrollable" tabindex="-1" role="dialog" aria-labelledby="exampleModalScrollableTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalScrollableTitle">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
Centrat verticalment
Afegiu .modal-dialog-centered
a .modal-dialog
per centrar verticalment el modal.
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalCenter">
Launch demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalCenterTitle">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
Consells d'eines i popovers
Els consells sobre eines i les finestres emergents es poden col·locar dins de modalitats segons sigui necessari. Quan es tanquen les modalitats, també es descarten automàticament qualsevol informació sobre eines i finestres emergents.
<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-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>
Utilitzant la graella
Utilitzeu el sistema de quadrícula Bootstrap dins d'un modal nidificant .container-fluid
dins del fitxer .modal-body
. A continuació, utilitzeu les classes normals del sistema de graella com ho faríeu en qualsevol altre lloc.
<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 ml-auto">.col-md-4 .ml-auto</div>
</div>
<div class="row">
<div class="col-md-3 ml-auto">.col-md-3 .ml-auto</div>
<div class="col-md-2 ml-auto">.col-md-2 .ml-auto</div>
</div>
<div class="row">
<div class="col-md-6 ml-auto">.col-md-6 .ml-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>
Contingut modal variable
Tens un munt de botons que activen tots el mateix modal amb continguts lleugerament diferents? Utilitzeu event.relatedTarget
i atributs HTMLdata-*
(possiblement mitjançant jQuery ) per variar el contingut del modal en funció del botó que s'hagi fet clic.
A continuació es mostra una demostració en directe seguida d'exemples d'HTML i JavaScript. Per obtenir més informació, llegiu els documents d'esdeveniments modals per obtenir més informació sobre relatedTarget
.
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@mdo">Open modal for @mdo</button>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@fat">Open modal for @fat</button>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-whatever="@getbootstrap">Open modal for @getbootstrap</button>
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">New message</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form>
<div class="form-group">
<label for="recipient-name" class="col-form-label">Recipient:</label>
<input type="text" class="form-control" id="recipient-name">
</div>
<div class="form-group">
<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-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Send message</button>
</div>
</div>
</div>
</div>
$('#exampleModal').on('show.bs.modal', function (event) {
var button = $(event.relatedTarget) // Button that triggered the modal
var recipient = button.data('whatever') // Extract info from data-* attributes
// If necessary, you could initiate an AJAX request here (and then do the updating in a callback).
// Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.
var modal = $(this)
modal.find('.modal-title').text('New message to ' + recipient)
modal.find('.modal-body input').val(recipient)
})
Canvia l'animació
La $modal-fade-transform
variable determina l'estat de transformació de .modal-dialog
abans de l'animació d'esvaïment modal, la $modal-show-transform
variable determina la transformació de .modal-dialog
al final de l'animació d'esvaïment modal.
Si voleu, per exemple, una animació amb zoom, podeu configurar $modal-fade-transform: scale(.8)
.
Elimina l'animació
Per als modals que simplement apareixen en lloc de desaparèixer per veure's, elimineu la .fade
classe del vostre marcatge modal.
<div class="modal" tabindex="-1" role="dialog" aria-labelledby="..." aria-hidden="true">
...
</div>
Altures dinàmiques
Si l'alçada d'un modal canvia mentre està obert, hauríeu de trucar $('#myModal').modal('handleUpdate')
per reajustar la posició del modal en cas que aparegui una barra de desplaçament.
Accessibilitat
Assegureu-vos d'afegir role="dialog"
i aria-labelledby="..."
, fent referència al títol modal, a .modal
, i role="document"
al .modal-dialog
mateix. A més, podeu donar una descripció del vostre diàleg modal amb aria-describedby
on .modal
.
Inserció de vídeos de YouTube
La inserció de vídeos de YouTube en modalitats requereix JavaScript addicional que no estigui a Bootstrap per aturar automàticament la reproducció i molt més. Consulteu aquesta útil publicació de Stack Overflow per obtenir més informació.
Mides opcionals
Els modals tenen tres mides opcionals, disponibles mitjançant classes modificadores per col·locar-los en un fitxer .modal-dialog
. Aquestes mides s'inicien en determinats punts d'interrupció per evitar barres de desplaçament horitzontals a les finestres més estretes.
Mida | Classe | Amplada màxima modal |
---|---|---|
Petit | .modal-sm |
300px |
Per defecte | Cap | 500px |
Gran | .modal-lg |
800px |
Extra gran | .modal-xl |
1140px |
La nostra classe modal per defecte sense modificador constitueix el modal de mida "mitjana".
<!-- Extra large modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bd-example-modal-xl">Extra large modal</button>
<div class="modal fade bd-example-modal-xl" tabindex="-1" role="dialog" aria-labelledby="myExtraLargeModalLabel" aria-hidden="true">
<div class="modal-dialog modal-xl">
<div class="modal-content">
...
</div>
</div>
</div>
<!-- Large modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bd-example-modal-lg">Large modal</button>
<div class="modal fade bd-example-modal-lg" tabindex="-1" role="dialog" aria-labelledby="myLargeModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg">
<div class="modal-content">
...
</div>
</div>
</div>
<!-- Small modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bd-example-modal-sm">Small modal</button>
<div class="modal fade bd-example-modal-sm" tabindex="-1" role="dialog" aria-labelledby="mySmallModalLabel" aria-hidden="true">
<div class="modal-dialog modal-sm">
<div class="modal-content">
...
</div>
</div>
</div>
Ús
El connector modal alterna el contingut ocult a demanda, mitjançant atributs de dades o JavaScript. També s'afegeix .modal-open
al <body>
comportament de desplaçament predeterminat per anul·lar i genera una .modal-backdrop
àrea de clic per descartar els modals mostrats quan es fa clic fora del modal.
Mitjançant atributs de dades
Activa un modal sense escriure JavaScript. Estableix data-toggle="modal"
en un element del controlador, com un botó, juntament amb un data-target="#foo"
o href="#foo"
per orientar un modal específic per alternar.
<button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button>
Mitjançant JavaScript
Truqueu a un modal amb id myModal
amb una sola línia de JavaScript:
$('#myModal').modal(options)
Opcions
Les opcions es poden passar mitjançant atributs de dades o JavaScript. Per als atributs de dades, afegiu el nom de l'opció a data-
, com a data-backdrop=""
.
Nom | Tipus | Per defecte | Descripció |
---|---|---|---|
teló de fons | booleà o la cadena'static' |
veritat | Inclou un element de fons modal. Alternativament, especifiqueu static un teló de fons que no tanqui el modal en fer clic. |
teclat | booleà | veritat | Tanca el modal quan es prem la tecla d'escapament |
focus | booleà | veritat | Posa el focus en el modal quan s'inicialitza. |
espectacle | booleà | veritat | Mostra el modal quan s'inicialitza. |
Mètodes
Mètodes asíncrons i transicions
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.
.modal(options)
Activates your content as a modal. Accepts an optional options object
.
$('#myModal').modal({
keyboard: false
})
.modal('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').modal('toggle')
.modal('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').modal('show')
.modal('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').modal('hide')
.modal('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').modal('handleUpdate')
.modal('dispose')
Destroys an element’s modal.
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 | Aquest esdeveniment s'activa quan el modal s'ha fet visible per a l'usuari (esperarà que finalitzin les transicions CSS). Si és causat per un clic, l'element clicat està disponible com a relatedTarget propietat de l'esdeveniment. |
ocultar.bs.modal | Aquest esdeveniment s'activa immediatament quan hide s'ha cridat el mètode d'instància. |
hidden.bs.modal | Aquest esdeveniment s'activa quan el modal s'ha acabat d'ocultar a l'usuari (esperarà que finalitzin les transicions CSS). |
$('#myModal').on('hidden.bs.modal', function (e) {
// do something...
})