我正在尝试使用以下代码平衡图像库中列之间的高度:
section {
background: magenta;
/* So you can see the area I don't want to appear */
}
.gallery {
width: 100%;
line-height: 0;
-webkit-column-count: 2;
-webkit-column-gap: 0;
-moz-column-count: 2;
-moz-column-gap: 0;
column-count: 2;
column-gap: 0;
}
行为:
当我给.gallery
元素一个硬编码height
值时,列总是更好地平衡.这是一个问题,因为在我的网站中,图像是动态添加的,我永远不会知道所有画廊的确切高度.
请求:
我想找到一段代码(无论是什么,我认为我可以实现一些JS)来修复这个问题,要么通过重新排序HTML中的图像以便结果是最好的,或者以任何方式存在以动态设置高度,以解决问题.
1> CoderPi..:
编辑:
如果您不需要保留line-height: 0
,只需使用.gallery img {display:block}
和删除行高,这就是您所需要的.那将是最好的.table-cell
等可能会产生一些副作用.例如vertical-align: middle
,在图像下面留一个空间,只是一个黑客.
https://jsfiddle.net/bruLwktv/
Challange接受了,这是解决方案:;)
该算法确保每个图像都被加载,然后将它们分成两个颜色,使得最接近的总高度可以创建最小间隙.
使用分区问题的贪婪算法创建平衡分区.
var gallery = document.getElementsByClassName("gallery")[0]
var images = gallery.getElementsByTagName("img")
var notLoaded = 0
window.onload = function() {
for (var i = images.length; i--;) {
if (images[i].width == 0) {
// let the image tell us when its loaded
notLoaded++
images[i].onload = function() {
if (--notLoaded == 0) {
allImgLoaded()
}
}
}
}
// check if all images are already loaded
if (notLoaded == 0) allImgLoaded()
}
function allImgLoaded() {
// Partition images
var imgs = partitionImages(images)
// reorder DOM
for (var i = images.length; i--;) {
gallery.appendChild(imgs[i])
}
}
function partitionImages(images) {
var groupA = [], totalA = 0
var groupB = [], totalB = 0
// new array width img and height
var imgs = []
for (var i = images.length; i--;) {
imgs.push([images[i], images[i].height])
}
// sort asc
imgs.sort(function(a, b) {
return b[1] - a[1]
});
// reverse loop
for (var i = imgs.length; i--;) {
if (totalA < totalB) {
groupA.push(imgs[i][0])
totalA += imgs[i][1]
} else {
groupB.push(imgs[i][0])
totalB += imgs[i][1]
}
}
return groupA.concat(groupB)
}
section {
background: magenta;
/* So you can see the area I don't want to appear */
}
.gallery {
width: 100%;
line-height: 0;
-webkit-column-count: 2;
-webkit-column-gap: 0;
-moz-column-count: 2;
-moz-column-gap: 0;
column-count: 2;
column-gap: 0;
}
推荐阅读
-
如何解决《为什么AndroidAsync断开时间这么久?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《如何干掉重复嵌套的HAML?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《bash中值的值》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《了解Word2Vec的Skip-Gram结构和输出》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《使用Spring-data-cassandra查询带有复合主键的表》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《给定一个函数管道(foo,bar,baz)(1,2,3),你如何在javascript中实现它等同于baz(bar(foo(1,2,3))》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《Pytest-没有测试》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《如何使用别名调用特征方法》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《如何确定一个点是否高于或低于连接R点的线?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《最终清空{}有什么用吗?》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《为什么从bitcode重新编译使我无法在Xcode临时版本中进行符号化,如何解决?》经验,为你挑选了0个好方法。 ...
[详细]
-
如何解决《如何围绕下一个偶数?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《python:使用PyCharm和PyQt5时,进程以退出代码1结束》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《F#:哪个内存区域是存储的延续:堆栈还是堆?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《将__builtin_expect委托给内联函数是否安全?》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《Angular2服务未注入组件》经验,为你挑选了2个好方法。 ...
[详细]
-
如何解决《在R中创建双模频率矩阵》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《spark的distinct()函数是否仅对每个分区中的不同元组进行洗牌》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《提升精神(X3)符号表,产生UTF8字符串》经验,为你挑选了1个好方法。 ...
[详细]
-
如何解决《使用带有<router-outlet>的@Inputs的Angular2》经验,为你挑选了2个好方法。 ...
[详细]
吐了个 "CAO" !
Tags | 热门标签
RankList | 热门文章
-
1jQuery:分离还是不分离?
-
2如何使用THREE.DecalGeometry为贴花设置正确的方向
-
3我可以在流链中访问先前lambda的值吗?
-
4jQuery选择了滚动问题,包含所选内容的元素不滚动
-
5弹簧启动时MultipartFile的最大限制
-
6如何在gcloud中省略用户交互
-
7使用mysql中的alter table将date转换为datetime或timestamp
-
8WordPress - 允许对作者页面发表评论
-
9如何在Dev环境中提高Webpack性能?
-
10psycopg2选择timestamp返回包含在元组中的datetime.datetime,如何解压缩?
-
11为什么不可能/不太可能显示性能改进?
-
12连接列表列表
-
13读取不同语言环境中的时间戳
-
14我们可以在SQL Transaction中多次使用'GO'吗?
-
15如何在kubernetes上传递一个认为yaml的配置文件来创建新的复制控制器
-
16xgboost中Objective和feval之间的差异
-
17Intellij如何使用spring boot正确配置hql.现在我得到持久性QL查询被错误检查
-
18如果未选中复选框,则阻止表单提交
-
19弹簧数据mongodb中的2d球面索引
-
20如何修复java中的堆栈溢出错误?
DevBox开发工具箱 | 专业的在线开发工具网站 京公网安备 11010802040832号 | 京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有