【问题标题】:Display modal-backdrop only for a nested modal仅为嵌套模式显示模式背景
【发布时间】:2017-12-28 04:51:50
【问题描述】:

我正在使用 AngularJS,并且在单个 html 中有许多 Bootstrap 模式。 由于我需要在访问模态时与周围区域进行交互,因此我设置了:

.modal-backdrop {
    display: none;
}

但是,现在我需要添加一个必须有背景的嵌套模式。 我该怎么做?

【问题讨论】:

  • 你可以像 Angular 4 那样指定 CSS。您只需将任何属性添加到您的标签,例如<div class="modal" ngsss/>。然后你需要在CSS中指定.modal[ngsss]
  • 好的,但是如何为这个特定的嵌套模式设置背景?
  • 会类似于 .modal-backdrop[ngsss] { display: all } ?
  • 它不是display 的属性。您可以指定block
  • 我尝试设置 display:block... 没有用。我认为是因为原来的规则仍然有效。

标签: jquery css angularjs twitter-bootstrap


【解决方案1】:

您可以确保(同时)打开的第一个模态框没有背景...
在每次点击 data-toggle='modal' 按钮时检查它。

$(document).on("click","[data-toggle='modal']",function(){
  $(".modal-backdrop").eq(0).css({"display":"none"});

  // if more than 1 modal openned.
  if($(".modal-backdrop").length>1){

    // move backdrop up (in z)
    var ZindexBackdrop = parseInt($(".modal-backdrop").eq(0).css("z-index"))+20;
    console.log("Backdrop z-index: "+ZindexBackdrop);
    $(".modal-backdrop").eq(1).css({"z-index":ZindexBackdrop});

    // move modal up (in z)
    var ZindexModal = parseInt($(".modal").eq(0).css("z-index"))+20;
    console.log("Modal z-index: "+ZindexModal);
    $(".modal").eq(1).css({"z-index":ZindexModal});
  }
});

要更改第一个上方的第二个模态/背景z-index...
您的第二个模态必须真正“嵌套”在第一个模态中。
因为如果父级定义了一个子级的z-index,则无法更改。

但要获得所需的嵌套效果,请将第二个模态仅触发按钮放在第一个模态中。

$(document).on("click","[data-toggle='modal']",function(){
  $(".modal-backdrop").eq(0).css({"display":"none"});

  // if more than 1 modal openned.
  if($(".modal-backdrop").length>1){

    // move backdrop up (in z)
    var ZindexBackdrop = parseInt($(".modal-backdrop").eq(0).css("z-index"))+20;
    console.log("Backdrop z-index: "+ZindexBackdrop);
    $(".modal-backdrop").eq(1).css({"z-index":ZindexBackdrop});

    // move modal up (in z)
    var ZindexModal = parseInt($(".modal").eq(0).css("z-index"))+20;
    console.log("Modal z-index: "+ZindexModal);
    $(".modal").eq(1).css({"z-index":ZindexModal});
  }
});
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/js/bootstrap.min.js"></script>



<!-- Trigger the modal with a button -->
<button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">Open Modal</button>

<!-- Modal -->
<div id="myModal" class="modal fade" role="dialog">
  <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 1 Header</h4>
      </div>
      <div class="modal-body">

        <!-- Trigger the modal with a button -->
        There is no modal back-drop...<br>
        Open this second one!<br>
        <br>
        <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal2">Open Modal</button>


      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
      </div>
    </div>

  </div>
</div>


<!-- Nested modal -->
<div id="myModal2" class="modal fade" role="dialog">
  <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 2 Header</h4>
      </div>
      <div class="modal-body">
        This is the second modal.<br>
        <b>And there is a back-drop.
          </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        </div>
      </div>

    </div>
  </div>
</div>
<!-- Nested modal -->

【讨论】:

  • 如果您在嵌套模式之外单击,它不会正确关闭(至少在 sn-p 中)
  • 这只是一个关于如何隐藏第一个背景的示例。不要要求完全工作的嵌套模式。你甚至没有发布你的 HTML。我不会编辑。
  • 当然,我不是问,还是谢谢你。我想如果有人会尝试使用您发布的代码,在嵌套模式上使用 backdrop:static 会解决问题。
  • Louys,我刚刚注意到一些事情:背景被应用于父模态(背景没有覆盖父模态)。请问您知道如何使其应用于嵌套模态,使其覆盖父模态吗?
  • 我对此进行了编辑...这也修复了“点击外部”关闭行为。
猜你喜欢
  • 2017-05-12
  • 2016-03-27
  • 2014-06-16
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多