我已经看到很多关于这个的问题,没有答案(至少没有一个帮助过我).
我的设置非常简单 - 一个带有图像的流体容器(没有固定宽度).
我已经在CSS中设置了每个div项目将是25%并且我已经在其中设置图像以填充div.
我已经将同位素设置为仅在imagesLoaded之后运行.
问题是在初始加载时,元素没有正确定位.它们之间有一些填充物,甚至可以从容器中取出.只有当我调整窗口大小时,它们才能正确定位,即使我将窗口恢复到全屏.
你知道为什么会这样吗?
这是我的代码:
HTML:
<div id="main">
<div class="item"><img src="http://lorempixel.com/300/200/"></div>
<div class="item"><img src="http://lorempixel.com/440/300/"></div>
<div class="item"><img src="http://lorempixel.com/450/560/"></div>
<div class="item"><img src="http://lorempixel.com/410/270/"></div>
<div class="item"><img src="http://lorempixel.com/440/230/"></div>
<div class="item"><img src="http://lorempixel.com/470/460/"></div>
<div class="item"><img src="http://lorempixel.com/400/200/"></div>
<div class="item"><img src="http://lorempixel.com/430/780/"></div>
<div class="item"><img src="http://lorempixel.com/400/520/"></div>
<div class="item"><img src="http://lorempixel.com/420/120/"></div>
<div class="item"><img src="http://lorempixel.com/500/260/"></div>
<div class="item"><img src="http://lorempixel.com/200/200/"></div>
<div class="item"><img src="http://lorempixel.com/100/200/"></div>
<div class="item"><img src="http://lorempixel.com/400/200/"></div>
<div class="item"><img src="http://lorempixel.com/890/200/"></div>
<div class="item"><img src="http://lorempixel.com/400/200/"></div>
<div class="item"><img src="http://lorempixel.com/400/200/"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
CSS:
#main{margin-right:250px;}
#main .item { width: 25%;}
#main .item img { width:100%;height:100%;}
Run Code Online (Sandbox Code Playgroud)
JS:
var $container = $("#main");
$container.imagesLoaded(function () {
$container.isotope({
itemSelector: ".item",
});
});
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这种行为......?
更新
这是一个证明问题的方法:http://jsfiddle.net/f35azgdj/2/
注意元素之间是否有一些空间,调整大小时会消失.BTW由于某种原因,即使在调整大小后,水平间距仍然存在.
另一个更新
我认为它与滚动条有关,因为当我减少元素数量并且它们适合没有滚动条时,它可以工作.
我认为这意味着在初始载荷中,同位素计算容器大小而不考虑滚动条占用它,因此它认为它具有更大的空间然后它确实具有,因此它相应地定位元素.然后,由于元素使用CSS设置为容器的25%,因此它们的大小是根据较小的容器大小计算的(考虑到滚动条),因此它们之间留有空格.
任何人都可以想到它是我的一个错误或错误的设置?
谢谢!
阿莫斯
好的,所以我发现了这个问题,据我所知,这是个错误.
当你有更多元素然后是屏幕大小时会发生这种情况,因此会出现一个垂直滚动条.
此滚动条占用屏幕的一些空间,因此容器div现在更小.
问题是同位素在滚动条出现之前计算容器的大小,因此它认为有更多的空间,并相应地定位元素.
然后根据容器的正确大小计算元素本身,这意味着它们稍微小一点,这会导致它们之间出现空白.另一个影响是它们从容器的大小溢出,因此也出现水平条.
调整大小时,重新计算容器大小,这次考虑垂直条,所以这一切都得到修复.
解决方案:
选项一:在第一次计算完成后立即重新计算容器.我发现这很好用:
$container.imagesLoaded(function () {
$container.isotope({
itemSelector: ".item",
isOriginLeft: false,
});
$container.isotope();
});
Run Code Online (Sandbox Code Playgroud)
请注意第二次调用$container.isotope().这将有效,但会有一个双重调整大小的效果,并且还有一个轻微的时刻,你将有一个水平滚动条.但它不会强制您始终拥有选项2中的垂直滚动条.
选项2:向页面添加一个永远在线的垂直滚动条.这将有助于同位素正确计算容器,同时考虑滚动条.
html {overflow-y: scroll;}
Run Code Online (Sandbox Code Playgroud)
无论如何,我仍然不确定这是一个错误或我需要配置不同的东西.会喜欢你的想法.与此同时,这解决了我的问题,直到出现更好的解决方案,我想我会将其标记为解决方案.
谢谢!
阿莫斯