Modale
Usa il plug-in modale JavaScript di Bootstrap per aggiungere finestre di dialogo al tuo sito per lightbox, notifiche utente o contenuto completamente personalizzato.
Prima di iniziare con il componente modale di Bootstrap, assicurati di leggere quanto segue poiché le nostre opzioni di menu sono cambiate di recente.
- I modali sono costruiti con HTML, CSS e JavaScript. Sono posizionati su tutto il resto del documento e rimuovono lo scorrimento in
<body>
modo che il contenuto modale scorra invece. - Cliccando sullo “sfondo” modale si chiuderà automaticamente il modale.
- Bootstrap supporta solo una finestra modale alla volta. Le modalità nidificate non sono supportate poiché riteniamo che siano esperienze utente scadenti.
- I modali usano
position: fixed
, che a volte può essere un po' particolare riguardo al suo rendering. Quando possibile, posiziona il tuo HTML modale in una posizione di primo livello per evitare potenziali interferenze da altri elementi. È probabile che si verifichino problemi durante l'annidamento di un.modal
elemento all'interno di un altro elemento fisso. - Ancora una volta, a causa di
position: fixed
, ci sono alcuni avvertimenti con l'utilizzo di modali sui dispositivi mobili. Consulta i nostri documenti di supporto del browser per i dettagli. - A causa del modo in cui HTML5 definisce la sua semantica, l'
autofocus
attributo HTML non ha effetto nelle modali Bootstrap. Per ottenere lo stesso effetto, usa del JavaScript personalizzato:
$('#myModal').on('shown.bs.modal', function () {
$('#myInput').trigger('focus')
})
Continua a leggere per demo e linee guida sull'utilizzo.
Di seguito è riportato un esempio modale statico (che significa position
che display
è stato sovrascritto). Sono inclusi l'intestazione modale, il corpo modale (obbligatorio per padding
) e il piè di pagina modale (facoltativo). Ti chiediamo di includere le intestazioni modali con azioni di eliminazione quando possibile o di fornire un'altra azione di eliminazione esplicita.
<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-primary">Save changes</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
Attiva o disattiva una demo modale funzionante facendo clic sul pulsante in basso. Scorrerà verso il basso e svanirà dalla parte superiore della pagina.
<!-- 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>
Quando le modali diventano troppo lunghe per il viewport o il dispositivo dell'utente, scorrono indipendentemente dalla pagina stessa. Prova la demo qui sotto per vedere cosa intendiamo.
<!-- 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>
Aggiungi .modal-dialog-centered
a .modal-dialog
per centrare verticalmente il modale.
<!-- 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="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>
Tooltip e popover possono essere inseriti all'interno di modali secondo necessità. Quando i modali vengono chiusi, anche i suggerimenti e i popover all'interno vengono automaticamente eliminati.
<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>
Utilizza il sistema di griglia Bootstrap all'interno di un modale annidando .container-fluid
all'interno del file .modal-body
. Quindi, usa le normali classi del sistema di griglia come faresti altrove.
<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>
Hai un sacco di pulsanti che attivano tutti la stessa modale con contenuti leggermente diversi? Usa event.relatedTarget
e attributi HTMLdata-*
(possibilmente tramite jQuery ) per variare il contenuto del modale a seconda del pulsante su cui è stato fatto clic.
Di seguito è riportata una demo dal vivo seguita da HTML e JavaScript di esempio. Per ulteriori informazioni, leggere i documenti degli eventi modali per i dettagli su 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)
})
Per i modali che appaiono semplicemente invece di essere visualizzati in dissolvenza, rimuovi la .fade
classe dal markup modale.
<div class="modal" tabindex="-1" role="dialog" aria-labelledby="..." aria-hidden="true">
...
</div>
Se l'altezza di una modale cambia mentre è aperta, dovresti chiamare $('#myModal').modal('handleUpdate')
per regolare nuovamente la posizione della modale nel caso in cui appaia una barra di scorrimento.
Assicurati di aggiungere role="dialog"
e aria-labelledby="..."
, facendo riferimento al titolo modale, a .modal
e role="document"
allo .modal-dialog
stesso. Inoltre, puoi fornire una descrizione della tua finestra di dialogo modale con aria-describedby
su .modal
.
L'incorporamento di video di YouTube in modalità modali richiede JavaScript aggiuntivo non in Bootstrap per interrompere automaticamente la riproduzione e altro ancora. Per ulteriori informazioni, vedere questo utile post sull'overflow dello stack .
I modali hanno due dimensioni opzionali, disponibili tramite classi di modifica da posizionare su un file .modal-dialog
. Queste dimensioni si attivano in determinati punti di interruzione per evitare barre di scorrimento orizzontali su finestre più strette.
<!-- 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>
Il plug-in modale attiva o disattiva i tuoi contenuti nascosti su richiesta, tramite attributi di dati o JavaScript. Aggiunge anche .modal-open
al <body>
comportamento di scorrimento predefinito per sovrascrivere e genera un'area .modal-backdrop
di clic per eliminare i modali mostrati quando si fa clic al di fuori del modale.
Attiva un modale senza scrivere JavaScript. Impostato data-toggle="modal"
su un elemento del controller, come un pulsante, insieme a data-target="#foo"
o href="#foo"
per scegliere come target una modale specifica da attivare.
<button type="button" data-toggle="modal" data-target="#myModal">Launch modal</button>
Chiama un modale con id myModal
con una singola riga di JavaScript:
$('#myModal').modal(options)
Le opzioni possono essere passate tramite attributi di dati o JavaScript. Per gli attributi dei dati, aggiungere il nome dell'opzione a data-
, come in data-backdrop=""
.
Nome | Tipo | Predefinito | Descrizione |
---|---|---|---|
sfondo | booleano o la stringa'static' |
VERO | Include un elemento di sfondo modale. In alternativa, specificare static uno sfondo che non chiude il modale al clic. |
tastiera del computer | booleano | VERO | Chiude il modale quando viene premuto il tasto Esc |
messa a fuoco | booleano | VERO | Mette lo stato attivo sul modale quando inizializzato. |
mostrare | booleano | VERO | Mostra il modale quando inizializzato. |
Metodi e transizioni asincrone
Tutti i metodi API sono asincroni e avviano una transizione . Ritornano al chiamante non appena la transizione è iniziata ma prima che termini . Inoltre, una chiamata al metodo su un componente in transizione verrà ignorata .
Consulta la nostra documentazione JavaScript per ulteriori informazioni.
Attiva il tuo contenuto come modale. Accetta opzioni opzionali object
.
$('#myModal').modal({
keyboard: false
})
Alterna manualmente un modale. Ritorna al chiamante prima che il modale sia stato effettivamente mostrato o nascosto (cioè prima che si verifichi l' evento shown.bs.modal
o hidden.bs.modal
).
$('#myModal').modal('toggle')
Apre manualmente un modale. Ritorna al chiamante prima che il modale sia stato effettivamente mostrato (cioè prima shown.bs.modal
che si verifichi l'evento).
$('#myModal').modal('show')
Nasconde manualmente un modale. Ritorna al chiamante prima che il modale sia stato effettivamente nascosto (cioè prima hidden.bs.modal
che si verifichi l'evento).
$('#myModal').modal('hide')
Regolare manualmente la posizione del modale se l'altezza di un modale cambia mentre è aperto (cioè nel caso in cui appaia una barra di scorrimento).
$('#myModal').modal('handleUpdate')
Distrugge il modale di un elemento.
La classe modale di Bootstrap espone alcuni eventi per l'aggancio alla funzionalità modale. Tutti gli eventi modali vengono attivati sul modale stesso (cioè al <div class="modal">
).
Tipo di evento | Descrizione |
---|---|
show.bs.modal | Questo evento viene attivato immediatamente quando show viene chiamato il metodo dell'istanza. Se causato da un clic, l'elemento cliccato è disponibile come relatedTarget proprietà dell'evento. |
mostrato.bs.modale | Questo evento viene attivato quando il modale è stato reso visibile all'utente (attenderà il completamento delle transizioni CSS). Se causato da un clic, l'elemento cliccato è disponibile come relatedTarget proprietà dell'evento. |
nascondi.bs.modale | Questo evento viene generato immediatamente quando hide viene chiamato il metodo dell'istanza. |
nascosto.bs.modale | Questo evento viene generato quando il modale ha finito di essere nascosto all'utente (attenderà il completamento delle transizioni CSS). |
$('#myModal').on('hidden.bs.modal', function (e) {
// do something...
})