J'utilise bootstrap et Parse Framework pour créer une petite application Web. Mais ces modaux Bootstrap continuent d'ajouter du rembourrage au corps après la fermeture. Comment résoudre ça?
J'ai essayé de mettre ce code dans mon javascript:
$('.modal').on('hide.bs.modal', function (e) {
$("element.style").css("padding-right","0");
});
Mais ça ne marche pas. Est-ce que quelqu'un sait comment réparer ceci?
Mon code:
<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');
}
});
}
J'utilise bootstrap et Parse Framework pour créer une petite application Web. Mais ces modaux Bootstrap continuent d'ajouter du rembourrage au corps après la fermeture. Comment résoudre ça?
padding-right
mais aussi ajouter la classe commemodal-open
pouroverflow: hidden
son juste pour cacher la barre de défilement .modal-open
avecpadding-right:0 !important;
mais cela ne fonctionne pas, savez-vous pourquoi?padding-right
mise à jour de la propriété css sur l'événement correct, mais vous la déclenchez sur le mauvais élément. Il doit être tiré sur l'body
élément. Veuillez consulter ma réponse ci-dessous.Réponses:
Cela pourrait être un problème de Bootstrap modal. D'après mes tests, il semble que le problème est que l'
#adminPanel
initialisation est en cours alors qu'elle#loginModal
n'a pas encore été totalement fermée. Les solutions de contournement peuvent être de supprimer l'animation en supprimant lafade
classe sur#adminPanel
et /#loginModal
ou en définissant un délai d'expiration (~ 500 ms) avant d'appeler$('#adminPanel').modal();
. J'espère que cela t'aides.la source
.fade
de#loginModal
et il fonctionne.Je viens d'utiliser le correctif css ci-dessous et cela fonctionne pour moi
la source
hide.bs.modal
événement d'amorçage. Veuillez consulter ma réponse ci-dessous.Juste changé en
la source
modal
panneau etbody.modal-open
le rembourrage. Mais cela a résolu le problèmeUne solution pure css qui conserve la fonctionnalité d'amorçage comme elle se doit.
Le problème est causé par une fonction dans le jQuery bootstrap qui ajoute un peu de padding-right lorsqu'une fenêtre modale s'ouvre, s'il y a une barre de défilement sur la page. Cela empêche le contenu de votre corps de se déplacer lorsque le modal s'ouvre, et c'est une fonctionnalité intéressante. Mais cela cause ce bug.
Un grand nombre des autres solutions proposées ici interrompent cette fonctionnalité et font légèrement changer votre contenu lorsque le modal s'ouvre. Cette solution préservera la fonctionnalité du modal bootstrap sans déplacer le contenu, mais corrigera le bogue.
la source
Si vous êtes plus préoccupé par le
padding-right
problème, vous pouvez le fairejQuery :
cette volonté
addClass
à votrebody
puis en utilisant ceciCSS :
et cela vous aidera à vous en débarrasser
padding-right
.Mais si vous êtes également préoccupé par la dissimulation,
scroll
vous devez également ajouter ceci:CSS :
Voici le JSFiddle
Jetez un œil, cela fera l'affaire pour vous.
la source
padding-right
àbody
et augmente la quantité depadding-right
par 15px chaque fois que je ferme le panneau d' administration.$(document).ready(function(){
de mettre votre code à l' intérieur.Ouvrez simplement bootstrap.min.css
Trouver cette ligne (par défaut)
et changez-le comme
Cela fonctionnera pour chaque modal du site. Vous pouvez faire un débordement: auto; si vous souhaitez conserver la barre de défilement telle quelle lors de l'ouverture de la boîte de dialogue modale.
la source
J'ai eu ce même problème pendant TRES longtemps. Aucune des réponses ici n'a fonctionné! Mais ce qui suit l'a corrigé!
Il y a deux événements qui se déclenchent à la fermeture d'un modal, d'abord c'est
hide.bs.modal
, puis c'esthidden.bs.modal
. Vous devriez pouvoir en utiliser un seul.la source
hide.bs.modal
ethidden.bs.modal
. Mais a parfaitement fonctionné lorsque j'ai retiréhide.bs.modal
de l'auditeur. :)solution facile
ajouter cette classe
C'est un remplacement mais fonctionne
la source
Je viens de supprimer la
fade
classe et de modifier l'effet de fondu de classe avecanimation.css
. J'espère que cela aidera.la source
removeAttr ne fonctionnera pas, vous supprimerez la propriété CSS comme ceci:
Sans valeur de propriété, la propriété est supprimée.
la source
Je charge le CSS par défaut bootstrap 3.3.0 et j'ai un problème similaire. Résolu en ajoutant ce CSS:
body.modal-open { overflow:inherit; padding-right:inherit !important;
}L'important est que le javascript modal bootstrap ajoute 15px de remplissage vers la droite par programme. Je suppose que c'est pour compenser la barre de défilement, mais je ne veux pas cela.
la source
Avec Bootstrap 4, cela a fonctionné pour moi:
la source
J'ai le même problème avec Bootstrap 3.3.7 et ma solution pour la barre de navigation fixe: ajouter ce style à votre css personnalisé.
cela rendra votre modal affiché pendant que la fenêtre de défilement fonctionnera toujours. merci, j'espère que cela vous aidera aussi
la source
Je sais que c'est une vieille question, mais aucune des réponses d'ici n'a supprimé le problème dans mes situations similaires et j'ai pensé qu'il serait utile que certains développeurs lisent également ma solution.
J'utilise pour ajouter du CSS au corps lorsqu'un modal est ouvert, dans les sites Web où il est encore utilisé bootstrap 3.
la source
Ma solution ne nécessite aucun CSS supplémentaire.
Comme indiqué par @Orland, un événement se produit toujours lorsque l'autre démarre. Ma solution consiste à démarrer le deuxième événement (en affichant le
adminPanel
modal) uniquement lorsque le premier est terminé (en masquant leloginModal
modal).Vous pouvez accomplir cela en attachant un auditeur à l'
hidden.bs.modal
événement de votreloginModal
modal comme ci-dessous:Et, si nécessaire, masquez simplement le
loginModal
modal.De couse vous pouvez implémenter votre propre logique à l'intérieur de l'auditeur afin de décider d'afficher ou non le
adminPanel
modal.Vous pouvez obtenir plus d'informations sur les événements modaux Bootstrap ici .
Bonne chance.
la source
Les modèles Bootstrap ajoutent ce rembourrage directement au corps si le corps déborde.
Sur bootstrap 3.3.6 (la version que j'utilise), c'est la fonction chargée d'ajouter ce padding-right à l'élément body: https://github.com/twbs/bootstrap/blob/v3.3.6/dist/js /bootstrap.js#L1180
Une solution rapide consiste simplement à remplacer cette fonction après avoir appelé le fichier bootstrap.js:
Cela a résolu le problème pour moi.
la source
la source
C'est ce qui a fonctionné pour moi:
la source
Retirez simplement le
data-target
du bouton et chargez le modal en utilisant jQuery.jQuery:
la source
J'ai creusé dans le javascript bootstrap et j'ai trouvé que le code Modal définit le bon remplissage dans une fonction appelée
adjustDialog()
qui est définie sur le prototype Modal et exposée sur jQuery. Placer le code suivant quelque part pour remplacer cette fonction pour ne rien faire a fait l'affaire pour moi (même si je ne sais pas quelle est la conséquence de ne pas encore définir cela !!)$.fn.modal.Constructor.prototype.adjustDialog = function () { };
la source
Cela peut résoudre le problème
la source
Ceci est un bogue d'amorçage et corrigé dans v4-dev: https://github.com/twbs/bootstrap/pull/18441 jusqu'à ce que l'ajout de la classe CSS ci-dessous devrait aider.
la source
J'ai eu le même problème en utilisant les modaux et ajax. C'était parce que le fichier JS était référencé deux fois, à la fois dans la première page et dans la page appelée par ajax, donc lorsque modal a été fermé, il a appelé l'événement JS deux fois qui, par défaut, ajoute un padding-right de 17px.
la source
A travaillé pour moi. Notez que la barre de défilement est forcée dans le corps - mais si vous avez de toute façon une page "défilante", cela n'a pas d'importance (?)
la source
Essaye ça
Il ajoutera le padding right 0px au corps après la fermeture modale.
la source
Cela se produit lorsque vous ouvrez un modal que le modal précédent n'est pas encore complètement fermé. Pour résoudre ce problème, ouvrez simplement un nouveau modal au moment où tous les modaux sont complètement fermés, vérifiez les codes ci-dessous:
la source
Je maintenant cela est vieux, et toutes les solutions proposées ici peuvent fonctionner. J'ajoute simplement quelque chose de nouveau au cas où cela pourrait aider quelqu'un: j'ai eu le même problème et j'ai remarqué que l'ouverture du modal ajoutait une marge droite à mon sidenav (probablement une sorte d'héritage du rembourrage ajouté au corps). Ajouter {margin-right: 0! Important;} à mon sidenav a fait l'affaire.
la source
(Bootstrap v3.3.7) De mon inspecteur de navigateur, j'ai vu que cela est directement défini dans la propriété de style d' élément , la sorcière remplace les propriétés de classe.
J'ai essayé de `` réinitialiser '' la valeur paddig-right lorsque le modal est affiché avec:
Mais il revient dès que la fenêtre est redimensionnée :( (probablement à partir du script pluggin).
Cette solution a fonctionné pour moi:
la source
Comme le dit @Orland, si vous utilisez un effet comme le fondu, nous devons attendre avant d'afficher le modal, c'est un peu piraté mais cela fera l'affaire.
la source
J'espère qu'il y a encore quelqu'un qui a besoin de cette réponse. Il existe une fonction appelée resetScrollbar () dans bootstrap.js, pour une raison stupide, les développeurs ont décidé d'ajouter les dimensions de la barre de défilement à la droite de remplissage du corps. Donc, techniquement, si vous définissez simplement le remplissage à droite sur une chaîne vide, cela résoudra le problème
la source