sco*_*ord 261 css center modal-dialog twitter-bootstrap
这是一个两部分问题:
当您不知道模态的确切高度时,如何将模态垂直放置在中心?
是否有可能让模态居中并且在模态体中有溢出:auto,但仅当模态超过屏幕高度时?
我试过用这个:
.modal-dialog {
height: 80% !important;
padding-top:10%;
}
.modal-content {
height: 100% !important;
overflow:visible;
}
.modal-body {
height: 80%;
overflow: auto;
}
Run Code Online (Sandbox Code Playgroud)
当内容比垂直屏幕尺寸大得多时,这给了我所需的结果,但对于小模态内容,它几乎无法使用.
小智 367
.modal {
text-align: center;
}
@media screen and (min-width: 768px) {
.modal:before {
display: inline-block;
vertical-align: middle;
content: " ";
height: 100%;
}
}
.modal-dialog {
display: inline-block;
text-align: left;
vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)
并调整一点.fade类,以确保它出现在窗口的顶部边框之外,而不是中心
dim*_*lmh 141
1.当您不知道模态的确切高度时,如何将模态垂直放置在中心?
要在不声明高度的情况下绝对居中Bootstrap 3 Modal,首先需要通过将其添加到样式表来覆盖Bootstrap CSS:
.modal-dialog-center { /* Edited classname 10/03/2014 */
margin: 0;
position: absolute;
top: 50%;
left: 50%;
}
Run Code Online (Sandbox Code Playgroud)
这会将模态对话框的左上角定位在窗口的中心.
我们必须添加此媒体查询,否则模式margin-left在小型设备上是错误的:
@media (max-width: 767px) {
.modal-dialog-center { /* Edited classname 10/03/2014 */
width: 100%;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们需要用JavaScript调整它的位置.为此,我们给元素一个负的顶部和左边距等于其高度和宽度的一半.在这个例子中,我们将使用jQuery,因为它可以与Bootstrap一起使用.
$('.modal').on('shown.bs.modal', function() {
$(this).find('.modal-dialog').css({
'margin-top': function () {
return -($(this).outerHeight() / 2);
},
'margin-left': function () {
return -($(this).outerWidth() / 2);
}
});
});
Run Code Online (Sandbox Code Playgroud)
.modal {
text-align: center;
padding: 0!important;
}
.modal:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
margin-right: -4px; /* Adjusts for spacing */
}
.modal-dialog {
display: inline-block;
text-align: left;
vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)
注意负边际权利?这将删除内联块添加的空间.该空间导致模态跳转到页面底部@media width <768px.
2.是否可以使模态居中并且在模态体中具有溢出:自动,但仅当模态超过屏幕高度时?
这可以通过给模态体提供overflow-y:auto和max-height来实现.这需要更多的工作才能使其正常工作.首先将其添加到样式表中:
.modal-body {
overflow-y: auto;
}
.modal-footer {
margin-top: 0;
}
Run Code Online (Sandbox Code Playgroud)
我们将再次使用jQuery来获取窗口高度并首先设置模态内容的最大高度.然后我们必须通过使用modal-header和modal-footer减去模态内容来设置模态体的最大高度:
$('.modal').on('shown.bs.modal', function() {
var contentHeight = $(window).height() - 60;
var headerHeight = $(this).find('.modal-header').outerHeight() || 2;
var footerHeight = $(this).find('.modal-footer').outerHeight() || 2;
$(this).find('.modal-content').css({
'max-height': function () {
return contentHeight;
}
});
$(this).find('.modal-body').css({
'max-height': function () {
return (contentHeight - (headerHeight + footerHeight));
}
});
$(this).find('.modal-dialog').css({
'margin-top': function () {
return -($(this).outerHeight() / 2);
},
'margin-left': function () {
return -($(this).outerWidth() / 2);
}
});
});
Run Code Online (Sandbox Code Playgroud)
你可以在这里找到一个使用Bootstrap 3.0.3的工作演示:http://cdpn.io/GwvrJ
编辑:我建议使用更新版本来获得更具响应性的解决方案:http://cdpn.io/mKfCc
function setModalMaxHeight(element) {
this.$element = $(element);
this.$content = this.$element.find('.modal-content');
var borderWidth = this.$content.outerHeight() - this.$content.innerHeight();
var dialogMargin = $(window).width() < 768 ? 20 : 60;
var contentHeight = $(window).height() - (dialogMargin + borderWidth);
var headerHeight = this.$element.find('.modal-header').outerHeight() || 0;
var footerHeight = this.$element.find('.modal-footer').outerHeight() || 0;
var maxHeight = contentHeight - (headerHeight + footerHeight);
this.$content.css({
'overflow': 'hidden'
});
this.$element
.find('.modal-body').css({
'max-height': maxHeight,
'overflow-y': 'auto'
});
}
$('.modal').on('show.bs.modal', function() {
$(this).show();
setModalMaxHeight(this);
});
$(window).resize(function() {
if ($('.modal.in').length != 0) {
setModalMaxHeight($('.modal.in'));
}
});
Run Code Online (Sandbox Code Playgroud)
(2015年3月30日更新http://cdpn.io/mKfCc以上编辑)
Bri*_*kim 37
我的解决方案
.modal-dialog-center {
margin-top: 25%;
}
<div id="waitForm" class="modal">
<div class="modal-dialog modal-dialog-center">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 id="headerBlock" class="modal-title"></h4>
</div>
<div class="modal-body">
<span id="bodyBlock"></span>
<br/>
<p style="text-align: center">
<img src="@Url.Content("~/Content/images/progress-loader.gif")" alt="progress"/>
</p>
</div>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
Mo.*_*Mo. 25
它可以简单地修复 display: flex
.modal-dialog {
margin-top: 0;
margin-bottom: 0;
height: 100vh;
display: flex;
flex-direction: column;
justify-content: center;
}
.modal.fade .modal-dialog {
transform: translate(0, -100%);
}
.modal.in .modal-dialog {
transform: translate(0, 0);
}
Run Code Online (Sandbox Code Playgroud)
带前缀
.modal-dialog {
margin-top: 0;
margin-bottom: 0;
height: 100vh;
display: -webkit-box;
display: -webkit-flex;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-webkit-flex-direction: column;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-pack: center;
-webkit-justify-content: center;
-ms-flex-pack: center;
justify-content: center;
}
.modal.fade .modal-dialog {
-webkit-transform: translate(0, -100%);
transform: translate(0, -100%);
}
.modal.in .modal-dialog {
-webkit-transform: translate(0, 0);
transform: translate(0, 0);
}
Run Code Online (Sandbox Code Playgroud)
sco*_*ord 21
我想出了一个纯粹的CSS解决方案!这是css3虽然,这意味着ie8或更低版本不受支持,但除此之外,它已经过ios,android,ie9 +,chrome,firefox,桌面游戏等测试和工作.
我使用以下css:
.modal-dialog {
position:absolute;
top:50% !important;
transform: translate(0, -50%) !important;
-ms-transform: translate(0, -50%) !important;
-webkit-transform: translate(0, -50%) !important;
margin:auto 5%;
width:90%;
height:80%;
}
.modal-content {
min-height:100%;
position:absolute;
top:0;
bottom:0;
left:0;
right:0;
}
.modal-body {
position:absolute;
top:45px; /** height of header **/
bottom:45px; /** height of footer **/
left:0;
right:0;
overflow-y:auto;
}
.modal-footer {
position:absolute;
bottom:0;
left:0;
right:0;
}
Run Code Online (Sandbox Code Playgroud)
这是一个小提琴. http://codepen.io/anon/pen/Hiskj
..选择这个作为正确的答案,因为没有额外的重javascript,如果有多个模态,浏览器就会瘫痪.
xia*_*lin 19
如果您对使用flexbox没问题,那么这应该有助于解决它.
.modal-dialog {
height: 100%;
width: 100%;
display: flex;
align-items: center;
}
.modal-content {
margin: 0 auto;
}
Run Code Online (Sandbox Code Playgroud)
Vad*_*dim 19
我的解决方案
.modal.in .modal-dialog
{
-webkit-transform: translate(0, calc(50vh - 50%));
-ms-transform: translate(0, 50vh) translate(0, -50%);
-o-transform: translate(0, calc(50vh - 50%));
transform: translate(0, 50vh) translate(0, -50%);
}
Run Code Online (Sandbox Code Playgroud)
Moe*_*oes 16
在我的例子中,我所做的就是在知道模态高度的情况下设置我的CSS中的Top
<div id="myModal" class="modal fade"> ... </div>
在我的CSS我设置
#myModal{
height: 400px;
top: calc(50% - 200px) !important;
}
Run Code Online (Sandbox Code Playgroud)
roo*_*oo2 11
扩展@Finik的优秀答案,此修复程序仅适用于非移动设备.我在IE8,Chrome和Firefox 22中进行了测试 - 它适用于很长或很短的内容.
.modal {
text-align: center;
}
@media screen and (min-device-width: 768px) {
.modal:before {
display: inline-block;
vertical-align: middle;
content: " ";
height: 100%;
}
}
.modal-dialog {
display: inline-block;
text-align: left;
vertical-align: middle;
}
Run Code Online (Sandbox Code Playgroud)
Dar*_*rer 11
使用css有一种最简单的方法:
.modal-dialog {
position: absolute;
left: 0;
right: 0;
top: 0;
bottom: 0;
margin: auto;
width:500px;
height:300px;
}
Run Code Online (Sandbox Code Playgroud)
而已.请注意,它只需要应用于.modal-dialog容器div.
演示:https://jsfiddle.net/darioferrer/0ueu4dmy/
小智 8
我写的最通用的解决方案.Dynamicaly计算对话框高度.(下一步可能是在窗口调整大小时重新计算对话框的高度.)
JSfiddle:http://jsfiddle.net/8Fvg9/3/
// initialise on document ready
jQuery(document).ready(function ($) {
'use strict';
// CENTERED MODALS
// phase one - store every dialog's height
$('.modal').each(function () {
var t = $(this),
d = t.find('.modal-dialog'),
fadeClass = (t.is('.fade') ? 'fade' : '');
// render dialog
t.removeClass('fade')
.addClass('invisible')
.css('display', 'block');
// read and store dialog height
d.data('height', d.height());
// hide dialog again
t.css('display', '')
.removeClass('invisible')
.addClass(fadeClass);
});
// phase two - set margin-top on every dialog show
$('.modal').on('show.bs.modal', function () {
var t = $(this),
d = t.find('.modal-dialog'),
dh = d.data('height'),
w = $(window).width(),
h = $(window).height();
// if it is desktop & dialog is lower than viewport
// (set your own values)
if (w > 380 && (dh + 60) < h) {
d.css('margin-top', Math.round(0.96 * (h - dh) / 2));
} else {
d.css('margin-top', '');
}
});
});
Run Code Online (Sandbox Code Playgroud)
这是相当古老的,特别要求使用 Bootstrap 3 的解决方案,但对于任何想知道的人:从 Bootstrap 4 开始,有一个名为 的内置解决方案.modal-dialog-centered。这是问题:https://github.com/twbs/bootstrap/issues/23638
因此,使用 v4 你只需添加.modal-dialog-centeredto即可.modal-dialog使模态垂直居中:
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModalCenter">
Launch demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="exampleModalCenter" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalCenterTitle">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
添加此简单的CSS也可以。
.modal-dialog {
height: 100vh !important;
display: flex;
}
.modal-content {
margin: auto !important;
height: fit-content !important;
}
Run Code Online (Sandbox Code Playgroud)
从这里找到完美的解决方案
$(function() {
function reposition() {
var modal = $(this),
dialog = modal.find('.modal-dialog');
modal.css('display', 'block');
// Dividing by two centers the modal exactly, but dividing by three
// or four works better for larger screens.
dialog.css("margin-top", Math.max(0, ($(window).height() - dialog.height()) / 2));
}
// Reposition when a modal is shown
$('.modal').on('show.bs.modal', reposition);
// Reposition when the window is resized
$(window).on('resize', function() {
$('.modal:visible').each(reposition);
});
});
Run Code Online (Sandbox Code Playgroud)