Comment limiter la hauteur du modal?

Je cherche un moyen de garder une boîte de dialogue modale dans les limites de l'écran, c'est-à-dire que sa hauteur est toujours inférieure à la hauteur de l'écran et que la largeur est ajustée en conséquence. J'ai essayé:

.modal-dialog {
  max-height: 100%;
}

, Mais cela ne semble pas avoir d'effet.

Http://jsfiddle.net/ma4zn5gv/

Une illustration:

entrez la description de l'image ici

Je préfère une solution CSS pure (pas de js) si elle existe. Pour plus de clarté, je cherche max-height, pas height (c'est-à-dire que le modal n'est pas plus grand que l'écran, le laisser tel quel).

22
demandé sur Danield 2015-03-01 12:28:24

9 réponses

Utilisez unités de fenêtre avec calc. Comme ceci:

.img-responsive {
    max-height: calc(100vh - 225px);
}

...où le 225px correspond à la hauteur combinée des sections supérieure et inférieure de la fenêtre qui entourent la boîte de dialogue.

Aussi, afin de prendre soin de la largeur du modal, nous devons définir quelques propriétés supplémentaires:

.modal {
    text-align:center;
}
.modal-dialog {
    display: inline-block;
    width: auto;
}

Mise à jour Fiddle (redimensionner la hauteur de la fenêtre pour voir l'effet)


Alternativement:

On peut remplacer calc par un remplissage + négatif technique de marge comme ceci:

.img-responsive {
    max-height: 100vh;
    margin: -113px 0;
    padding: 113px 0;
}

VIOLON

PS: le support du navigateur pour les unités de fenêtre est très bon

49
répondu Danield 2017-11-27 13:06:13

Depuis la valeur par défaut définie sur auto et 100% en largeur et en hauteur. vous pouvez simplement modifier; l'image à l'intérieur de la fenêtre et l'ID cible, comme suit:

/*let target has the same value as modal-dialog*/
#myModal {
    width:auto;
    height:auto;
    margin:0 auto;
}
/*modify image inside modal-dialog*/
.modal-dialog,.modal-dialog img { /*same value to avoid overwidth*/
    width:70%;
    height:70%;
    margin:0 auto;
}

Voici le DÉMO dans jsfiddle.

Vous pouvez également le séparer en, comme suit:

.modal-dialog img {
    width:100%;
    height:100%;
    margin:0 auto;
}
.modal-dialog {/*modify the modal-dialog*/
/*ONLY CHANGE THIS, NOT others (#myModal or .modal-image img)*/
    width:60%;
    height:60%;
    margin:0 auto;
}

MISE À JOUR DÉMO:

3
répondu Herman Nz 2015-03-11 10:50:57

Si vous vous assurez que les éléments parents ont une hauteur définie, vous devriez pouvoir le faire assez facilement. J'ai donné l'en-tête et le pied de page 10 pour cent heights hear et le corps 80 pour cent de sorte que tout cela ajoute jusqu'à 100:)

.modal, .modal-dialog, .modal-content{
  height: 100%;

}
.modal-header, .modal-footer {height:10%;}
.modal-body {height:80%;}
.img-responsive {
    max-height:100%;
}
2
répondu Achilles 2015-03-09 20:13:49

Script

$('#myModal').on('show.bs.modal', function () {
$('.modal-content').css('max-height',$( window ).height()*0.8);
$('.modal-content img').css('max-height',(($( window ).height()*0.8)-86));
});

Violon

2
répondu Richie Fredicson 2015-03-11 10:29:14

Si vous fournissez max-height et Max-width à 100%, Il prendra automatiquement l'écran en conséquence, mais comme vous voulez que cette taille de dialogue soit plus petite, vous devrez définir max-height et Max-width à une valeur fixe. Comme vous avez déjà utilisé responsive model dialog, il changera automatiquement la taille de la boîte de dialogue en fonction de la taille de votre écran.

Essayez de suivre css cela peut fonctionner selon vos besoins. vous pouvez modifier max-height et Max-width en conséquence, margin-left et margin-right utilisés pour centre d'aligner.

 .modal-dialog {
      max-height: 225px;
      max-width:  200px; 
      margin-left: auto;
      margin-right: auto;
    }

J'espère que cela peut vous aider.!!

1
répondu Ranjitsinh 2015-03-11 07:38:09

Essayer de travailler Violon avec certains css changements.

Css:

.modal-dialog {
 height: 100%;
 margin: 0;
 padding: 10px;
}
.modal-content { height:100%; }
.modal-body {
position: absolute;
padding: 15px;
left:0;
right:0;
top: 55px;
bottom: 65px;
margin: auto;
}
.modal-body > p {
height: 100%;
margin: 0;
}
.img-responsive{
max-height: 100%;
max-width: 100%;
margin:auto;
}
.modal-footer {
position: absolute;
bottom: 0;
left: 0;
right: 0;
}
1
répondu Amit 2015-03-11 10:40:18

Corrigez d'abord la taille du conteneur, puis définissez la taille de la boîte de dialogue modale.

Par exemple:

.modal{height:100%;width:50%;margin: 0 auto;}
.modal-dialog{overflow:hidden; max-height:96%;}

Violon

1
répondu Kanti 2015-03-11 10:45:18

Cible le modal-body et non le modal-dialog.

Ajoutez ce qui suit à votre CSS:

max-height: 80vh;
overflow-y: auto;

Cela devrait ressembler à ceci:

.modal-body {
    max-height: 80vh; overflow-y: auto;
}

Ajustez la hauteur VH à la préférence.

1
répondu Don Juan 2018-02-05 11:40:38

Je pense que vous devriez utiliser overflow: hidden sur .modal-dialogue, avec un style pour gérer la proportion d'image.

0
répondu David Vartanian 2015-03-11 01:59:25