如何在页面上居中模式窗口?

Posted

技术标签:

【中文标题】如何在页面上居中模式窗口?【英文标题】:How to center a modal window on a page? 【发布时间】:2014-01-23 12:35:11 【问题描述】:

我正在尝试在浏览器页面中居中模式窗口。我只是想把它居中,这样它就可以响应所有的屏幕。

【问题讨论】:

试试这个...jsfiddle.net/9t3sn/4 【参考方案1】:

With position:absolute假设你的模态是300x300

.modal 
   width: 300px;
   height: 300px;
   position: absolute;
   left: 50%;
   top: 50%; 
   margin-left: -150px;
   margin-top: -150px;

使用 display:table 另一种方法是制作显示表

<div class="modal">
    <div class="body">
        <div class="content">
            Content goes here
        </div>
    </div>
</div>
<style>
    .modal display:table;
    .body display:table-cell; vertical-align:middle; text-align:center;
</style>

【讨论】:

left: 50%; 的问题是它没有考虑模态框本身的宽度。 然后你可以像这样玩弄上、左、右、下: .modal top:200px;左:100px;右:100px;底部:200px; 我不知道为什么这个答案还没有被接受。 left: 50%; margin-left: -(50% of width); 肯定是模态窗口的中心。【参考方案2】:

仅使用 css 将引导模式中心设置为任何大小的屏幕。

.modal 
  text-align: center;
  padding: 0!important;

.modal:before 
  content: '';
  display: inline-block;
  height: 100%;
  vertical-align: middle;
  margin-right: -4px;

.modal-dialog 
  display: inline-block;
  text-align: left;
  vertical-align: middle;

浏览器和屏幕兼容解决方案

【讨论】:

这是一个很好的解决方案,因为它适用于任何宽度或高度的模态。【参考方案3】:

在整页预览中试试这个

   .modal 
       width: 100px;
       height: 100px;
       margin:0 auto;
       display:table;
       position: absolute;
       left: 0;
       right:0;
       top: 50%; 
       border:1px solid;
       -webkit-transform:translateY(-50%);
       -moz-transform:translateY(-50%);
       -ms-transform:translateY(-50%);
       -o-transform:translateY(-50%);
       transform:translateY(-50%);
    
&lt;div class="modal"&gt;&lt;/div&gt;

【讨论】:

【参考方案4】:
.modal

position: fixed;
left: 50%;

【讨论】:

【参考方案5】:

如果模态容器如下:

<div id="containerDiv"> 
   <!--html modal -->
 </div>

添加css代码

#containerDiv
margin : 0 auto;

【讨论】:

注意:我需要确保不继承任何其他边距属性,例如“margin-left”“margin-right”并取消设置它们。【参考方案6】:

在向您展示模态时,您应该像大多数人通常那样使用display:flex 而不是block。然后:

<div class="modal" id="modal">
 <div class="modal-content">
  What you want !
 </div>
</div>

和 CSS :

.modal 
 width: 100%;
 height: 100%;

 justify-content: center;
 align-items: center;

记得在您的modal-content 中放置一个关闭按钮,因为屏幕上的其他元素将无法使用,因为modal div 覆盖了所有屏幕尺寸。

【讨论】:

【参考方案7】:

尝试了几乎所有的 CSS 选项,但终于有一些工作了:jQuery

setInterval(function()
     
         if($('#myModal').is(':visible')===true)
         
             $("body").addClass("modal-open");
             $('#myModal').css("display":"flex");
         
         else
         
             $("body").removeClass("modal-open");
             $('#myModal').css("display":"none");
         

     ,200);

这是 Bootstrap 中关于向 body 标签添加/删除类 modal-open 的基本错误,多年来一直在讨论,但到目前为止还没有可行的解决方案。

【讨论】:

【参考方案8】:

如果您想在窗口的中心显示模态,请按照以下步骤操作;

.modal 
  text-align: center;

.modal-dialog 
  display: flex;
  align-items: center;
  min-height: calc(100% - 0rem);
 

此外,通过更改 align-items & min-height,您可以将模态框定位在适当的位置。

【讨论】:

【参考方案9】:

如果您将模态内容置于模态的中心,则可以使用类似的内容。在这里 top: 50% 意味着内容的开始将从顶部开始 50% (注意:这里 50% 是相对于容器高度的值,而不是它自己的)这不会使我们的内容中心但是当我们翻译时(-50 %,-50%) 那么元素将从它的开始向上遍历 50%(注意:这里 -50% 是相对于它自己的高度而不是容器的高度的值)

.modal 
  position: fixed;
  background-color: rgba(0, 0, 0, 0.75);
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
  transition: all 0.3s;

.modal-content 
  background-color: white;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  padding: 2% 7%;
  border-radius: 0.5rem;

【讨论】:

【参考方案10】:

你可以使用 bootstrap 4 center modal

Vertically centered modal

【讨论】:

这个答案没有考虑到解决方案可能不希望依赖于库

以上是关于如何在页面上居中模式窗口?的主要内容,如果未能解决你的问题,请参考以下文章

无论页面大小如何,都将标题图像居中

如何在 C# 中将窗口居中显示在屏幕上?

JS中如何让弹出页面居中且随页面的滚动而滚动?效果请参阅豆瓣。

如何使窗口适合其内容并将其居中放置在 Sciter 的屏幕上?

如何让DIV里面的DIV水平垂直居中

利用css来让一个div在页面中垂直居中的方法