Gostaria de centralizar meu modal na janela de exibição (meio) Tentei adicionar algumas propriedades css
.modal { position: fixed; top:50%; left:50%; }
Estou usando este exemplo http://jsfiddle.net/rniemeyer/Wjjnd/
eu tentei
$("#MyModal").modal('show').css(
{
'margin-top': function () {
return -($(this).height() / 2);
},
'margin-left': function () {
return -($(this).width() / 2);
}
})
javascript
twitter-bootstrap
bootstrap-modal
user2613813
fonte
fonte
.modal.fade.in
tambémtranslateY(-50%)
que torna o topo do modal inacessível quando o conteúdo modal é mais alto que a altura do dispositivo).Respostas:
Isso faz o trabalho: http://jsfiddle.net/sRmLV/1140/
Ele usa um helper-div e alguns CSS personalizados. Não é necessário javascript ou jQuery.
HTML (baseado no código de demonstração do Bootstrap )
CSS
fonte
Como a resposta do gpcola não funcionou para mim, editei um pouco para que funcione agora. Eu usei "margin-top" em vez de transformar. Além disso, eu uso o evento "show" em vez de "mostrado", porque depois ele me deu um salto muito ruim de posicionamento (visível quando você tem animações de auto-inicialização). Certifique-se de definir a exibição como "bloquear" antes do posicionamento, caso contrário, $ dialog.height () será 0 e o modal não será centralizado completamente.
fonte
$('.modal:visible').each(centerModal);
if(offset < 0) offset = 0;
Estou colando o bloco inteiro em um caso de resposta que não está claro!Foi o que fiz para o meu aplicativo. Se você observar as seguintes classes no arquivo bootstrap.css, o arquivo .modal-dialog possui um preenchimento padrão de 10px e a tela @media e (largura mínima: 768px) .modal-dialog possui um preenchimento superior definido como 30px. Portanto, no meu arquivo CSS personalizado, defino meu preenchimento superior como 15% para todas as telas sem especificar a largura da tela de mídia. Espero que isto ajude.
fonte
.modal-dialog.modal-sm { padding-top:15%; }
A melhor maneira que encontrei para todos os navegadores HTML5:
fonte
align-items: center;
abody.modal-open .modal
parece trabalho.// Styles
fonte
O parâmetro top está sendo substituído em .modal.fade.in para forçar o valor definido em sua declaração customizada, adicione a
!important
palavra - chave após top. Isso força o navegador a usar esse valor e ignora quaisquer outros valores para a palavra-chave. Isso tem a desvantagem de que você não pode substituir o valor em nenhum outro lugar.fonte
A partir do Bootstrap 4, a seguinte classe foi adicionada para conseguir isso sem JavaScript.
Você pode encontrar a documentação deles aqui .
Obrigado vd por indicar que você precisa adicionar ambos .modal-dialog-centrado em .modal-dialog para centralizar verticalmente o modal.
fonte
isso funciona perfeitamente para mim:
URL completo da demonstração : https://codepen.io/dimbslmh/full/mKfCc
fonte
você pode usar:
para centralizá-lo vertical e horizontalmente.
fonte
Como a maioria das respostas aqui não funcionou ou apenas parcialmente:
Você precisa usar o seletor [style] para aplicar apenas o estilo no modal atualmente ativo, em vez de todos os modais.
.in
teria sido ótimo, mas parece ser adicionado somente após a transição, o que é tarde demais e causa algumas transições realmente ruins. Felizmente, parece que o bootstrap sempre aplica um atributo de estilo no modal, assim como está começando a aparecer, então isso é um pouco invasivo, mas funciona.A
:not([style='display: none;'])
parte é uma solução alternativa para a autoinicialização não remover corretamente o atributo de estilo e, em vez disso, definir a exibição de estilo como nenhuma quando você fechar a caixa de diálogo.fonte
Você pode alcançar o centro de alinhamento vertical no modal Bootstrap 3 assim:
e adicione essa classe css ao contêiner "modal-dialog"
Exemplo de trabalho do jsFiddle: http://jsfiddle.net/U4NRx/
fonte
A maneira mais limpa e simples de fazer isso é usar o Flexbox! A seguir, alinharemos verticalmente um modal do Bootstrap 3 no centro da tela e é muito mais limpo e mais simples do que todas as outras soluções postadas aqui:
NOTA: Embora essa seja a solução mais simples, ela pode não funcionar para todos devido ao suporte do navegador: http://caniuse.com/#feat=flexbox
Parece que (normalmente) o IE fica para trás. No meu caso, todos os produtos que desenvolvo para mim ou para os clientes são o IE10 +. (não faz sentido para os negócios investir tempo de desenvolvimento suportando versões mais antigas do IE quando ele poderia ser usado para realmente desenvolver o produto e liberar o MVP mais rapidamente). Certamente não é um luxo que todos tenham.
Vi sites maiores detectarem se o flexbox é suportado ou não e aplicar uma classe ao corpo da página - mas esse nível de engenharia de front-end é bastante robusto e você ainda precisará de um fallback.
Eu encorajaria as pessoas a abraçar o futuro da web. O Flexbox é incrível e você deve começar a usá-lo, se puder.
PS - Este site realmente me ajudou a entender o flexbox como um todo e aplicá-lo a qualquer caso de uso: http://flexboxfroggy.com/
EDIT: No caso de dois modais em uma página, isso deve se aplicar a .modal.in
fonte
Vantagens:
display:table-cell
(isso não é para layouts)markup
SCSS
para quem usagulp
ougrunt
Mostrar snippet de código
Nota : Pretendo manter esta resposta atualizada com as últimas especificações do Bootstrap 3. Para uma solução Bootstrap 4, consulte esta resposta (por enquanto elas são mais ou menos iguais, mas com o tempo podem divergir). Se você encontrar algum bug ou problema, informe-me e atualizarei. Obrigado.
Limpo, sem prefixo
SCSS
(para uso comgulp
/grunt
):fonte
Mais uma solução CSS. Não funciona para pop-ups maiores que a porta de exibição.
Em
.modal-dialog
classe, substituindo a posição por absoluta (de relativa) e centralizando o conteúdoright:0, left: 0
Ao
.modal.fade .modal-dialog , .modal.in .modal-dialog
definir a animação de transição aotop
invés de traduzir.margin-top
move o pop-up ligeiramente abaixo do centro no caso de pop-up pequeno e no caso de pop-ups longos, o modal fica preso no cabeçalho. Conseqüentementemargin-top:0, margin-bottom:0
Precisa refinar ainda mais.
fonte
Para quem estiver usando o bootstrap angular-ui, adicione as classes abaixo com base nas informações acima:
Nota: Nenhuma outra alteração é necessária e deve resolver todos os modais.
fonte
Não há necessidade de nos javascript. O Boostrap modal adiciona classe .in quando aparece. Basta modificar essa combinação de classes com modalclassName.fade.in com flex css e pronto.
adicione este css para centralizar seu modal verticalmente e horizontalmente.
fonte
Minha escolha, apenas um pouco de CSS: (NÃO está funcionando no IE8)
Você pode jogar com a primeira regra para alterar a aparência do modal.
Usando: Bootstrap 3.3.4
fonte
Basta adicionar o seguinte CSS ao seu já existente, ele funciona bem para mim
fonte
Com base na resposta de Arany , mas também contabilizando o rolagem da página.
fonte
Acho que essa é uma solução CSS pura e mais limpa do que a solução de Rens de Nobel. Além disso, isso não impede o fechamento da caixa de diálogo clicando fora dela.
http://plnkr.co/edit/JCGVZQ?p=preview
Basta adicionar alguma classe CSS ao contêiner DIV com a classe .modal-dialog para obter maior especificidade do que o CSS de autoinicialização, por exemplo, centrado.
HTML
E torne esse contêiner .modal-dialog.centered fixo e posicionado corretamente.
CSS
Ou ainda mais simples usando o flexbox.
CSS
fonte
fonte
Isso funciona no BS3, não testado na v2. Centraliza o modal verticalmente. Observe que ele fará a transição para lá - se você quiser que ele apareça apenas na posição, edite a
transition
propriedade CSS para.modal-dialog
fonte
fonte
Isso pega a resposta de Arany e faz com que funcione se o modal for mais alto que a altura da tela:
fonte
Para adicionar a central vertical modal ao bootstrap modal.js, adicionei isso no final da
Modal.prototype.show
função:fonte
Para fazer o Modal verticalmente Align Middle All dialog.
/* Nota:
1. Mesmo que você não precise atribuir um seletor, ele encontrará todos os modos do documento e o tornará verticalmente no meio
2.Para evitar o meio de algum modal específico para ser o centro, você pode usar: not selector in click event
* /
De Milão Pandya
fonte
Use este script simples que centraliza os modais.
Se desejar, você pode definir uma classe personalizada (por exemplo: .modal.modal-vcenter em vez de .modal) para limitar a funcionalidade apenas a alguns modais.
Adicione também esta correção CSS para o espaçamento horizontal do modal; mostramos a rolagem nos modais, a rolagem do corpo é ocultada automaticamente pelo Bootstrap:
fonte
Outra resposta de CSS para esta pergunta ...
Esta solução usa CSS apenas para obter o efeito desejado, mantendo a capacidade de fechar o modal clicando fora dele. Também permite que você defina
.modal-content
máximos de altura e largura para que seu pop-up não cresça além da janela de visualização. Um pergaminho aparecerá automaticamente quando o conteúdo crescer além do tamanho modal.nota:
O Bootstrap recomendado
.modal-dialog
div
deve ser omitido para que isso funcione corretamente (não parece quebrar nada). Testado no Chrome 51 e IE 11.Código CSS:
EDIT: A
.modal-dialog
classe permite que você escolha se um usuário pode ou não fechar o modal clicando fora dele. A maioria dos modais possui um botão explícito 'fechar' ou 'cancelar'. Lembre-se disso ao usar esta solução alternativa.fonte
A melhor solução para centralizar seu modal com largura e altura é, em css add e em modal adicione esse 'centralize' como uma classe.
fonte
Centralizado verticalmente Adicione .modal-dialog-centered a .modal-dialog para centralizar verticalmente o modal
Iniciar modal de demonstração
fonte