Modais são elementos de interface essenciais para exibirr informações adicionais ou solicitar interações do usuário sem sair da página atual. O Bootstrap oferece uma implementação robusta e personalizável de modais.
Estrutura e Atributos Essenciais de um Modal Bootstrap
Um modal é, fundamentalmente, um contêiner div com classes e atributos específicos do Bootstrap para controle de aparência e comportamento.
Atributos Comuns:
class="modal fade": Define o estilo base do modal e adiciona um efeito de transição suave (fade). A classefadepode ser omitida para um aparecimento instantâneo.tabindex="-1": Remove o modal do fluxo de navegação por tabulação padrão da página. Isso garante que a teclaTabnavegue apenas pelos elementos focáveis dentro do próprio modal.role="dialog": Indica aos leitores de tela que o elemento é um diálogo.aria-labelledby="...": Associa o modal a um elemento de título, geralmente umh4com um ID correspondente.aria-hidden="true": Inicialmente oculta o modal até que seja acionado por um elemento.
Componentes Internos:
.modal-dialog: Contêiner principal que gerencia o posicionamento e o tamanho do modal..modal-content: Contém os elementos visuais do modal (cabeçalho, corpo, rodapé)..modal-header: Área para o título e o botão de fechar..close: Estiliza o botão de fechar.data-dismiss="modal": Atributo customizado que instrui o Bootstrap a fechar o modal quando clicado.
.modal-body: Conteúdo principal do modal..modal-footer: Área para botões de ação (como "Salvar" ou "Cancelar").
Controle de Tamanho e Fundo:
.modal-lg/.modal-sm: Classes para aplicar modais de tamanho grande ou pequeno, respectivamente. Adicionadas à classe.modal-dialog.data-backdrop="static": Impede o fechamento do modal ao clicar no fundo escurecido. Se definido comotrue(ou omitido, que é o padrão), o clique no fundo fecha o modal.data-keyboard="false": Impede o fechamento do modal ao pressionar a teclaEsc. O padrão étrue.
Acionando Modais
Existem duas maneiras principais de exibir modais:
1. Acionamento por Atributos (Estático)
Utilizando atributos HTML em um elemento, como um botão:
data-toggle="modal": Indica que o elemento acionará um modal.- `data-target="#meuModal"``: Especifica o ID do modal a ser exibido.
Exemplo de Código (Acionamento Estático):
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Exemplo de Modal Estático</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<!-- Botão que aciona o modal -->
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#exemploModal">
Abrir Modal Estático
</button>
<!-- Estrutura do Modal -->
<div class="modal fade" id="exemploModal" tabindex="-1" role="dialog" aria-labelledby="meuModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Fechar"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="meuModalLabel">Título do Modal</h4>
</div>
<div class="modal-body">
Este é o conteúdo do modal que foi aberto estaticamente.
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fechar</button>
<button type="button" class="btn btn-primary">Salvar</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<!-- jQuery e Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
</body>
</html>
2. Acionamento por JavaScript (Dinâmico)
É possível controlar a exibição de modais programaticamente usando jQuery.
// Para exibir um modal específico
$('#idDoModal').modal('show');
// Para esconder um modal específico
$('#idDoModal').modal('hide');
// Para alternar a visibilidade de um modal
$('#idDoModal').modal('toggle');
// Configurando opções ao exibir dinamicamente
$('#idDoModal').modal({
keyboard: false, // Desabilita fechamento com ESC
backdrop: false // Desabilita fechamento ao clicar no fundo
});
Exemplo de Código (Acionamento Dinâmico):
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Exemplo de Modal Dinâmico</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<!-- Botão que aciona o modal via JavaScript -->
<button id="btnAbrirModal" type="button" class="btn btn-warning">
Abrir Modal Dinâmico
</button>
<!-- Estrutura do Modal -->
<div class="modal fade" id="modalDinamico" tabindex="-1" role="dialog" aria-labelledby="tituloModalDinamico">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Fechar"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="tituloModalDinamico">Modal Aberto por JS</h4>
</div>
<div class="modal-body">
Conteúdo do modal aberto dinamicamente.
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fechar</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<!-- jQuery e Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
<script>
$(document).ready(function() {
$('#btnAbrirModal').on('click', function() {
$('#modalDinamico').modal('show');
});
});
</script>
</body>
</html>
Eventos de Modal
O Bootstrap dispara eventos que podem ser ouvidos para executar ações personalizadas em diferentes fases do ciclo de vida do modal:
show.bs.modal: Disparado antes do modal começar a aparecer.shown.bs.modal: Disparado quando o modal está totalmente visível.hide.bs.modal: Disparado antes do modal começar a desaparecer.hidden.bs.modal: Disparado quando o modal está totalmente oculto.
Exemplo de Manipulação de Eventos:
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Exemplo de Eventos de Modal</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<!-- Botão que aciona o modal -->
<button type="button" class="btn btn-info" data-toggle="modal" data-target="#modalComEventos">
Abrir Modal com Eventos
</button>
<!-- Estrutura do Modal -->
<div class="modal fade" id="modalComEventos" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Fechar"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">Modal com Eventos</h4>
</div>
<div class="modal-body">
Verifique os alerts para ver os eventos sendo disparados.
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fechar</button>
</div>
</div>
</div>
</div>
<!-- jQuery e Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
<script>
$(document).ready(function() {
var meuModal = $('#modalComEventos');
meuModal.on('show.bs.modal', function () {
alert("Evento: show.bs.modal - Iniciando exibição.");
});
meuModal.on('shown.bs.modal', function () {
alert("Evento: shown.bs.modal - Modal totalmente visível.");
});
meuModal.on('hide.bs.modal', function () {
alert("Evento: hide.bs.modal - Iniciando ocultação.");
});
meuModal.on('hidden.bs.modal', function () {
alert("Evento: hidden.bs.modal - Modal totalmente oculto.");
});
});
</script>
</body>
</html>
Passando Dados para Modais
É comum precisar passsar informações do elemento que acionou o modal para o conteúdo do próprio modal. Isso pode ser feito utilizando atribtuos data-*.
Método: Atributos Data e Manipulação de Eventos
- No elemento que aciona o modal (geralmente um botão), adicione atributos
data-*com os dados desejados. Exemplo:data-info="valorExemplo". - No evento
show.bs.modal, acesse o botão que disparou o modal usandoevent.relatedTarget. - Leia os valores dos atributos
data-*desse botão. - Utilize esses valores para preencher o conteúdo do modal, por exemplo, em um campo de input.
Exemplo de Código (Passando Dados):
<html lang="pt-BR">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Exemplo de Passagem de Dados para Modal</title>
<!-- Bootstrap CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<!-- Botão que aciona o modal e passa dados -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#modalComDados" data-usuario="Alice" data-id="123">
Abrir Modal com Dados
</button>
<!-- Estrutura do Modal -->
<div class="modal fade" id="modalComDados" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Fechar"><span aria-hidden="true">×</span></button>
<h4 class="modal-title">Recebendo Dados</h4>
</div>
<div class="modal-body">
<form>
<div class="form-group">
<label for="campo-usuario" class="control-label">Usuário:</label>
<input type="text" class="form-control" id="campo-usuario" readonly>
</div>
<div class="form-group">
<label for="campo-id" class="control-label">ID:</label>
<input type="text" class="form-control" id="campo-id" readonly>
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fechar</button>
</div>
</div>
</div>
</div>
<!-- jQuery e Bootstrap JS -->
<script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
<script>
$(document).ready(function() {
$('#modalComDados').on('show.bs.modal', function (event) {
// Botão que disparou o modal
var botaoTrigger = $(event.relatedTarget);
// Extrai informações dos atributos data-*
var nomeUsuario = botaoTrigger.data('usuario');
var idUsuario = botaoTrigger.data('id');
// Encontra os campos no modal e preenche com os dados
var modal = $(this);
modal.find('#campo-usuario').val(nomeUsuario);
modal.find('#campo-id').val(idUsuario);
});
});
</script>
</body>
</html>