如何垂直居中具有不同高度选项卡的对话框?

Posted

技术标签:

【中文标题】如何垂直居中具有不同高度选项卡的对话框?【英文标题】:How to vertical center dialog box with different hight of tabs? 【发布时间】:2017-06-12 01:10:40 【问题描述】:

我知道jquery ui 对话框默认居中。但是当我放入对话框选项卡时遇到问题。第一个是简短的登录表单,第二个是较长的注册表单。

当我打开对话框时,它是居中的,但是当我打开另一个选项卡时,对话框不是垂直居中的。

我的问题:是否可以通过切换选项卡重新定位对话框?

这是我的代码:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>jQuery UI Dialog - Default functionality</title>
  <link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <style type="text/css">
    form>div
      margin-bottom: 15px;
    
    form>div>labelwidth: 30%; display: inline-block;
  </style>
<script src="http://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="http://code.jquery.com/ui/1.11.2/jquery-ui.min.js"></script>
  <link rel="stylesheet" href="styles.css">
  <script>
    $(function() 
        dialog = $( "#dialog" ).dialog(
            autoOpen: false,
        modal: true,
        draggable: false,
        width: 480,
        );
        $( "#open-popUp" ).on( "click", function() 
            dialog.dialog( "open" );
        );
    );
    $( function() 
      $( "#dialog" ).tabs();
    );
  </script>
</head>
<body>

<h1>Test</h1>
<button id="open-popUp">open</button>

<div id="dialog" title="Basic dialog">
  <ul>
    <li><a href="#tabs-login">Login</a></li>
    <li><a href="#tab-reg">Registration</a></li>
  </ul>

  <div id="tabs-login">
    <form>
      <div>
        <label for="inputEmail">Email:</label>
        <input type="email" id="inputEmail" placeholder="Email...">
      </div>
      <div>
        <label for="inputPassword" class="col-sm-3 control-label">Password:</label>
        <input type="password" id="inputPassword" placeholder="Heslo...">
      </div>
      <button type="submit" class="btn btn-default" id="btn-login">Login</button>
    </form>
  </div>

  <div id="tab-reg">
    <form>
      <div>
        <label for="inputFirstName">First name:</label>
        <input type="text" id="inputFirstName" placeholder="Name...">
      </div>
      <div>
        <label for="inputLastName">Last name:</label>
        <input type="text" id="inputLastName" placeholder="Name...">
      </div>
      <div>
        <label for="inputE-mail">E-mail:</label>
        <input type="text" id="inputEmail" placeholder="E-mail...">
      </div>
      <div>
        <label for="inputPassword">Password:</label>
        <input type="password" id="inputPassword" placeholder="Password...">
      </div>
      <div>
        <label for="inputPassword2">Re-password:</label>
        <input type="password" id="inputPassword2" placeholder="Re-password...">
      </div>
      <div>
        <label for="inputBirthday">Birthday:</label>
        <input type="text" id="inputBirthday" placeholder="Birthday...">
      </div>
      <div>
        <label for="inputCity">City:</label>
        <input type="text" id="inputCity" placeholder="City...">
      </div>
      <button type="submit" class="btn btn-default" id="btn-login">Registration</button>
    </form>
  </div>
</div>


</body>
</html>

【问题讨论】:

创建了一个测试小提琴:jsfiddle.net/Twisty/t3qnLt2h 请解释一下您在切换标签时希望发生什么?您希望标签 1 的高度与标签 2 的高度相同吗?或者您是否希望对话框重新定位,使其在每次切换选项卡时以window 为中心? 我希望对话框重新定位,以便每次切换选项卡时它都在窗口中居中。 【参考方案1】:

我在这里发现了一个有用的花絮:How to auto-center jQuery UI dialog when resizing browser?

要使用的sn-p是:

$("#dialog").dialog("option", "position", my: "center", at: "center", of: window);

您的示例中的工作示例:https://jsfiddle.net/Twisty/t3qnLt2h/4/

JavaScript

$(function() 
  function recenter(d) 
    if (typeof d !== "object") 
      d = $(d);
    
    d.dialog("option", "position", 
      my: "center",
      at: "center",
      of: window
    );
  

  dialog = $("#dialog").dialog(
    autoOpen: false,
    modal: true,
    draggable: false,
    width: 480,
  );

  $("#open-popUp").on("click", function() 
    dialog.dialog("open");
  );

  $("#dialog").tabs();

  $(".ui-tabs-nav a").on("click", function(e) 
    recenter(dialog);
  );
);

【讨论】:

以上是关于如何垂直居中具有不同高度选项卡的对话框?的主要内容,如果未能解决你的问题,请参考以下文章

word文档里面的文字垂直方向上如何居中?

如何垂直对齐到具有定义宽度/高度的 div 内容的中心?

如何在div中以可变高度垂直居中内容?

两个高度不同的行内元素如何垂直居中对齐

在具有动态高度的div中垂直居中图像[重复]

怎么把上下居中对齐