Estou usando o bootstrap e o framework Parse para construir um pequeno webapp. Mas esses modais Bootstrap continuam adicionando padding-right to body depois de fechados. Como resolver isso?
Tentei colocar este código no meu javascript:
$('.modal').on('hide.bs.modal', function (e) {
$("element.style").css("padding-right","0");
});
Mas não funciona. Alguém sabe como consertar isso?
Meu código:
<button type="button" class="btn btn-lg btn-default" data-toggle="modal" data-target="#loginModal">Admin panel</button>
<div id="loginModal" class="modal fade" role="dialog">
<div class="modal-dialog modal-sm">
<!-- Modal content -->
<div class="modal-content">
<!-- header -->
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Login</h4>
</div>
<!-- body -->
<div class="modal-body text-center" >
<input class='form-control' type="text" id="userName" placeholder="Username" ng-model='username'>
<input class='form-control' type="password" id="password" placeholder="Password" ng-model='password'>
<div class="modal-footer">
<button type="button" class="btn btn-default" id="loginButton" ng-click="goToAdminPanel()">Login</button>
<button type="button" class="btn btn-default" data-dismiss="modal" id="closeButton">Close</button>
</div>
</div>
</div>
</div>
</div>
<div id="adminPanel" class="modal fade" role="dialog">
<div class="modal-dialog modal-lg">
<!-- Modal content -->
<div class="modal-content">
<!-- header -->
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title">Admin Panel</h4>
</div>
<!-- body -->
<div class="modal-body" >
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" id="saveButton">Save</button>
<button type="button" class="btn btn-default" data-dismiss="modal" id="closeButton">Close</button>
</div>
</div>
</div>
</div>
$scope.goToAdminPanel = function(){
Parse.User.logIn($scope.username,$scope.password,{
success: function(user){
$('#loginModal').modal('hide');
$('#adminPanel').modal();
},
error: function(user, error) {
alert('Wrong username and/or password');
}
});
}
Estou usando o bootstrap e o framework Parse para construir um pequeno webapp. Mas esses modais Bootstrap continuam adicionando padding-right to body depois de fechados. Como resolver isso?
javascript
jquery
html
css
twitter-bootstrap
phuwin
fonte
fonte
padding-right
mas também adicionar classe,modal-open
poisoverflow: hidden
é apenas para ocultar a barra de rolagem .modal-open
com,padding-right:0 !important;
mas não funciona, sabe por quê?padding-right
atualização da propriedade css no evento correto, mas está disparando no elemento errado. Ele precisa ser disparado nobody
elemento. Por favor, verifique minha resposta abaixo.Respostas:
Isso pode ser uma falha do modal Bootstrap. Pelos meus testes, parece que o problema é que
#adminPanel
está sendo inicializado enquanto#loginModal
ainda não foi totalmente fechado. As soluções alternativas podem ser remover a animação removendo afade
classe#adminPanel
e /#loginModal
ou definir um tempo limite (~ 500 ms) antes de chamar$('#adminPanel').modal();
. Espero que isto ajude.fonte
.fade
a partir#loginModal
e ele funciona.Acabei de usar a correção de css abaixo e está funcionando para mim
fonte
hide.bs.modal
evento de bootstrap. Por favor, verifique minha resposta abaixo.Acabou de mudar para
fonte
modal
painel quantobody.modal-open
o preenchimento. Mas isso resolveu muito bemUma solução css pura que mantém a funcionalidade de bootstrap como deveria ser.
O problema é causado por uma função no jQuery de bootstrap que adiciona um pouco de preenchimento à direita quando uma janela modal é aberta, se houver uma barra de rolagem na página. Isso impede que o conteúdo do seu corpo mude quando o modal abre, e é um bom recurso. Mas está causando esse bug.
Muitas das outras soluções fornecidas aqui quebram esse recurso e fazem seu conteúdo mudar ligeiramente sobre quando o modal é aberto. Esta solução preservará o recurso do modal de bootstrap, não alterando o conteúdo, mas corrigindo o bug.
fonte
Se você está mais preocupado com o
padding-right
assunto relacionado, pode fazer issojQuery :
esta vontade
addClass
para vocêbody
e então usando estaCSS :
e isso ajudará você a se livrar
padding-right
.Mas se você também está preocupado com a ocultação
scroll
, você também deve adicionar:CSS :
Aqui está o JSFiddle
Por favor, dê uma olhada, ele fará o truque para você.
fonte
padding-right
quebody
e aumenta a quantidade depadding-right
por 15px cada vez que eu fechar o painel de administração.$(document).ready(function(){
tente colocar seu código dentro dele.Basta abrir bootstrap.min.css
Encontre esta linha (padrão)
e mude como
Funcionará para todos os modais do site. Você pode fazer overflow: auto; se você deseja manter a barra de rolagem como está ao abrir o diálogo modal.
fonte
Eu tive esse mesmo problema por muito tempo. Nenhuma das respostas aqui funcionou! Mas o seguinte consertou!
Existem dois eventos que disparam no fechamento de um modal, primeiro é
hide.bs.modal
e depois éhidden.bs.modal
. Você deve ser capaz de usar apenas um.fonte
hide.bs.modal
ehidden.bs.modal
. Mas funcionou perfeitamente quando eu removihide.bs.modal
do ouvinte. :)conserto fácil
adicione esta classe
É uma substituição, mas funciona
fonte
Acabei de remover a
fade
classe e alterar o efeito de esmaecimento da classe comanimation.css
. Espero que isso ajude.fonte
removeAttr não funcionará, você removerá a propriedade CSS assim:
Sem nenhum valor de propriedade, a propriedade é removida.
fonte
Estou carregando o CSS do bootstrap 3.3.0 padrão e tive um problema semelhante. Resolvido ao adicionar este CSS:
body.modal-open { overflow:inherit; padding-right:inherit !important;
}O importante é que o javascript modal de bootstrap adiciona 15px de preenchimento à direita programaticamente. Meu palpite é que é para compensar a barra de rolagem, mas eu não quero isso.
fonte
Com o Bootstrap 4, isso funcionou para mim:
fonte
Eu tenho o mesmo problema com o Bootstrap 3.3.7 e minha solução para a barra de navegação fixa: Adicionar este estilo ao seu css personalizado.
isso fará com que seu modal seja mostrado enquanto a janela de rolagem ainda está funcionando. obrigado, espero que isso ajude você também
fonte
Eu sei que esta é uma pergunta antiga, mas nenhuma das respostas a partir daqui removeu o problema em minhas situações semelhantes e achei que seria útil para alguns desenvolvedores lerem minha solução também.
Costumo adicionar CSS ao corpo quando um modal é aberto, nos sites onde ainda é usado bootstrap 3.
fonte
Minha solução não requer nenhum CSS adicional.
Conforme apontado por @Orland, um evento ainda está acontecendo quando o outro começa. Minha solução é iniciar o segundo evento (mostrando o
adminPanel
modal) apenas quando o primeiro estiver concluído (ocultando ologinModal
modal).Você pode fazer isso anexando um ouvinte ao
hidden.bs.modal
evento do seuloginModal
modal, como a seguir:E, quando necessário, apenas oculte o
loginModal
modal.Claro que você pode implementar sua própria lógica dentro do ouvinte para decidir se quer mostrar ou não o
adminPanel
modal.Você pode obter mais informações sobre Bootstrap Modal Events aqui .
Boa sorte.
fonte
Os modelos de bootstrap adicionam esse acolchoamento direto ao corpo se o corpo estiver transbordando.
No bootstrap 3.3.6 (a versão que estou usando), esta é a função responsável por adicionar esse direito de preenchimento ao elemento do corpo: https://github.com/twbs/bootstrap/blob/v3.3.6/dist/js /bootstrap.js#L1180
Uma solução rápida é simplesmente substituir essa função depois de chamar o arquivo bootstrap.js:
Isso resolveu o problema para mim.
fonte
fonte
Isto é o que funcionou para mim:
fonte
Apenas remova o
data-target
do botão e carregue o modal usando jQuery.jQuery:
fonte
Pesquisei no javascript de bootstrap e descobri que o código Modal define o preenchimento correto em uma função chamada
adjustDialog()
que é definida no protótipo Modal e exposta no jQuery. Colocar o código a seguir em algum lugar para substituir esta função para não fazer nada funcionou para mim (embora eu não saiba qual é a consequência de não definir isso ainda!)$.fn.modal.Constructor.prototype.adjustDialog = function () { };
fonte
Isso pode resolver o problema
fonte
Este é um bug de bootstrap e corrigido na v4-dev: https://github.com/twbs/bootstrap/pull/18441 até então adicionar a classe CSS abaixo deve ajudar.
fonte
Eu tive o mesmo problema com modals e ajax. Foi porque o arquivo JS foi referenciado duas vezes, tanto na primeira página quanto na página chamada por ajax, então quando o modal foi fechado, ele chamou o evento JS duas vezes que, por padrão, adiciona um padding-right de 17px.
fonte
Funcionou para mim. Observe que a barra de rolagem é forçada no corpo - mas se você tiver uma página de "rolagem" de qualquer maneira, não importa (?)
fonte
Tente isto
Ele adicionará o padding 0px correto ao corpo após o fechamento modal.
fonte
Ocorre quando você abre um modal que o modal anterior ainda não está completamente fechado. Para corrigi-lo basta abrir novo modal no momento em que todos os modais estiverem completamente fechados, verifique os códigos abaixo:
fonte
Agora isso é antigo e todas as soluções oferecidas aqui podem funcionar. Estou apenas adicionando algo novo caso possa ajudar alguém: tive o mesmo problema e percebi que abrir o modal estava adicionando uma margem direita ao meu sidenav (provavelmente uma espécie de herança do preenchimento adicionado ao corpo). Adicionar {margin-right: 0! Important;} ao meu sidenav funcionou.
fonte
(Bootstrap v3.3.7) No inspetor do meu navegador, vi que isso é definido diretamente no estilo do elemento propriedade de , que substitui as propriedades da classe.
Eu tentei 'redefinir' o valor paddig-right quando o modal está sendo exibido com:
Mas ele volta assim que a janela é redimensionada :( (provavelmente do script pluggin).
Esta solução funcionou para mim:
fonte
Como @Orland diz, se você estiver usando algum efeito como fade, então precisamos esperar antes de exibir o modal, isso é um pouco hackeado, mas resolverá o problema.
fonte
Espero que ainda haja alguém que precise dessa resposta. Há uma função chamada resetScrollbar () em bootstrap.js, por alguma razão estúpida os desenvolvedores decidiram adicionar as dimensões da barra de rolagem ao preenchimento do corpo à direita. então, tecnicamente, se você apenas definir o preenchimento à direita como uma string vazia, isso resolverá o problema
fonte