【问题标题】:Blueimp Gallery inside Boostrap Modal not vertical aligned properlyBootstrap Modal 中的 Blueimp Gallery 未正确垂直对齐
【发布时间】:2017-03-10 06:41:12
【问题描述】:

我有一个模式窗口,其中显示了一些数据,其中还包含在 Blueimp 库中打开的图像。我遇到的问题是,当在 BlueImp 库中打开图像时,图像在屏幕中间没有垂直对齐。它要么到底部,要么到顶部,这取决于我在模式窗口中滚动的位置。我需要转到模态窗口的中间并打开画廊,在这种情况下,灯箱看起来居中。在没有模态的页面中直接使用 blueimp 时不会发生此问题。看起来 blueimp 画廊的灯箱以整个模态高度而不是视口高度为中心。如何仅在模态窗口内为 blueimp 覆盖它?在 boostrap modals 中使用 blueimp 时,是否有 css 修复或 js 修复来覆盖它?

这是我的设置示例:

<div uib-modal-window="modal-window" class="modal fade" role="dialog" size="xl" index="0" animate="animate" ng-style="{'z-index': 1050 + $$topModalIndex*10, display: 'block'}" tabindex="-1" uib-modal-animation-class="fade" modal-in-class="in" modal-animation="true" style="z-index: 1050; display: block;">
   <div class="modal-dialog modal-xl">
      <div class="modal-content" uib-modal-transclude="">
        <div class="lightBoxGallery">
            <a ng-repeat="image in vm.ngModel" ng-href="{{::vm.imageurl(image.name)}}" data-gallery="">
                <img ng-src="{{::vm.getImage(image.name)}}" class="img-responsive img-thumbnail animated fadeIn">
            </a>
            <div id="blueimp-gallery" class="blueimp-gallery">
                    <div class="slides"></div>
                    <h3 class="title"></h3>
                    <a class="prev">‹</a>
                    <a class="next">›</a>
                    <a class="close">×</a>
                    <a class="play-pause"></a>
                    <ol class="indicator"></ol> </div>
            </div>
    </div>
  </div>
</div>

我的设置:Angular 1.5 + Bootstrap 3 + Bootstrap UI + BlueImp Gallery

更新:

我在这里遇到的问题是,我的 Bootstrap 模态窗口有 overflow-y 可滚动并且它有一个固定的位置:

.modal-open .modal {
    overflow-x: hidden;
    overflow-y: auto;
}
.modal {
    position: fixed;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
    z-index: 1050;
    display: none;
    overflow: hidden;
    -webkit-overflow-scrolling: touch;
    outline: 0;
}

而当blueimp-gallery打开时,作为一个固定位置的子div,它是将div定位到父固定位置的中心,而不是视口的中心:

.blueimp-gallery {
    position: fixed;
    z-index: 999999;
    overflow: hidden;
    background: #000;
    background: rgba(0,0,0,.9);
    opacity: 0;
    display: none;
    direction: ltr;
    -ms-touch-action: none;
    touch-action: none;
}

blueimp-gallery 与中间对齐,但我不希望它与父(模态)div 的中间对齐。我希望它与视口的中间对齐。例如,在我的笔记本电脑中,我的模态框的高度为 2000 像素,而我的视口高度远低于 860 像素。这就是为什么画廊灯箱打开到视口的顶部或底部,除非用户正好在模态窗口的中间。如果我将blueimp-gallery 直接放在没有模态窗口的正文中,我就没有这个问题。但在这个用例中,我必须将blueimp-gallery 放置在一个高度可变的模态窗口中,具体取决于其中加载的动态内容。

我仍然卡在这个问题上,请问有人对这个问题有什么建议吗?

