Twitter bootstrap=モーダルダイアログを開くと、背景にスクロールバーが表示され、コンテンツがシフトされます。
スクロールバーを避けるために、私はこのCSSを使用します:
.modal {
overflow: hidden;
}
しかし、私はシフトを避けることはできません。
よろしく、マルコ
Bootstrapバージョン3を使用しています
マルコ、
私はちょうど同じ問題を抱えていました。 Bootstrap3.0.0は<body>
、modal-open
、このクラスは、長いページにあるスクロールバーを説明するために、ボディにmargin-right: 15px
を追加します。これは、スクロールバーがボディにない場合の短いページを除いて素晴らしいことです。スクロールバーを使用しない場合、マージンを右にすると、モーダルを開いたときにボディが左に移動します。
いくつかの短いJavascriptと少しの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);
これらの組み合わせにより、右端のスクロールバーの修正は長いページで機能しますが、短いページでは無効になります(ドキュメントの高さ<=ウィンドウの高さの場合)。これがお役に立てば幸いです!
ブートストラップ3.0.1+(3.1.1までテスト済み)は別の話です。以下を試してください:
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 [〜#〜]:
Macがウィンドウレンダリングの幅からスクロールバーを排除することを考慮して、機能の検出を気にしない場合は、よりポータブルなソリューション(3.0.1以降)を使用します。リファレンス: 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');
}
});
});
私にとっては、2つの答えの組み合わせだけが機能しました。
css:
body {
padding-right:0px !important;
margin-right:0px !important;
}
body.modal-open {
overflow: auto;
}
スタイラス:
body
padding-right:0px !important
margin-right:0px !important
&.modal-open
overflow: auto
これを試して
body.modal-open {
overflow: auto;
}
私の場合は簡単です(CSSのみ):
body {
padding-right:0px !important;
margin-right:0px !important;
}
実際、!importantは、bootstrapモーダルオープンクラスとスタイルでパディングとマージンを変更することで重複しています。
bootstrap modal。
私は簡単な修正を見つけました:
.modal
{
overflow-y: auto !important;
}
.modal-open
{
overflow:auto !important;
overflow-x:hidden !important;
padding-right: 0 !important;
}
皆さんお元気で!
body {
/*prevent modal background jumping*/
padding-right:0px !important;
margin-right:0px !important;
}
/*prevent modal background jumping*/
body.modal-open {
overflow: auto;
}
このシンプルなjavascriptを試してください:
$j(document).ready(function() {
if ($(document).height() <= $(window).height()) {
$('body').css('margin-right','0','!important');
}
});
最善の方法は次のとおりです。
checkScrollbar
、setScrollbar
、resetScrollbar
、およびmeasureScrollbar
の4つの関数を削除します。次の.cssファイルに含めることにより、ポップアップモーダルが表示されたときに中央のコンテンツページが移動したりサイズ変更されたりするのを修正しました。
Javascriptは必要なく、以下のCSSコードだけが必要でした。これにより、垂直または水平スクロールバーの有無にかかわらずコンテンツの問題が修正されました。
.modal
{
overflow-y: auto !important;
}
.modal-open {
overflow: auto !important;
overflow-x: hidden !important;
padding-right: 15px !important;
}
私はbootstrap 3.3.7。
これを試してみてください。これは正常に機能しています。
$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');
})
})
これをCSSに追加し、「固定」オーバーレイをビューに追加すると機能するように見えました
.modal-open {
margin-right: 15px;
}