【问题标题】:Position modal centered with floating outside box以浮动外框为中心定位模态
【发布时间】:2019-04-08 05:09:58
【问题描述】:

我有一个 bootstrap 4 模态,我希望显示一些不同。我想在模态框的左侧显示一个浮动框。

我的问题是如何将模态框和浮动框都定位在页面的中心,即使浮动框位于模态框之外且具有绝对位置?

这是它目前的样子,浮动框的绝对位置具有负左位置:

这就是我想要的样子,盒子和模态居中:

我不知道我需要修改多少模式才能做到这一点,因为我希望它也能响应。

有人对我如何实现这一点有任何想法吗?将不胜感激。

谢谢各位。

.affix-box {
  position: absolute;
  top: -40px;
  left: -100px;
  width: 200px;
  height: 100px;
  background-color: green;
}
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
<div class="container">
  <div class="row">
    <div class="col-lg-12">
      <!-- Button trigger modal -->
      <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
  Launch demo modal
</button>

      <!-- Modal -->
      <div class="modal" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
        <div class="modal-dialog modal-dialog-centered modal-xl" role="document">
          <div class="modal-content">
            <div class="affix-box"></div>
            <div class="modal-header">
              <h5 class="modal-title ml-auto" id="exampleModalLabel">Modal title</h5>
              <button type="button" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</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>
    </div>
  </div>
</div>

【问题讨论】:

    标签: html css twitter-bootstrap bootstrap-modal


    【解决方案1】:

    width: 91%;left: 9%; 添加到modal-content

    .affix-box {
      position: absolute;
      top: -40px;
      left: -100px;
      width: 200px;
      height: 100px;
      background-color: green;
    }
    .modal-content{
    width: 91%;
    left: 9%;
    }
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" />
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
    <div class="container">
      <div class="row">
        <div class="col-lg-12">
          <!-- Button trigger modal -->
          <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
      Launch demo modal
    </button>
    
          <!-- Modal -->
          <div class="modal" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
            <div class="modal-dialog modal-dialog-centered modal-xl" role="document">
              <div class="modal-content">
                <div class="affix-box"></div>
                <div class="modal-header">
                  <h5 class="modal-title ml-auto" id="exampleModalLabel">Modal title</h5>
                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
              <span aria-hidden="true">&times;</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>
        </div>
      </div>
    </div>

    【讨论】:

    • 您的答案非常接近。虽然当您最小化浏览器大小时,模态似乎被切断了。
    • 所以使用@media 并为每个屏幕尺寸设置不同的尺寸
    • 谢谢,我确实使用了媒体查询,而且效果很好。谢谢!
    【解决方案2】:

    这是简单的替换。 而不是topleft 我使用了transform: translate(-50%, -50%);,它将浮动框的中心设置在模态的左上角。

    .affix-box {
      position: absolute;
      width: 200px;
      height: 100px;
      background-color: green;
      -webkit-transform: translate(-50%, -50%);
      -moz-transform: translate(-50%, -50%);
      -ms-transform: translate(-50%, -50%);
      -o-transform: translate(-50%, -50%);
      transform: translate(-50%, -50%);
    }
    <link href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" rel="stylesheet" />
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
    <div class="container">
      <div class="row">
        <div class="col-lg-12">
          <!-- Button trigger modal -->
          <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
      Launch demo modal
    </button>
    
          <!-- Modal -->
          <div class="modal" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
            <div class="modal-dialog modal-dialog-centered modal-xl" role="document">
              <div class="modal-content">
                <div class="affix-box"></div>
                <div class="modal-header">
                  <h5 class="modal-title ml-auto" id="exampleModalLabel">Modal title</h5>
                  <button type="button" class="close" data-dismiss="modal" aria-label="Close">
              <span aria-hidden="true">&times;</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>
        </div>
      </div>
    </div>

    【讨论】:

    • Joykal Infotech,这不是我的问题。无论浮动框的负边距或位置如何,模态框和浮动框都应居中。
    【解决方案3】:

    除了@Joykal 说的,你也可以尝试改变模型大小来减小它的宽度,你可以根据你的需要使用 .modal-sm 或 .modal-lg 类来代替 .modal-xl

    <div class="modal-dialog modal-dialog-centered modal-xl" role="document">
    

    【讨论】:

    • Abhijit Saxena,这不是我的问题。大小无关紧要。关于模态,它试图强制模态和浮动框居中。
    • Krys,你的 'affix-box' 框划分是 'modal-dialog' 的子级。如果你检查那个部门的css,你就会明白它会迫使它的所有孩子居中。因此,如果问题是您的浮动框由于页面大小而被剪裁,那么您可以尝试减小模态大小,或者您需要通过定义 Joykal 提到的 css 来强制浮动框显示为您想要的。
    【解决方案4】:

    也许这会对你有所帮助

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <title>Bootstrap Example</title>
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
      <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
      <style>
      #myModal .close{
      display: none;
      }
      </style>
    
     <script>
    
    $(document).ready(function(){
      $(".btn").click(function(){
         $("#myModal").modal('show');
         $("#myModal2").modal('show');
    
      });
    
        $(".close,.close-btn").click(function(){
         $("#myModal").modal('hide');
         $("#myModal2").modal('hide');
    
      });
    
    });
    </script>
    </head>
    <body>
    
    <div class="container">
      <h2>Modal Example</h2>
      <!-- Trigger the modal with a button -->
     <button type="button" class="btn">Basic</button>
    
      <!-- Modal -->
      <div class="modal fade" id="myModal" role="dialog" style="right: 50%;">
        <div class="modal-dialog"> 
        <!-- Modal content-->
          <div class="modal-content">
            <div class="modal-header">
              <button type="button" class="close" data-dismiss="modal">&times;</button>
              <h4 class="modal-title">Modal Header</h4>
            </div>
            <div class="modal-body">
              <p>Some text in the modal.</p>
            </div>
    
          </div>
        </div>
      </div>
       <!--/. Modal -->
    
        <!-- Modal -->
      <div class="modal fade" id="myModal2" role="dialog"  style="left: 50%;">
        <div class="modal-dialog"> 
        <!-- Modal content-->
          <div class="modal-content">
            <div class="modal-header">
              <button type="button" class="close" data-dismiss="modal">&times;</button>
              <h4 class="modal-title">Modal Header</h4>
            </div>
            <div class="modal-body">
              <p>Some text in the modal.</p>
            </div>
            <div class="modal-footer">
              <button type="button" class="btn btn-default close-btn" data-dismiss="modal">Close</button>
            </div>
          </div>
        </div>
      </div>
       <!--/. Modal -->
    
    </div>
    </body>
    </html>
    
    

    【讨论】:

    • Dipak Aher,这不是我的问题。关于你的回答,Bootstrap js 已经让它显示和隐藏模式......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    相关资源
    最近更新 更多