J'essaie d'utiliser Bootstrap pour la première fois et je rencontre un problème avec les dialogues modaux. En utilisant l'exemple de code sur cette page , lorsque le modal est ouvert, une barre de défilement apparaît, ce qui décale également le contenu de la page à gauche.
Code:
<!-- Button trigger modal -->
<button class="btn btn-primary btn-lg" data-toggle="modal" data-target="#myModal">
Launch demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title" id="myModalLabel">Modal title</h4>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
JSFIDDLE: http://jsfiddle.net/WqRBP/
Beaucoup de sites que je regarde utilisent Bootstrap et n'ont pas ce problème. Y a-t-il une solution simple au problème?
EDIT: la barre de défilement apparaît dans Chrome et IE, je n'ai pas testé dans d'autres navigateurs.
Voici ce que je vois dans JSFIDDLE:
Le problème est dû au fait que Twitter Bootstrap
décale toujours la page 15px vers la gauche lorsqu'un modal est ouvert. Vous pouvez résoudre ce problème en déplaçant la page vers la droite - margin-right: -15px
. Cela peut être fait en utilisant les événements show.bs.modal
et hidden.bs.modal
fournis par Bootstrap's modal
.
$('#myModal').bind('hidden.bs.modal', function () {
$("html").css("margin-right", "0px");
});
$('#myModal').bind('show.bs.modal', function () {
$("html").css("margin-right", "-15px");
});
FYI:
show.bs.modal
: cet événement se déclenche immédiatement lorsque la méthode show instance est appelée. Si causé par un clic, l'élément cliqué est disponible en tant que propriété relatedTarget de l'événement.
hidden.bs.modal
: cet événement est déclenché lorsque l'utilisateur a caché le modal (attend que les transitions CSS soient terminées).
La réponse de LVarayut m'a envoyé dans la bonne direction et ce que j'ai finalement utilisé est la suivante:
body.modal-open, .modal-open .navbar-fixed-top, .modal-open .navbar-fixed-bottom {
margin-right: 0;
}
.modal {
overflow-y: auto;
}
C'est si simple, il suffit d'ajouter à votre css:
body.modal-open{overflow:hidden!important;}
/*Optional:*/
.modal-open, .modal{padding-right:0!important}
Ceci est ma solution:
.modal {
margin-right: -15px;
}`
et ajoutez ceci aussi
body.modal-open {
margin-right: 0 !important;
}
J'espère que cela vous aidera.
Cette issue est résolue dans Bootstrap version 3.2.0, publiée le 23/06/2014.
Merci à @roadsunknown pour le lien (dans les commentaires de la question).
C'est ma solution
#myModal{
overflow:hidden;
}
body {
overflow-y: scroll !important;
}
Avec cela, vous forcerez votre page à avoir une barre de défilement.
Ce travail pour moi. Ça devrait marcher
body.modal-open {
padding-right: 0 !important;
overflow-y: scroll;
}
Dans ce cas, vous pouvez écraser le css principal de bootstrap en utilisant votre propre css, ce qui peut parfois affecter les autres. c'est donc un code simple qui fonctionne
body.modal-open .modal {
margin-right: -15px !important;
}
body.modal-open {
margin-right: 0 !important;
}
si vous voulez changer le css principal de bootstrap, mettez-le à jour
body.modal-open, .modal-open .navbar-fixed-top, .modal-open .navbar-fixed-bottom {
margin-right: 0 !important;
}
Essaye ça
.modal-open {
overflow-y: auto
}
cela a fait un tour pour moi
$('html').bind('hidden.bs.modal', function () {
console.log('hidden');
$("html").css("margin-right", "0px");
});
$('html').bind('hide.bs.modal', function () {
console.log('hiding');
$("html").css("margin-right", "-15px");
});
$('html').bind('show.bs.modal', function () {
console.log('shown');
$("html").css("margin-right", "-15px");
});
Essayez avec les css suivants:
.modal{
overflow:auto;
}
J'ai déjà résolu mon problème de cette façon.