J'ai besoin que la superposition s'affiche au-dessus du premier modal, pas à l'arrière.
J'ai essayé de changer le z-index
de .modal-backdrop
, mais cela devient un désordre.
Dans certains cas, j'ai plus de deux modaux sur la même page.
la source
J'ai besoin que la superposition s'affiche au-dessus du premier modal, pas à l'arrière.
J'ai essayé de changer le z-index
de .modal-backdrop
, mais cela devient un désordre.
Dans certains cas, j'ai plus de deux modaux sur la même page.
Après avoir vu de nombreux correctifs pour cela, et aucun d'entre eux n'était exactement ce dont j'avais besoin, j'ai trouvé une solution encore plus courte inspirée de @YermoLamers & @Ketwaroo.
Correction du z-index de Backdrop
Cette solution utilise un setTimeout
car le .modal-backdrop
n'est pas créé lorsque l'événement show.bs.modal
est déclenché.
$(document).on('show.bs.modal', '.modal', function () {
var zIndex = 1040 + (10 * $('.modal:visible').length);
$(this).css('z-index', zIndex);
setTimeout(function() {
$('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack');
}, 0);
});
.modal
créé sur la page (même les modaux dynamiques)Si vous n'aimez pas le z-index codé en dur pour une raison quelconque, vous pouvez calculer le z-index le plus élevé de la page comme ceci:
var zIndex = Math.max.apply(null, Array.prototype.map.call(document.querySelectorAll('*'), function(el) {
return +el.style.zIndex;
})) + 10;
Correction de la barre de défilement
Si vous avez un modal sur votre page qui dépasse la hauteur du navigateur, vous ne pouvez pas le faire défiler lors de la fermeture d'un deuxième modal. Pour résoudre ce problème, ajoutez:
$(document).on('hidden.bs.modal', '.modal', function () {
$('.modal:visible').length && $(document.body).addClass('modal-open');
});
Versions
Cette solution est testée avec bootstrap 3.1.0 - 3.3.5
.not(this)
à la deuxième ligne) pour le faire fonctionner avec bootstrap datepickervar zIndex = 1040 + (10 * $('.modal:visible').not(this).length);
Je me rends compte qu'une réponse a été acceptée, mais je suggère fortement de ne pas pirater bootstrap pour résoudre ce problème.
Vous pouvez facilement obtenir le même effet en accrochant les gestionnaires d'événements shown.bs.modal et hidden.bs.modal et en y ajustant le z-index.
Voici un exemple de travail
Un peu plus d'informations sont disponibles ici.
Cette solution fonctionne automatiquement avec des modaux empilés arbitrairement profondément.
Le code source du script:
la source
Une version plus courte basée sur la suggestion de Yermo Lamers, cela semble bien fonctionner. Même avec des animations de base comme un fondu entrant / sortant et même une rotation folle du journal batman. http://jsfiddle.net/ketwaroo/mXy3E/
la source
modal-open
classe sur l'élément body: jsfiddle.net/vkyjocynEn combinant la réponse d'A1rPun avec la suggestion de StriplingWarrior, j'ai trouvé ceci:
Fonctionne même pour les modaux dynamiques ajoutés après coup et supprime le problème de la deuxième barre de défilement. La chose la plus notable pour laquelle j'ai trouvé cela utile était l'intégration de formulaires dans des modaux avec des commentaires de validation des alertes Bootbox, car ceux-ci utilisent des modaux dynamiques et vous obligent donc à lier l'événement à un document plutôt qu'à un .modal, car cela ne l'attache qu'à l'existant. modaux.
Violon ici.
la source
J'ai créé un plugin Bootstrap qui intègre beaucoup d'idées publiées ici.
Démo sur Bootply: http://www.bootply.com/cObcYInvpq
Github: https://github.com/jhaygt/bootstrap-multimodal
Il résout également le problème avec les modaux successifs qui font que la toile de fond devient de plus en plus sombre. Cela garantit qu'une seule toile de fond est visible à un moment donné:
Le z-index du fond visible est mis à jour sur les événements
show.bs.modal
ethidden.bs.modal
:la source
Lors de la résolution de Stacking modals, la page principale fait défiler quand on est fermé, j'ai trouvé que les versions plus récentes de Bootstrap (au moins depuis la version 3.0.3) ne nécessitent aucun code supplémentaire pour empiler les modals.
Vous pouvez ajouter plus d'un modal (bien sûr avec un identifiant différent) à votre page. Le seul problème rencontré lors de l'ouverture de plus d'un modal est que la fermeture d'un modal supprime la
modal-open
classe du sélecteur de corps.Vous pouvez utiliser le code Javascript suivant pour rajouter le
modal-open
:Dans le cas où vous n'avez pas besoin de l'effet de fond pour le modal empilé, vous pouvez définir
data-backdrop="false"
.Version 3.1.1. fixe toile de fond modale Fix superposant barre de défilement du modal , mais la solution ci - dessus semble également fonctionner avec les versions antérieures.
la source
Enfin résolu. Je l'ai testé de nombreuses façons et fonctionne très bien.
Voici la solution pour quiconque a le même problème: Changez la fonction Modal.prototype.show (à bootstrap.js ou modal.js)
DE:
À:
C'est le meilleur moyen que j'ai trouvé: vérifiez combien de modaux sont ouverts et changez le z-index du modal et de l'arrière-plan à une valeur plus élevée.
la source
Si vous recherchez une solution Bootstrap 4, il existe une solution simple utilisant du CSS pur:
la source
Essayez d'ajouter ce qui suit à votre JS au démarrage
Explication:
Après avoir joué avec les attributs (en utilisant l'outil de développement de Chrome), j'ai réalisé que toute
z-index
valeur ci1031
- dessous mettrait les choses en arrière-plan.Ainsi , en utilisant les poignées d'événements modales de bootstrap je mis le
z-index
à1030
. Si#myModal2
s'affiche et réglez lez-index
retour sur1040
si#myModal2
est masqué.Démo
la source
Chaque fois que vous exécutez la fonction sys.showModal, incrémentez le z-index et définissez-le sur votre nouveau modal.
la source
La solution à cela pour moi était de NE PAS utiliser la classe "fade" sur mes divs modales.
la source
Aucune solution de script, en utilisant uniquement css étant donné que vous avez deux couches de modaux, définissez le 2ème modal sur un index z plus élevé
la source
Si vous souhaitez qu'un modal spécifique apparaisse au-dessus d'un autre modal ouvert, essayez d'ajouter le code HTML du modal supérieur après l'autre modal
div
.Cela a fonctionné pour moi:
la source
Ma solution pour bootstrap 4, fonctionnant avec une profondeur illimitée de modaux et un modal dynamique.
la source
Chaque modal doit recevoir un identifiant différent et chaque lien doit être ciblé vers un identifiant modal différent. Donc ça devrait être quelque chose comme ça:
la source
EDIT: Bootstrap 3.3.4 a résolu ce problème (et d'autres problèmes modaux) donc si vous pouvez mettre à jour votre bootstrap CSS et JS, ce serait la meilleure solution. Si vous ne pouvez pas mettre à jour la solution ci-dessous fonctionnera toujours et fera essentiellement la même chose que bootstrap 3.3.4 (recalculer et appliquer un remplissage).
Comme Bass Jobsen l'a souligné, les nouvelles versions de Bootstrap ont résolu le z-index. La classe modal-open et le padding-right étaient encore des problèmes pour moi mais ce script inspiré de la solution Yermo Lamers le résout. Déposez-le simplement dans votre fichier JS et profitez-en.
la source
Regarde ça! Cette solution a résolu le problème pour moi, quelques lignes CSS simples:
Voici un lien vers où je l'ai trouvé: Bootply Assurez-vous simplement que le .modual qui doit apparaître sur Top est le deuxième dans le code HTML, afin que CSS puisse le trouver comme "pair".
la source
travailler pour ouvrir / fermer les multi modaux
Démo
https://www.bootply.com/cObcYInvpq#
la source
Pour moi, ces règles scss simples fonctionnaient parfaitement:
Si ces règles font que le mauvais modal est en tête dans votre cas, changez l'ordre de vos divs modales, ou changez (impair) en (pair) dans scss ci-dessus.
la source
Voici quelques CSS utilisant des
nth-of-type
sélecteurs qui semblent fonctionner:Bootply: http://bootply.com/86973
la source
J'ai eu un scénario similaire, et après un peu de R&D, j'ai trouvé une solution. Bien que je ne sois pas génial en JS, j'ai quand même réussi à écrire une petite requête.
http://jsfiddle.net/Sherbrow/ThLYb/
la source
Ajouter une variable globale dans modal.js
// affiche la fonction à l'intérieur de la variable d'ajout - Modal.prototype.backdrop
la source
Les autres solutions n'ont pas fonctionné pour moi hors de la boîte. Je pense peut-être parce que j'utilise une version plus récente de Bootstrap (3.3.2) .... la superposition apparaissait au-dessus de la boîte de dialogue modale.
J'ai remanié un peu le code et commenté la partie qui ajustait le fond modal. Cela a résolu le problème.
En remarque, si vous souhaitez l'utiliser dans AngularJs, mettez simplement le code à l'intérieur de la méthode .run () de votre module.
la source
Malheureusement, je n'ai pas la réputation de commenter, mais il convient de noter que la solution acceptée avec la ligne de base codée en dur d'un z-index 1040 semble être supérieure au calcul zIndex qui tente de trouver le zIndex maximum rendu sur la page.
Il semble que certaines extensions / plugins reposent sur un contenu DOM de haut niveau, ce qui fait du calcul .Max un nombre tellement obscène qu'il ne peut plus incrémenter le zIndex. Il en résulte un modal où la superposition apparaît sur le modal de manière incorrecte (si vous utilisez les outils Firebug / Google Inspector, vous verrez un zIndex de l'ordre de 2 ^ n - 1)
Je n'ai pas été en mesure d'isoler la raison spécifique pour laquelle les différentes formes de Math.Max pour z-Index conduisent à ce scénario, mais cela peut arriver, et cela semblera unique à quelques utilisateurs. (Mes tests généraux sur la pile de navigation avaient ce code fonctionnant parfaitement).
J'espère que cela aide quelqu'un.
la source
Dans mon cas, le problème a été causé par une extension de navigateur qui inclut les fichiers bootstrap.js où l'événement show géré deux fois et deux
modal-backdrop
divs sont ajoutés, mais lors de la fermeture du modal, un seul d'entre eux est supprimé.Trouvé cela en ajoutant un point d'arrêt de modification de sous-arborescence à l'élément body dans chrome, et suivi de l'ajout des
modal-backdrop
divs.la source
la source
Mise à jour: 22.01.2019, 13.41 J'ai optimisé la solution par jhay, qui prend également en charge la fermeture et l'ouverture de boîtes de dialogue identiques ou différentes, par exemple lors du passage d'une donnée de détail à une autre en avant ou en arrière.
la source
Vérifiez le nombre de modaux et ajoutez la valeur à Backdrop en tant que z-index
la source