JavaScript 和 Bootstrap 个图片大小不同的图库

JavaScript and Bootstrap image gallery with different image sizes

我在将图库与不同大小的图像对齐时遇到问题。我不想以编程方式设置大小,因为在不同的屏幕上它们看起来不太好。另一个问题是图像之间的空白和我不知道图像大小的情况(图像作为图像列表获得,通过 Spring 框架控制器并通过 for-each 循环添加)。我的代码是:

 <%@page contentType="text/html" pageEncoding="UTF-8"%>
 <%@page session="false"%>
 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
 <%@ taglib prefix="s" uri="http://java.sun.com/jsp/jstl/core" %>
 <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
 <!DOCTYPE html> 
 <html>
 <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Who s the whale here? Im the whale</title>
<link rel='stylesheet' href='webjars/bootstrap/3.2.0/css/bootstrap.min.css'>
<style>
    body {
        padding-top: 20px;
    }

    .navbar-default {
        background-color: rgba(255,255,255,0.88);;
        border-color: rgba(255,255,255,0.88);;
    } 
</style>
<sec:csrfMetaTags/>
 </head>
 <body>
 <script type="text/javascript" src="webjars/jquery/2.1.1/jquery.min.js">        
  </script>
  <script type="text/javascript" src="webjars/bootstrap/3.2.0/js/bootstrap.min.js"></script>
   <script type="text/javascript" src="webjars/masonry/3.1.5/masonry.pkgd.min.js"></script>
  <br>
  <br>    


   <c:if test="${!empty masterpieceList}">
    <div class="container">
        <ul class="row">
            <c:forEach items="${masterpieceList}" var="masterpiece">
                <li class="col-md-3 col-sm-4 col-xs-6 wrapper">
                    <img class="img-responsive imgClip"src="/something/getImg${masterpiece.masterpieceId}" />
                </li>
        </c:forEach> 
            </ul>
        </div>
    </c:if>


   <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
   <div class="modal-dialog">
    <div class="modal-content">
        <div class="modal-body">
        </div>
    </div><!-- /.modal-content -->
   </div><!-- /.modal-dialog -->
 </div><!-- /.modal -->
  </body>
   </html>

画廊看起来像:

有什么办法让它更流畅等等吗?我尝试了不同的解决方案,但由于我的图像经历了一个循环,它们似乎无法正常工作。提前谢谢你

更新:

它应该是这样的:

您应该尝试使用 masonry 库来排列不同大小的图像。这是这个图书馆的更多信息。 masonary. Also check out this quick tutorial: http://www.epicwebs.co.uk/jquery-tutorials/quick-and-easy-jquery-masonry-tutorial/

1) 一种方法是获取所有 li 元素中的最大高度,然后将此高度应用于所有元素 - 这是一个脚本:

jQuery(document).ready(function($) {
    // calculate max height among all elements
    var maxHeight = 0;
    var rowElements = $('ul.row');
    rowElements.each(function() {
        var elementHeight = $(this).height();
        if(elementHeight > maxHeight) {
            maxHeight = elementHeight;
        }
    });

    // now apply this height to all elements
    rowElements.height(maxHeight);
});

该脚本从所有行获取所有元素,因此某些行之间可能有很大的边距,这些行没有大图像,但您可以根据需要调整该脚本

2) 第二个选项是将每 4 张图像单独包装 - 这是更简单的解决方案。这将需要在您的 foreach 循环中使用一些 jsp 。我不知道jsp,所以不会提供任何特定的代码,但应该很容易。

bbh 和 Paulie_D 推荐的 masonry 库是一个正确且很好的案例解决方案,许多网站都使用它来处理与我的案例非常相似的案例。所以,他们的选择在方法论上是正确的。

为了实现我的问题更新中所示的分组,(每行一个高度,不同宽度和不同数量的 columns/images)我只使用 CSS 意味着:

  .ImgClip{ max_width = 100%; heigth = auto; }

现在所有图片高度统一,宽度不同。宽度可以小一点,然后最大