2016-02-24 68 views
0

我想實現響應圖像磚石畫廊。然而,圖像都被拉伸。我有這樣的小提琴:砌體畫廊拉伸所有東西水平

https://jsfiddle.net/4h855fu3/

$(document).ready(function() { 
 
    $('#container').masonry({ 
 
    "itemSelector": ".item", 
 
    "columnWidth": ".grid-sizer", 
 
    }); 
 
}); 
 

 
$('#loadMore').click(function() { 
 
    $(this).hide(); 
 
    for (var i = 0; i < 5; i++) { 
 
    var randomWidth = Math.round((Math.random() * (4) + 5) * 100); 
 
    var randomHeight = Math.round((Math.random() * (4) + 5) * 100); 
 
    var element = $('<div class="item"><img src="https://placehold.it/' + randomWidth + 'x' + randomHeight + '" class="image" width="' + randomWidth + '" height="' + randomHeight + '"><a class="overlay" href="#"><h3 class="title">Some title</h3><div class="description">' + '<p>Lorem ipsum dolor sit amet, <br>consectetur adipisicing elit.</p></div></a></div>'); 
 

 
    $('#container').append(element).masonry('appended', element, true);; 
 
    } 
 

 
    $('#container').imagesLoaded().progress(function() { 
 
    $('#loadMore').show(); 
 
    }); 
 
});
html { 
 
    overflow-y: scroll; 
 
} 
 
body { 
 
    font-family: sans-serif; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
.item { 
 
    float: left; 
 
    position: relative; 
 
    line-height: 1em; 
 
} 
 
.grid-sizer { 
 
    width: 20%; 
 
} 
 
.item { 
 
    width: 20%; 
 
} 
 
@media screen and (max-width: 1224px) { 
 
    /* 10 columns for larger screens */ 
 
    .grid-sizer { 
 
    width: 33.33%; 
 
    } 
 
    .item { 
 
    width: 33.33%; 
 
    } 
 
} 
 
@media screen and (max-width: 720px) { 
 
    /* 10 columns for larger screens */ 
 
    .grid-sizer { 
 
    width: 50%; 
 
    } 
 
    .item { 
 
    width: 50%; 
 
    } 
 
} 
 
@media screen and (max-width: 480px) { 
 
    /* 10 columns for larger screens */ 
 
    .grid-sizer { 
 
    width: 100%; 
 
    } 
 
    .item { 
 
    width: 100%; 
 
    } 
 
} 
 
.image { 
 
    max-width: 100%; 
 
    margin: 0; 
 
    display: block; 
 
} 
 
.image:after { 
 
    clear: both; 
 
} 
 
.overlay { 
 
    width: 100%; 
 
    height: 100%; 
 
    background-color: rgba(0, 0, 0, 0.5); 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
    text-decoration: none; 
 
    color: #fff; 
 
    display: none; 
 
} 
 
.overlay .title { 
 
    text-align: center; 
 
    font-size: 30px; 
 
} 
 
.overlay .description { 
 
    position: absolute; 
 
    bottom: 0; 
 
    left: 0; 
 
    background-color: rgba(0, 0, 0, 0.80); 
 
    width: 100%; 
 
    margin: 0; 
 
} 
 
.overlay .description p { 
 
    margin: 20px; 
 
} 
 
.item:hover .overlay { 
 
    display: block; 
 
} 
 
#loadMore { 
 
    position: fixed; 
 
    top: 0px; 
 
    left: 0px; 
 
} 
 
#bodycontent { 
 
    width: 90%; 
 
    margin: 0 auto; 
 
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/normalize/3.0.3/normalize.min.css" rel="stylesheet" /> 
 

 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/masonry/4.0.0/masonry.pkgd.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/4.1.0/imagesloaded.pkgd.min.js"></script> 
 

 

 
<div id="bodycontent"> 
 
    <div id="container"> 
 
    <div class="grid-sizer"></div> 
 
    </div> 
 
</div> 
 

 
<button id="loadMore" type="button">Load more</button>

點擊 「加載更多」 按鈕,每當需要。除了圖像被拉伸之外,它幾乎效果很好。如何以正確的分辨率獲取圖像?

回答

1

的基本問題是,設置顯式寬度/高度,但然後,通過.image類,設置一個max-width就可以了。這意味着寬度將受到限制,但因爲它是很難一套高度將不會提供相應的跟進。

你應該(寬/高屬性)從img標籤去除尺寸。

