Comment faire pour activer le défilement de contenu à l'intérieur d'un modal?
Je vais essayer de répondre à beaucoup de texte dans une modal box créé à l'aide de Twitter Bootstrap, mais je vais avoir un problème: que le contenu refuse de défiler.
J'ai essayé d'ajouter overflow:scroll
et overflow-y:scroll
, mais en vain; que provoque simplement d'afficher une barre de défilement sans activation de la vitesse de défilement.
Quelle est la raison derrière cela et que puis-je faire?
- Un collègue a gentiment suggéré de chercher
body {overflow-y:scroll}
et de le remplacer avechtml {overflow: scroll;}
. Cela a réglé le problème pour nous.
Vous devez vous connecter pour publier un commentaire.
Dans Le Bootstrap.css modifier l'attribut background (
position
) de Modal defixed
àabsolute
<div background="absolute"
je suppose que vous voulez dire style, mais même alors, il n'est pas "fixe" de la valeur pour le style d'arrière-plan,{ background-position:fixed }
n'est pas valide.$.support.transition = false
au lieu de cela rend le défilement fonctionne comme prévu, mais il n'y a pas de transitions :-/.modal {overflow-y: scroll}
Dans le Bootstrap 3, vous devez modifier le
css
classe.modal
avant (bootstrap par défaut) :
après (après modification):
Cette réponse a en fait deux parties, une UX d'avertissement, et un solution réelle.
UX d'Avertissement
Si votre modal contient tellement qu'il a besoin de faire défiler, demandez-vous si vous devriez être à l'aide d'un modal à tous. La taille de l'amorçage modal par défaut est une assez bonne contrainte sur la quantité d'information visuelle doit s'adapter. En fonction de ce que vous faites, vous pouvez plutôt opter pour une nouvelle page ou un assistant.
Solution Réelle
Est ici: http://jsfiddle.net/ajkochanowicz/YDjsE/2/
Cette solution vous permettra également de modifier la hauteur de
.modal
et ont la.modal-body
prendre le reste de l'espace avec une barre de défilement verticale si nécessaire.Mise à JOUR
Noter que dans le Bootstrap 3, le modal a été remaniée pour mieux gérer débordant de contenu. Vous serez en mesure de faire défiler le modal lui-même en haut et en bas comme il coule sous la fenêtre d'affichage.
list-group
permettant à l'utilisateur de sélectionner l'un des 10 options affichées sur un mobile dans le paysage, une meilleure solution serait d'avoir lamodal-content
défiler, je n'ai pas vu de solution universelle qui fonctionne bien sur tous les appareils.Si je me souviens bien, le réglage overflow:hidden sur le corps ne fonctionne pas sur tous les navigateurs, j'ai été le tester pour un modal de la bibliothèque que j'ai construit pour un site mobile. Plus précisément, j'ai eu du mal à empêcher le corps de défilement en plus de la modale de défilement même quand je mets overflow:hidden sur le corps.
Pour mon site, j'ai fini par faire quelque chose comme cela. Qu'il est fondamentalement juste les magasins de votre position de défilement en outre la définition de "dépassement" de "caché" sur la page du corps, puis restaure la position de défilement après le modal ferme. Il y a une condition pour quand un autre bootstrap modale s'ouvre alors que l'on est déjà active. Sinon, le reste du code doivent être explicites. Notez que si le overflow:hidden sur le corps n'est pas d'empêcher la fenêtre de défilement pour un navigateur donné, ce qui définit l'origine de défilement emplacement de retour à la sortie.
Si vous n'aimez pas cela, l'autre option consisterait à attribuer à un max-height et overflow:auto .modale du corps comme:
Dans ce cas, vous pouvez configurer le max de hauteur pour différentes tailles d'écran et de laisser le overflow:auto pour les différentes tailles d'écran. Vous devez assurez-vous que le modal en-tête, pied de page, et le corps ne pas ajouter de plus que la taille de l'écran, alors je dirais que la partie dans vos calculs.
Régler la hauteur pour
modal-body
et non pour l'ensemble de modal pour obtenir un parfait de défilement sur la superposition modale. Je reçois ce travail comme ceci:Ici, vous pouvez régler la hauteur selon vos besoins.
height: auto;
fonctionne aussi, mais modale de la hauteur est réglée sur auto de toute façon, alors, vraiment tout ce que vous avez besoin est laoverflow-y: auto;
. J'ai également appliqué à la.modal
au lieu de choisir un seul. De nombreux tests montrent qu'il a travaillé sur tous les modal jusqu'à présent.C'est la façon dont je l'ai fait uniquement avec du CSS primordial de certaines classes:
Espère que cela vous aide.
Less CSS
, pas purCSS
.Lors de l'utilisation de Bootstrap modal avec skrollr, le modal deviendra pas être déplacé.
Problème fixe avec l'arrêt de l'événement tactile de se propager.
plus de détails à
Ajouter un événement scroll à l'élément à l'intérieur de #skrollr-corps
Fait pour Bootstrap 3 vous devez également remplacer la .modal-classe ouverte sur le corps.
Je vais avoir ce problème sur Safari Mobile sur mon iPhone6
Bootstrap ajoute la classe
.modal-open
pour le corps quand un modal est ouvert.J'ai essayé de rendre minimale de remplacements de Bootstrap 3.2.0, et est venu avec les éléments suivants:
Pour la comparaison, j'ai inclus les associés Bootstrap styles ci-dessous.
Sélectionnée extrait de bootstrap/moins/modals.moins (ne pas les inclure dans votre fix):
Mobile Safari version utilisée:
User-Agent Mozilla/5.0 (iPhone; CPU iPhone OS 8_1 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Version/8.0 Mobile/12B411 Safari/600.1.4
J'ai eu le même problème, et trouvé un fix comme ci-dessous:
100% de travail.
ça fonctionne pour moi
Après l'utilisation de toutes ces solution mentionnée, je n'étais pas encore capable de faire défiler à l'aide de défilement de la souris, le clavier, les touches up/down, ont travaillé pour le défilement de contenu.
Donc, j'ai ajouté ci-dessous css fixe pour qu'il fonctionne
Ajouté pointeur-événements: auto; à faire de défilement de la souris.
J'ai été en mesure de surmonter ce à l'aide de la "vh" métrique avec max-hauteur de sur le .modale de l'élément de corps. 70vh regarda droit pour mes utilisations.
Bootstrap permettra d'ajouter ou de supprimer un css
"modal-open"
à la<body>
balise lorsque nous ouvrir ou de fermer la modale. Donc, si vous ouvrez plusieurs modal et puis fermez arbitraire, le modal-ouvrir css sera retiré de la balise body.Mais le défilement de l'effet dépend de l'attribut
"overflow-y: auto;"
défini dansmodal-open
Solution 1: Vous pouvez déclarer
.modal{ overflow-y:auto}
ou.modal-open .modal{ overflow-y:auto}
si vous utilisez en dessous de 3v de bootstrap (pour le haut des versions, il est déjà déclarée).Bootstrap ajoute
modal-open
classe debody
afin de supprimer les barres de défilement dans le cas modal est montré, mais ne pas ajouter de classe àhtml
qui peut aussi avoir des barres de défilement, comme un résultat de la barre de défilement dehtml
parfois peut être trop visible, de le retirer, vous devez définir modal afficher/masquer événements et ajouter/supprimer desoverflow:hidden
surhtml
. Ici comment le faire.Solution 2: Comme modale possède des fonctionnalités clés, la meilleure façon de gérer cela est de fixer la hauteur de la ou encore mieux connecter la hauteur de modal avec la hauteur de la fenêtre d'affichage comme celui -
Avec cette méthode, vous n'avez pas à gérer
body
ethtml
les barres de défilement.Note 1: Navigateur soutien pour
vh
unités.Note 2: Comme il est proposé ci-dessus. Si vous modifiez
.modal{position:fixed}
à.modal{position:absolute}
, mais dans le cas où la page a plus de hauteur que le modal utilisateur peut faire défiler trop de place et modal disparaîtra de la fenêtre d'affichage, ce n'est pas bon pour l'expérience utilisateur.