Я пытаюсь воссоздать вид кладки из блога Unify в Rails 4. http://htmlstream.com/preview/unify-v1.8/blog_masonry_3col.htmlDynamic ColumnWidth вызывая сложенных изображения в масонстве
Я купил эту тему и включил последнюю imagesLoaded и кладочные файлы внутри моего приложения (с помощью bower- рельсы).
- Кладка PACKAGED v3.3.2
- imagesLoaded PACKAGED v3.2.0
При использовании с темой поставки JS файл все изображения уложены друг на друга.
$(document).ready(function(){
var $container = $('.grid-boxes');
var gutter = 30;
var min_width = 300;
$container.imagesLoaded(function(){
$container.masonry({
itemSelector : '.grid-boxes-in',
gutterWidth: gutter,
isAnimated: true,
columnWidth: function(containerWidth) {
var box_width = (((containerWidth - 2*gutter)/3) | 0) ;
if (box_width < min_width) {
box_width = (((containerWidth - gutter)/2) | 0);
}
if (box_width < min_width) {
box_width = containerWidth;
}
$('.grid-boxes-in').width(box_width);
return box_width;
}
});
});
});
Смотреть это Js скрипку: http://jsfiddle.net/sdynfq83/
Я заметил следующие вещи:
- Изменение размера окна или освежать не исправляет проблему, так что я понял, это не ошибка загрузки изображений. Это заняло у меня много времени, чтобы понять это.
- Мой код html выглядит в порядке, поскольку у меня такие же проблемы, если я скопирую код HTML из самой темы и включаю те же файлы JS и CSS.
- Коды «.grid-boxes-quote» не имеют той же ширины, что и другие квадраты сетки. Это странно, потому что все они должны быть одинаковыми, поскольку все ящики имеют класс .grid-boxes-in. https://jsfiddle.net/sdynfq83/embedded/result/
При удалении кода ColumnWidth и заменить его на фиксированное число (300) + добавление ширины сетки коробок в то похоже на работу. Это не то, что я хочу, так как размеры изображений больше не верны.
CSS
.blog_masonry_3col .grid-boxes-in {
padding: 0;
margin-bottom: 30px;
border: solid 1px #eee;
/* added width */
width: 300px;
}
JS
$(document).ready(function(){
var $container = $('.grid-boxes');
var gutter = 30;
var min_width = 300;
$container.imagesLoaded(function(){
$container.masonry({
itemSelector : '.grid-boxes-in',
gutterWidth: gutter,
isAnimated: true,
/*columnWidth: function(containerWidth) {
var box_width = (((containerWidth - 2*gutter)/3) | 0) ;
if (box_width < min_width) {
box_width = (((containerWidth - gutter)/2) | 0);
}
if (box_width < min_width) {
box_width = containerWidth;
}
$('.grid-boxes-in').width(box_width);
return box_width;
}*/
columnWidth: 300
});
});
});
JS скрипка: http://jsfiddle.net/8c0r06a6/2/
Тема сами поставляет старую версию кладки. В котором код работает. Изображения сохраняют перекрытие (этот может фиксироваться путем изменения размера или обновления окна).
Я же хочу, чтобы обновить его до последней версии кладки и изображения, загруженного таким образом я могу продолжать использовать беседку легко обновлять эти файлы. Я также надеюсь, что использование последней версии всего исправляет перекрывающиеся изображения на скриншоте 2. У меня есть рабочий скрипт JS ниже со старым кодом.
/**
* jQuery Masonry v2.1.05
* A dynamic layout plugin for jQuery
* The flip-side of CSS Floats
* http://masonry.desandro.com
*
* Licensed under the MIT license.
http://jsfiddle.net/ytLf3bue/1/
Обобщенная Я на следующие вопросы, пожалуйста, имейте в виду, что я начинающий хобби кодировщик и у меня нет большого опыта JS:
- Является ли это умный Идея всегда использовать последнюю версию кода масонства и изображенийLoaded, или я должен просто придерживаться прилагаемых файлов?
- Если 1. есть yes => как я могу исправить код, чтобы изображения не были сложены друг на друга?
- Если 1. нет => как я могу исправить код, чтобы совпадающие изображения и фоновое кровотечение на снимках экрана 2 и 3 исчезли?
Кажется, что в вашей скрипке ширина по-прежнему не верна. Он просто берет всю ширину своего родительского контейнера. Если я получу правильный результат, он должен быть сеткой, как и другие скрипки. Также я использую плагин imagesLoaded (рекомендуется масонством) для обнаружения загрузки изображений. – Christoph
Часть проблемы заключается в том, что ваш селектор кладки - это div. И так как вы не установили ширину или не объявили ее как встроенный блок, тогда вычисленная ширина, естественно, составляет 100% от ее контейнера. –