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; }
现在所有图片高度统一,宽度不同。宽度可以小一点,然后最大
我在将图库与不同大小的图像对齐时遇到问题。我不想以编程方式设置大小,因为在不同的屏幕上它们看起来不太好。另一个问题是图像之间的空白和我不知道图像大小的情况(图像作为图像列表获得,通过 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; }
现在所有图片高度统一,宽度不同。宽度可以小一点,然后最大