J'ai un contenu de base de données qui contient différents types de données, telles que des vidéos Youtube, Vimeo, du texte, des images Imgur, etc. Toutes ont une hauteur et une largeur différentes. Tout ce que j'ai trouvé en cherchant sur Internet change la taille en un seul paramètre. Il doit être identique au contenu de la fenêtre contextuelle.
Ceci est mon code HTML. J'utilise aussi Ajax pour appeler le contenu.
<div id="modal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h3 id="ModalLabel"></h3>
</div>
<div class="modal-body">
</div>
</div>
Étant donné que votre contenu doit être dynamique, vous pouvez définir les propriétés css du modal de manière dynamique sur l'événement show
du modal qui redimensionnera le modal en remplaçant ses spécifications par défaut. La raison d'être bootstrap applique une hauteur maximale au corps modal avec la règle css comme ci-dessous:
.modal-body {
position: relative;
overflow-y: auto;
max-height: 400px;
padding: 15px;
}
Vous pouvez donc ajouter des styles inline de manière dynamique à l'aide de la méthode jquery css
:
Pour les versions plus récentes de bootstrap, utilisez show.bs.modal
$('#modal').on('show.bs.modal', function () {
$(this).find('.modal-body').css({
width:'auto', //probably not needed
height:'auto', //probably not needed
'max-height':'100%'
});
});
Pour les anciennes versions de bootstrap, utilisez show
$('#modal').on('show', function () {
$(this).find('.modal-body').css({
width:'auto', //probably not needed
height:'auto', //probably not needed
'max-height':'100%'
});
});
ou utilisez une règle css pour remplacer:
.autoModal.modal .modal-body{
max-height: 100%;
}
et ajoutez cette classe autoModal
à vos modaux cibles.
Modifiez le contenu de manière dynamique dans le violon, vous verrez le modal redimensionné en conséquence. Demo
La version la plus récente de bootstrap est disponible event names
.
Ancienne version de bootstrap modal events prise en charge.
Cela a fonctionné pour moi, rien de ce qui précède n'a fonctionné.
.modal-dialog{
position: relative;
display: table; /* This is important */
overflow-y: auto;
overflow-x: auto;
width: auto;
min-width: 300px;
}
La réponse de PSL ne fonctionnant pas pour moi, j'ai trouvé qu'il ne me restait plus qu'à configurer le contenu modal du contenu modal avec style="display: table;"
. Le contenu modal lui-même indique sa taille et le modal le prend en charge.
pour bootstrap 3 utiliser comme
$('#myModal').on('hidden.bs.modal', function () {
// do something…
})
Il y a plusieurs façons de faire cela si vous voulez écrire css puis ajoutez ce qui suit
.modal-dialog{
display: table
}
Au cas où vous voudriez ajouter inline
<div class="modal-dialog" style="display:table;">
//enter code here
</div>
N'ajoutez pas display:table;
à la classe de contenu modal. cela a bien fonctionné, mais la taille de votre modal est grande, voir les captures d'écran suivantes . La première image est si vous ajoutez du style à modal-dialog si vous ajoutez du style au contenu modal. il semble disposé .
Css simple travail pour moi
.modal-dialog {
max-width : 100% ;
}
Je remplace simplement le css:
.modal-dialog {
max-width: 1000px;
}
Vous pouvez le faire si vous utilisez le plug-in de dialogue jquery de gijgo.com et définissez la largeur sur auto.
$("#dialog").dialog({
uiLibrary: 'bootstrap',
width: 'auto'
});
<html>
<head>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<link href="http://code.gijgo.com/1.0.0/css/gijgo.css" rel="stylesheet" type="text/css">
<script src="http://code.gijgo.com/1.0.0/js/gijgo.js"></script>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="dialog" title="Wikipedia">
<img src="https://upload.wikimedia.org/wikipedia/en/thumb/8/80/Wikipedia-logo-v2.svg/1122px-Wikipedia-logo-v2.svg.png" width="320"/>
</div>
</body>
</html>
Vous pouvez également permettre aux utilisateurs de contrôler la taille si vous définissez redimensionnable sur true. Vous pouvez voir une démonstration à ce sujet à http://gijgo.com/Dialog/Demos/bootstrap-modal-resizable
Une solution CSS simple qui va centrer le modal verticalement et horizontalement:
.modal.show {
display: flex !important;
justify-content: center;
}
.modal-dialog {
align-self: center;
}
Mine Solution consistait simplement à ajouter ci-dessous le style .<div class="modal-body" style="clear: both;overflow: hidden;">
mettre width:fit-content
sur la div modale.
Pour Bootstrap 2: ajuste automatiquement la hauteur du modèle de manière dynamique
//Auto adjust modal height on open
$('#modal').on('shown',function(){
var offset = 0;
$(this).find('.modal-body').attr('style','max-height:'+($(window).height()-offset)+'px !important;');
});
À partir de Bootstrap 4 - il a un style de:
@media (min-width: 576px)
.modal-dialog {
max-width: 500px;
}
donc si vous cherchez à redimensionner le modal width à une largeur plus grande, je suggérerais l’utiliser dans votre css par exemple:
.modal-dialog { max-width: 87vw; }
Remarque ce paramètre width: 87vw;
ne remplacera pas le max-width: 500px;
de bootstrap.
J'ai eu le même problème avec bootstrap 3 et la hauteur de la div de modal-body ne voulant pas être supérieure à 442 pixels. C'était tout le css nécessaire pour résoudre ce problème dans mon cas:
.modal-body {
overflow-y: auto;
}