Comment puis-je empêcher le corps scrollbar et le déplacement lorsque le Dialogue modal bootstrap twitter est chargé?
quand j'ouvre le Dialogue modal bootstrap twitter, la toile de fond provoque une barre de défilement et déplace le contenu.
Pour éviter la barre de défilement-je utiliser ce css:
.modal {
overflow: hidden;
}
Mais je ne peux pas éviter le passage.
ce qui concerne, Marko
j'utilise Bootstrap Version 3
11 réponses
Marko,
je viens d'avoir le même problème. Il semble que Bootstrap 3.0.0 ajoute une classe <body>
,modal-open
lorsque le modal première montre. Cette classe ajoute margin-right: 15px
au corps pour rendre compte d'une barre de défilement, qui est là sur des pages plus longues. C'est génial, sauf pour les pages plus courtes quand une barre de défilement n'est pas sur le corps. Dans le cas no scrollbar, la marge droite provoque le déplacement du corps à gauche sur modal open.
j'ai pu résoudre cela en ajoutant quelques courtes Javascript et un peu de CSS:
CSS:
/* override bootstrap 3 class to remove scrollbar from modal backdrop
when not necessary */
.modal {
overflow-y: auto;
}
/* custom class to override .modal-open */
.modal-noscrollbar {
margin-right: 0 !important;
}
JS:
(function($) {
$(document)
.on( 'hidden.bs.modal', '.modal', function() {
$(document.body).removeClass( 'modal-noscrollbar' );
})
.on( 'show.bs.modal', '.modal', function() {
// Bootstrap adds margin-right: 15px to the body to account for a
// scrollbar, but this causes a "shift" when the document isn't tall
// enough to need a scrollbar; therefore, we disable the margin-right
// when it isn't needed.
if ( $(window).height() >= $(document).height() ) {
$(document.body).addClass( 'modal-noscrollbar' );
}
});
})(window.jQuery);
ceux-ci combinés permettent au correctif de marge-barre de défilement droit de fonctionner pour les longues pages, mais est désactivé pour les pages plus courtes (lorsque la hauteur du document <= hauteur de la fenêtre). J'espère que cela aide!
Bootstrap 3.0.1+ (testé jusqu'à 3.1.1) est une autre histoire. Essayez le suivantes:
CSS:
/* override bootstrap 3 class to remove scrollbar from modal backdrop
when not necessary */
.modal {
overflow-y: auto;
}
/* custom class to add space for scrollbar */
.modal-scrollbar {
margin-right: 15px;
}
JS:
(function($) {
$(document)
.on( 'hidden.bs.modal', '.modal', function() {
$(document.body).removeClass( 'modal-scrollbar' );
})
.on( 'show.bs.modal', '.modal', function() {
// Bootstrap's .modal-open class hides any scrollbar on the body,
// so if there IS a scrollbar on the body at modal open time, then
// add a right margin to take its place.
if ( $(window).height() < $(document).height() ) {
$(document.body).addClass( 'modal-scrollbar' );
}
});
})(window.jQuery);
EDIT:
à la lumière de Mac éliminant les barres de défilement d'habiter la largeur de rendu de fenêtre, voici une solution plus portable (3.0.1+) si vous n'avez pas d'objection à une détection de fonctionnalité. Référence: http://davidwalsh.name/detect-scrollbar-width
CSS:
.scrollbar-measure {
height: 100px;
overflow: scroll;
position: absolute;
top: -9999px;
}
JS:
window.jQuery(function() {
// detect browser scroll bar width
var scrollDiv = $('<div class="scrollbar-measure"></div>')
.appendTo(document.body)[0],
scrollBarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
$(document)
.on('hidden.bs.modal', '.modal', function(evt) {
// use margin-right 0 for IE8
$(document.body).css('margin-right', '');
})
.on('show.bs.modal', '.modal', function() {
// When modal is shown, scrollbar on body disappears. In order not
// to experience a "shifting" effect, replace the scrollbar width
// with a right-margin on the body.
if ($(window).height() < $(document).height()) {
$(document.body).css('margin-right', scrollBarWidth + 'px');
}
});
});
css:
body {
padding-right:0px !important;
margin-right:0px !important;
}
body.modal-open {
overflow: auto;
}
stylet:
body
padding-right:0px !important
margin-right:0px !important
&.modal-open
overflow: auto
le Mien est facile, il est là (CSS):
body {
padding-right:0px !important;
margin-right:0px !important;
}
le fait est que Le !important est le chevauchement bootstrap de changer le rembourrage et la marge avec la classe modale-ouverte et les styles.
j'ai eu le même problème avec la barre de défilement disparaissant, et le corps se déplaçant vers la gauche lors de l'ouverture d'un bootstrap modal.
j'ai trouvé une solution facile:
.modal
{
overflow-y: auto !important;
}
.modal-open
{
overflow:auto !important;
overflow-x:hidden !important;
padding-right: 0 !important;
}
Bonne chance à tous!
body {
/*prevent modal background jumping*/
padding-right:0px !important;
margin-right:0px !important;
}
/*prevent modal background jumping*/
body.modal-open {
overflow: auto;
}
la meilleure façon est:
- pour les ajouter à CORPS overflow-y: scroll
- et supprimer 4 fonctions de bootstrap.js:
checkScrollbar
,setScrollbar
,resetScrollbar
etmeasureScrollbar
.
j'ai ajouté ceci à mon CSS et cela a semblé fonctionner lors de l'ajout d'une superposition 'fixe' pour voir
.modal-open {
margin-right: 15px;
}
Vous devriez essayer ceci. cela fonctionne bien.
$j(document).ready(function() {
$('.modal').on('show.bs.modal', function () {
if ($(document).height() <= $(window).height()) {
$('body').css('margin-right','0','!important');
}
else {
$('body').removeAttr('style');
}
})
$('.modal').on('hide.bs.modal', function () {
$('body').removeAttr('style');
})
})
essayez ce javascript simple:
$j(document).ready(function() {
if ($(document).height() <= $(window).height()) {
$('body').css('margin-right','0','!important');
}
});
La suite de l'inclusion de mon .le fichier css a corrigé ma page de contenu centrée à partir du déplacement ou du redimensionnement lorsque le modal popup s'affiche.
Je n'avais pas besoin de Javascript, juste le code css ci-dessous. Cela le fixe pour le contenu avec ou sans une barre de défilement verticale ou horizontale.
.modal
{
overflow-y: auto !important;
}
.modal-open {
overflow: auto !important;
overflow-x: hidden !important;
padding-right: 15px !important;
}
j'utilise bootstrap 3.3.7.