【问题讨论】:

  • 嗨,我回来了 :) 所以说你在中间有 lightboxgallary。当它打开时,blueimp 是在灯箱画廊的中心?或者你希望他们在哪里?也许添加带有问题的屏幕截图和你想要的结果然后你会得到更多的反应。
  • 嗨@H.Brendan 感谢您回来。是的你是对的。当图像在 blueimp 库中打开时,它位于模式的中间。我希望画廊显示在视口的中间而不是模态的中间。问题是,我将图像显示在模态内部显示的信息的底部,模态高度就像 2000px。因此,当图像在以模式为中心的 blueimp 灯箱中打开时,打开的灯箱无法从其单击的位置查看。在移动端更难。
  • 我能想到的唯一选择是通过将.modal-open .modal类更改为overflow-y: hidden;然后为模态内的div设置overflow:scroll来限制模态高度,因此模态的高度与视口保持相同,在这种情况下,blueimp 的高度将相同。但这在我的用例中不是很好的 UI,因为里面的 div 由于滚动而不能很好地流动。
  • 这只是我的一个随机想法。但是你不能尝试给它应该在一个 ID 中打开的 div 并使用一些 javascript 来处理它,以便必须显示的框将被放入具有该特定 ID 的 div 中?我几乎可以肯定它可能我不太确定这是否很容易。
  • 哈哈非常感谢你的赏金很高兴我能帮忙

标签: angularjs twitter-bootstrap angular-ui-bootstrap lightbox blueimp


【解决方案1】:

我能够解决此问题的唯一方法是将"#blueimp-gallery" 元素拉出模式窗口,然后将其作为body 元素的直接子元素再次插入。使用 Jquery,我添加了修复问题的代码:

$(document).ready(function(){
    $("#blueimp-gallery").prependTo($("body"));
});

现在,在上面的代码之后,BlueImp Gallery 的固定位置是相对于 body 元素的,因此高度就是视口的高度。模态高度不再影响 BlueImp 库的高度,因为它现在被放置为 body 元素的直接子元素。

【讨论】:

  • 你让我度过了一个下午 ;)
  • 像魅力一样工作。现在我知道 lightBoxGallery 是 gallery ,它将显示在#blueimp-gallery 中。我错了吗?
【解决方案2】:

您应该尝试将 blueimp 放在一个带有 row 类的 div 中,然后将另一个带有 col-md-6 类的 div 放在不是 100% 肯定但它应该在中间对齐。

<div class="container">
 <div class="row">
   <div class="col-md-6">
        <div id="blueimp-gallery" class="blueimp-gallery vcenter ">
         ...
   </div>
 </div>
</div>

Edit 试过了,它上面必须有容器标签。

这很可能不是让它垂直居中的解决方案,但我猜这值得一试

添加

.vcenter {
 display: inline-block;
 vertical-align: middle;
 float: none;
}

创建一个 costum 标签,将其添加到一个 css 文件中并调用它。

【讨论】:

  • 谢谢@H.Brendan。我现在就试一试。
  • 我尝试在blueimp-gallery.vcenter 样式和定位周围添加containerrowcol-md-6。从某种意义上说,它与上一期相似,假设图像放置在模式窗口的底部,并且我在没有完全居中图像部分的情况下单击图像,blueimg-gallery 将在底部显示图像,因为容器是那里的包装器。 (续...)
  • 但是,它比以前稍微好一点,至少在将图像块居中时单击 blueimp 链接时,它应该显示正常,因为 blueimp 现在以 img 块而不是整个模态。我现在将通过移动设备进行测试并查看。这可能是最好的解决方法,不是。
  • 对不起,一旦我添加到实时代码中,它就没有工作了。当 #blueimp-gallery 被容器和行 div 包裹时,img 锚点不再可点击。仅当#blueimp-gallery 直接放在&lt;a&gt; 标记之后时才有效。我还尝试将整个图像部分包装在容器内,然后在这种情况下,模态不再可滚动。
  • 尝试将行 div 等向上移动一些行。就像上面说的
    或 somethnig
猜你喜欢
  • 2012-08-16
  • 2018-06-06
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
  • 2015-10-02
  • 2017-09-04
  • 2017-05-07
  • 1970-01-01
相关资源
最近更新 更多