【问题标题】:Masonry gallery not stacking correctly砌体画廊未正确堆叠
【发布时间】:2017-12-22 13:11:00
【问题描述】:

我在 StackOverflow 上查找了很多答案,但似乎没有任何帮助。我有以下代码,它似乎在没有初始化砌体的情况下堆叠得很好(对于当前测试中的图像),但它失败了。我需要砌体的原因是因为图像不会总是对齐。

JSFiddle

HTML

<div class='gallery'>
  <!-- Grid sizing element 33.33% -->
  <div class="grid-sizer"></div>

  <!-- Two 50% -->
  <div class='masonry-item gallery-item image-half'>
    <a data-fluidbox="true" href="http://placehold.it/450x250"><img class="img-responsive" src="http://placehold.it/450x250" alt="450x250" /></a>
  </div>
  <div class='masonry-item gallery-item image-half'>
    <a data-fluidbox="true" href="http://placehold.it/450x250"><img class="img-responsive" src="http://placehold.it/450x250" alt="450x250" /></a>
  </div>

  <!-- One 100% -->
  <div class='masonry-item gallery-item image-full'>
    <a data-fluidbox="true" href="http://placehold.it/900x400"><img class="img-responsive" src="http://placehold.it/900x400" alt="900x400" /></a>
  </div>

  <!-- Three 33.33% -->
  <div class='masonry-item gallery-item image-third'>
    <a data-fluidbox="true" href="http://placehold.it/300x500"><img class="img-responsive" src="http://placehold.it/300x500" alt="300x500" /></a>
  </div>
  <div class='masonry-item gallery-item image-third'>
    <a data-fluidbox="true" href="http://placehold.it/300x500"><img class="img-responsive" src="http://placehold.it/300x500" alt="300x500" /></a>
  </div>
  <div class='masonry-item gallery-item image-third'>
    <a data-fluidbox="true" href="http://placehold.it/300x500"><img class="img-responsive" src="http://placehold.it/300x500" alt="300x500" /></a>
  </div>
</div>

CSS

.gallery .gallery-item {
  margin-bottom: 20px;
  float: left;

  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  height: 400px;
}

.grid-sizer { width: 33.33%; }
.gallery .gallery-item img{
  max-width: 100%;
}
.gallery .image-full {
  width: 100%;
  background: red;
}
.gallery .image-half {
  width: 50%;
  background: blue;
}
.gallery .image-third {
  width: 33.33%;
  background: green;
}
.grid-item {
  margin-bottom: 10px;
}

JavaScript

var $gallery = $(".gallery");
$gallery.imagesLoaded(function() {
  $gallery.masonry({
      percentPosition: true,
      columnWidth: '.grid-sizer',
     itemSelector: '.gallery-item',
    });
});

【问题讨论】:

  • this 有帮助吗?
  • 谢谢,在那种情况下它有效,但是当我添加更多项目时,它又坏了

标签: javascript jquery css jquery-masonry


【解决方案1】:

通过将.grid-sizer 设置为 33.33%,您构建了一个 3 列的 33.33% 的布局。

这意味着 50% 宽的列适合两列,并让 1 列的 33.33% 的空间在旁边,这对于第二个 50% 宽的列来说是不够的。

您应该为.grid-size 使用较小的乘数:

.grid-sizer {
  width: 16.667%;
}

【讨论】:

    【解决方案2】:

    我认为你需要这个

    .gal {
    	
    	
    	-webkit-column-count: 3; /* Chrome, Safari, Opera */
        -moz-column-count: 3; /* Firefox */
        column-count: 3;
    	  
    	
    	}	
    	.gal img{ width: 100%; padding: 7px 0;}
    @media (max-width: 500px) {
    		
    		.gal {
    	
    	
    	-webkit-column-count: 1; /* Chrome, Safari, Opera */
        -moz-column-count: 1; /* Firefox */
        column-count: 1;
    	  
    	
    	}
    		
    	}
    <div class="container">
    
    
    <h1>Pure Css Responsive Masonry Gallery</h1>
    <div class="col-md-12">
    <div class="row">
    <hr>
    
    	<div class="gal">
    	
    	<img src="https://preview.ibb.co/i0PmHk/1.jpg" alt="">
    	
    		<img src="https://preview.ibb.co/mWpE3Q/2.jpg" alt="">
    		
    			<img src="https://preview.ibb.co/i0PmHk/1.jpg" alt="">
    			
    			<img src="https://preview.ibb.co/mysOxk/3.jpg" alt="">
    			
    			
    		
    			<img src="https://preview.ibb.co/i0PmHk/1.jpg" alt="">
    				<img src="https://preview.ibb.co/mWpE3Q/2.jpg" alt="">
    			
    			<img src="https://preview.ibb.co/i0PmHk/1.jpg" alt="">
    			
    				<img src="https://preview.ibb.co/mysOxk/3.jpg" alt="">
    			
    				<img src="https://preview.ibb.co/i0PmHk/1.jpg" alt="">
    				<img src="https://preview.ibb.co/i0PmHk/1.jpg" alt=""><img src="https://preview.ibb.co/i0PmHk/1.jpg" alt="">
    				<img src="https://preview.ibb.co/i0PmHk/1.jpg" alt="">
    				
    				<img src="https://preview.ibb.co/i0PmHk/1.jpg" alt="">
    				<img src="https://preview.ibb.co/i0PmHk/1.jpg" alt="">
    				<img src="https://preview.ibb.co/i0PmHk/1.jpg" alt="">
    					<img src="https://preview.ibb.co/mysOxk/3.jpg" alt="">
    			
    						<img src="https://preview.ibb.co/mysOxk/3.jpg" alt="">
    			
    						<img src="https://preview.ibb.co/i0PmHk/1.jpg" alt="">
    				<img src="https://preview.ibb.co/i0PmHk/1.jpg" alt="">
    				<img src="https://preview.ibb.co/i0PmHk/1.jpg" alt="">
    				<img src="https://preview.ibb.co/mWpE3Q/2.jpg" alt="">
    				
    	</div>
    	
    </div>
    </div>
    </div>

    【讨论】:

    • 感谢 Karan 的回答,但我正在寻找可以使用 Masonry 插件实现的解决方案,因为它与一些早期版本的 IE 兼容。
    【解决方案3】:

    您需要为砌体的初始化方法添加 jquery。另外你需要删除你的外部图片加载资源。

    https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js
    

    https://jsfiddle.net/andrewgi/6m154y5z/

    【讨论】:

    • 我已经使用 JSFiddle 的 include 方法包含了 jQuery。你的看起来很有效,因为 JavaScript 由于两个 jQuery 包含而中断,因此 CSS 处理网格的呈现。至于外部图像,imagesLoaded 插件处理等待直到所有图像加载部分。
    • 好的,所以你的 grid-sizer 列宽弄乱了你的网格。您将所有列宽设置为页面的 33%,然后尝试将一列设置为页面 50% 的一半。您需要使用 33%、66% 或 100。您也可以使用 20、40、60、80。一旦您确定了正确的宽度,我可以更新答案。
    猜你喜欢
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    相关资源
    最近更新 更多