J'essaie de créer un type de megamenu réactif à l'aide du dialogue modal Bootstrap 3. Je souhaite définir la largeur et la hauteur de la fenêtre modale entière à 80% de la fenêtre d'affichage, tout en définissant le corps modal à une hauteur maximale afin de ne pas remplir l'écran entier dans de grandes fenêtres.
Mon HTML:
<div class="modal fade">
<div class="modal-dialog modal-megamenu">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
<h4 class="modal-title">Modal Mega Menu Test</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-3"></div>
<div class="col-md-3"></div>
<div class="col-md-3"></div>
<div class="col-md-3"></div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" data-dismiss="modal" class="btn btn-primary">close</button>
</div>
</div>
</div>
Mon CSS:
.modal-megamenu {
width:80%;
height:80%;
}
.modal-body {
max-height:500px;
overflow:auto;
}
Cela fonctionne comme prévu pour la largeur, mais le paramètre "height" ne donne aucun résultat. Comme cela, la hauteur de la fenêtre modale est toujours définie sur la valeur max-height. Quelqu'un a-t-il une idée de la manière de régler la hauteur de manière dynamique en fonction de la hauteur de la fenêtre?
Solution CSS pure utilisant calc
.modal-body {
max-height: calc(100vh - 200px);
overflow-y: auto;
}
200px peut être ajusté en fonction de la hauteur de l'en-tête et du pied de page
Semblable à Bass, je devais aussi régler le débordement-y. Cela pourrait effectivement être fait dans le CSS
$('#myModal').on('show.bs.modal', function () {
$('.modal .modal-body').css('overflow-y', 'auto');
$('.modal .modal-body').css('max-height', $(window).height() * 0.7);
});
Essayer:
$('#myModal').on('show.bs.modal', function () {
$('.modal-content').css('height',$( window ).height()*0.8);
});
Pour développer la réponse de Ryand, si vous utilisez Bootstrap.ui, ceci sur votre instance modale fera l'affaire:
modalInstance.rendered.then(function (result) {
$('.modal .modal-body').css('overflow-y', 'auto');
$('.modal .modal-body').css('max-height', $(window).height() * 0.7);
$('.modal .modal-body').css('height', $(window).height() * 0.7);
});
Je suppose que vous voulez utiliser modal autant d’écran que possible sur les téléphones. J'ai créé un plugin pour résoudre ce problème UX des modaux Bootstrap sur les téléphones mobiles, vous pouvez le vérifier ici - https://github.com/keaukraine/bootstrap-fs-modal
Tout ce que vous avez à faire est d’appliquer la classe modal-fullscreen
et elle agira de la même manière que les écrans natifs d’iOS/Android.