168 votes

Modale Twitter Bootstrap : Comment supprimer l'effet de glissement vers le bas ?

Existe-t-il un moyen de modifier l'animation de la fenêtre modale de Twitter Bootstrap en la faisant passer d'un effet de glissement à un effet de fondu ou en l'affichant simplement sans glissement ? J'ai lu la documentation ici :

http://getbootstrap.com/javascript/#modals

Mais ils ne mentionnent aucune option permettant de modifier les effets de glissement du corps modal.

366voto

Rose Perrone Points 14478

Enlevez juste le fade de la div modale.

Plus précisément, le changement :

<div class="modal fade hide">

à :

<div class="modal hide">

UPDATE : Pour bootstrap3, le hide n'est pas nécessaire.

0 votes

Sérieusement, c'est la vraie réponse... Allez, S.O. !

9 votes

Cependant, l'OP a demandé comment le faire disparaître, donc certaines de ces réponses sont correctes pour la formation alternative de la question. Je suppose que c'est juste une mauvaise question parce que c'est vraiment deux questions en une et que personne n'a répondu aux deux questions en une seule réponse.

0 votes

Bonjour à tous, cela fait un moment que je n'ai pas consulté cette réponse, je viens de la remplacer par celle-ci.

36voto

Andres Ilich Points 41712

Les modales utilisées par le bootstrap utilisent CSS3 pour fournir les effets et ils peuvent être supprimés en éliminant les classes appropriées du div conteneur des modales :

<div class="modal hide fade in" id="myModal">
   ....
</div>

Comme vous pouvez le voir, cette modale a une classe de .fade ce qui signifie qu'il est réglé pour s'intégrer dans le paysage et .in ce qui signifie qu'il se glissera à l'intérieur. Il suffit donc de supprimer la classe liée à l'effet que vous souhaitez supprimer, ce qui dans votre cas est juste le .in classe.

Edit : Je viens d'effectuer quelques tests et il apparaît que ce n'est pas le cas, les .in est ajoutée par javascript, bien que vous puissiez modifier le comportement du slideDown avec css comme suit :

.modal.fade {
    -webkit-transition: none;
    -moz-transition: none;
    -ms-transition: none;
    -o-transition: none;
    transition: none;
}

Démo

2 votes

Vous devriez également l'ajouter à la toile de fond : modal.fade, .modal-backdrop.fade etc...

0 votes

Il est probablement préférable de modifier le fichier component-animations.less, pour la raison que David mentionne.

0 votes

La classe fade est optionnelle, il y a une meilleure (et préférable selon la documentation BS) réponse par Rose ci-dessous

30voto

lorem monkey Points 1205

Si vous préférez que la modale s'ouvre en fondu plutôt qu'en glissant (pourquoi est-elle appelée .fade ) vous pouvez écraser la classe dans votre fichier CSS ou directement dans bootstrap.css avec ça :

.modal.fade{
    -webkit-transition: opacity .2s linear, none;
    -moz-transition: opacity .2s linear, none;
    -ms-transition: opacity .2s linear, none;
    -o-transition: opacity .2s linear, none;
    transition: opacity .2s linear, none;
    top: 50%;
}

Si vous ne voulez pas d'effet, il suffit d'enlever l'option fade des classes modales.

1 votes

Le site haut : 50% semble causer des problèmes lorsque la boîte de dialogue se ferme. La boîte de dialogue semble s'ouvrir au même endroit qu'auparavant, mais juste avant la fermeture, elle se déplace vers le centre pendant une fraction de seconde, puis se ferme. Du moins dans Chrome. Quelqu'un d'autre a-t-il remarqué ce problème ?

1 votes

@lorem monkey - merci, je voulais le fondu mais pas le slide. Si quelqu'un veut la version scss/compass... .modal.fade {@include transition(opacity .2s linear, none);}

1 votes

@mohitp Au lieu de "top : 50%", j'utilise "top : 25%". J'ai également ajouté .modal.fade.in { top : 25% ; }. Il semble que cela ait fonctionné pour moi. Je ne suis pas certain de savoir pourquoi cela fonctionne puisque je n'ai pas la classe "in" dans ma modale.

18voto

Alex Bain Points 538

J'ai résolu ce problème en remplaçant la valeur par défaut de la fonction .modal.fade dans ma propre feuille de style LESS :

.modal {
  &.fade {
    .transition(e('opacity .3s linear'));
    top: 50%;
  }
  &.fade.in { top: 50%; }
}

Cela permet de conserver l'animation du fondu en entrée et en sortie mais de supprimer l'animation du glissement vers le haut et vers le bas.

0 votes

Merci. J'ai fini par utiliser 10% au lieu de 50%, et j'ai réduit la transition de 0,3s à 0,25s, ce qui me semble un peu plus doux.

0 votes

Ouvrir et fermer une modale plusieurs fois la fait remonter dans la page au fil du temps.

11voto

viggity Points 5342

Je n'ai pas aimé non plus l'effet de glissement. Pour remédier à cela, il suffit de faire en sorte que l'option top est le même pour .modal.fade et modal.fade.in. Vous pouvez retirer l'attribut top 0.3s ease-out dans les transitions aussi, mais ça ne fait pas de mal de le laisser. J'aime cette approche parce que le fondu en entrée/sortie fonctionne, ça tue juste la diapositive. .

.modal.fade {
  top: 20%;
  -webkit-transition: opacity 0.3s linear;
     -moz-transition: opacity 0.3s linear;
       -o-transition: opacity 0.3s linear;
          transition: opacity 0.3s linear;
}

.modal.fade.in {
  top: 20%;
}

Si vous cherchez une réponse à bootstrap 3, regardez ici

1 votes

Les deux premiers exemples non-LESS ci-dessus négligent la déclaration ".modal.fade.in", qui fait sauter un peu la modale à la fermeture. Celui-ci fonctionne parfaitement. Le voici en pratique : jsfiddle.net/dkrape/4EwFq

0 votes

Cela fonctionne en grande partie, mais je vois une ligne horizontale bleu vif apparaître (dans tous les Safari, Firefox et Chrome) à environ 32px au-dessus de ma modale lorsqu'elle apparaît.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X