這將cr eate那所以你需要調用.masonry('layout')一旦加載圖像砌築不能從一開始就計算寬度/高度的問題(在現有imagesLoaded處理


$(document).ready(function() { 
 
    $('#container').masonry({ 
 
    "itemSelector": ".item", 
 
    "columnWidth": ".grid-sizer", 
 
    }); 
 
}); 
 

 
$('#loadMore').click(function() { 
 
    $(this).hide(); 
 
    for (var i = 0; i < 5; i++) { 
 
    var randomWidth = Math.round((Math.random() * (4) + 5) * 100); 
 
    var randomHeight = Math.round((Math.random() * (4) + 5) * 100); 
 
    var element = $('<div class="item"><img src="https://placehold.it/' + randomWidth + 'x' + randomHeight + '" class="image"><a class="overlay" href="#"><h3 class="title">Some title</h3><div class="description">' + '<p>Lorem ipsum dolor sit amet, <br>consectetur adipisicing elit.</p></div></a></div>'); 
 

 
    $('#container').append(element).masonry('appended', element, true);; 
 
    } 
 

 
    $('#container').imagesLoaded().progress(function() { 
 
    $('#loadMore').show(); 
 
    $('#container').masonry('layout'); 
 
    }); 
 
});
html { 
 
    overflow-y: scroll; 
 
} 
 
body { 
 
    font-family: sans-serif; 
 
    margin: 0; 
 
    padding: 0; 
 
} 
 
.item { 
 
    float: left; 
 
    position: relative; 
 
    line-height: 1em; 
 
} 
 
.grid-sizer { 
 
    width: 20%; 
 
} 
 
.item { 
 
    width: 20%; 
 
} 
 
@media screen and (max-width: 1224px) { 
 
    /* 10 columns for larger screens */ 
 
    .grid-sizer { 
 
    width: 33.33%; 
 
    } 
 
    .item { 
 
    width: 33.33%; 
 
    } 
 
} 
 
@media screen and (max-width: 720px) { 
 
    /* 10 columns for larger screens */ 
 
    .grid-sizer { 
 
    width: 50%; 
 
    } 
 
    .item { 
 
    width: 50%; 
 
    } 
 
} 
 
@media screen and (max-width: 480px) { 
 
    /* 10 columns for larger screens */ 
 
    .grid-sizer { 
 
    width: 100%; 
 
    } 
 
    .item { 
 
    width: 100%; 
 
    } 
 
} 
 
.image { 
 
    max-width: 100%; 
 
    margin: 0; 
 
    display: block; 
 
} 
 
.image:after { 
 
    clear: both; 
 
} 
 
.overlay { 
 
    width: 100%; 
 
    height: 100%; 
 
    background-color: rgba(0, 0, 0, 0.5); 
 
    position: absolute; 
 
    top: 0; 
 
    left: 0; 
 
    text-decoration: none; 
 
    color: #fff; 
 
    display: none; 
 
} 
 
.overlay .title { 
 
    text-align: center; 
 
    font-size: 30px; 
 
} 
 
.overlay .description { 
 
    position: absolute; 
 
    bottom: 0; 
 
    left: 0; 
 
    background-color: rgba(0, 0, 0, 0.80); 
 
    width: 100%; 
 
    margin: 0; 
 
} 
 
.overlay .description p { 
 
    margin: 20px; 
 
} 
 
.item:hover .overlay { 
 
    display: block; 
 
} 
 
#loadMore { 
 
    position: fixed; 
 
    top: 0px; 
 
    left: 0px; 
 
} 
 
#bodycontent { 
 
    width: 90%; 
 
    margin: 0 auto; 
 
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/normalize/3.0.3/normalize.min.css" rel="stylesheet" /> 
 

 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/masonry/4.0.0/masonry.pkgd.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/4.1.0/imagesloaded.pkgd.min.js"></script> 
 

 

 
<div id="bodycontent"> 
 
    <div id="container"> 
 
    <div class="grid-sizer"></div> 
 
    </div> 
 
</div> 
 

 
<button id="loadMore" type="button">Load more</button>

+0

由於某種原因,該佈局功能在我之前不適用,我想我錯了。 – ohyeah

+0

@ ohyeah它不會自行工作。它在這個版本中起作用,因爲我們已經從'img'標籤中刪除了'width'和'height'屬性。 –

+1

我也刪除了寬度和高度標籤。我之前將它們包括在內,以便與不同的框架一起使用,但不再需要它們。一切都按照預期工作,謝謝你的幫助! – ohyeah

-2

圖像寬度由jquery控制,並基於瀏覽器寬度。但高度不是。 兩種方法。

  1. 從img標籤中刪除height屬性。在img標籤
  2. 除以高度由2(高度=「 '+ randomHeight/2 +')
+0

爲什麼將高度除以2解決方案?它只會使用不同的尺寸 –