Отправить элементы div в другой div

0

У меня есть изображения разной высоты, и я хочу разместить их в черепичной галерее, как показано на рисунке ниже:

Изображение 174551

Однако я также хочу, чтобы это было репрессивным, поэтому мой подход к этой работе был следующим:

1) Использование HTML Я создал три дивы, #grid1, #grid2 и #grid3. И изображения помещаются внутри этих трех сеток в div div, у которых есть класс .gridElement который содержит изображения.

<!--Grid System-->
<div id="grid1">
    <!--Grid 1-->
    <div class="gridElement">
        <img alt="image" src="assets/images/image.jpg">
    </div>
</div>
<div id="grid2">
    <!--Grid 2-->
    <div class="gridElement">
        <img alt="image" src="assets/images/image.jpg">
    </div>
</div>
<div id="grid3">
    <!--Grid 3-->
    <div class="gridElement">
        <img alt="image" src="assets/images/image.jpg">
    </div>
</div>
<!--/Grid System-->

2) Вот CSS, используя Media Query:

/*Grid System*/
#grid1,#grid2,#grid3 {
   width: 33.333%;
   float: left;
}

   #grid1 {
      padding-right: 20px;
   }

   #grid2 {
      padding: 0 10px;
   }

   #grid3 {
      padding-left: 20px;
   }

   /*Gird Elements*/
   .gridElement {
      margin-bottom: 30px;
      overflow: hidden;
   }

   #grid1 .gridElement:last-of-type,
   #grid2 .gridElement:last-of-type,
   #grid3 .gridElement:last-of-type {
      margin-bottom: 0;
   }

   #grid1 img,#grid2 img,#grid3 img {
      width: 100%;
   }

а также

@media screen and (max-width: 1024px) {
   /*Grid System*/
   #grid1,#grid2,#grid3 {
      width: 50%;
   }

   #grid3 {
      display: none;
   }
}

а также

@media screen and (max-width: 770px) {
   /*Grid System*/
   #grid1,#grid2,#grid3 {
      width: 100%;
   }

   #grid1,#grid2,#grid3 {
      padding: 0;
      display: block;
   }

   #grid1 .gridElement:last-of-type,
   #grid2 .gridElement:last-of-type {
      margin-bottom: 30px;
   }

а также

@media screen and (max-width: 500px) {
   /*Grid System*/
   .gridElement {
      margin-bottom: 20px;
   }

   #grid1 .gridElement:last-of-type,
   #grid2 .gridElement:last-of-type {
      margin-bottom: 20px;
   }

Они теории: когда размер экрана превышает 1024 пикселей, по умолчанию будут отображаться три сетки. Однако, когда размер экрана ниже 1024px и выше 770px с использованием CSS #grid3 скрыт и с использованием JavaScript, я пытаюсь отправить все .girdElements которые находятся внутри # grid3, равно равно # grid1 и # grid2. Когда размер экрана ниже 770 пикселей, все вернутся в нормальное состояние, и все сетки будут показаны.

Проблема? Мне удалось получить все, работая, но JavaScript - пожалуйста, кто-нибудь может помочь мне создать функцию, которая будет отправлять все.girdElements, которые находятся внутри # grid3 одинаково, на # grid1 и # grid2, когда размер экрана ниже 1024 пикселей и выше 770 пикселей? "при загрузке и изменении размера".

  • 0
    Зачем изобретать велосипед? Используйте библиотеку, как Modernizr.
  • 0
    Я не хочу использовать плагины, я хочу что-то очень простое + я почти там! Я потратил на это много времени, но мне действительно нужна помощь, чтобы он заработал! пожалуйста

3 ответа

0
Лучший ответ

Вы можете попробовать что-то вроде этого:

    var toggle = true;
    $('#grid3').children('.gridElement').each(function (index) {
        if (toggle) {
            $('#grid1').append($(this));
            toggle = false;
        } else {
            $('#grid2').append($(this));
            toggle = true;
        }

Вот рабочий пример JSFiddle, сортировка

элементы внутри сеток

  • 0
    Mate это почти сработало, но он просто отправил все элементы grid3 только в grid2 и ничего не в grid1. Есть идеи, пожалуйста?
  • 0
    Loai! Я внес изменения в свой ответ и предоставил работающую JSFiddle, наслаждайтесь!
Показать ещё 5 комментариев
1

Вы можете использовать кладку для достижения аналогичного эффекта. Он использует абсолютное позиционирование вместо фиксированного количества столбцов. В любом случае, он выглядит одинаково и приспосабливается к ширине экрана.

  • 0
    Я не могу использовать плагины друг
0

Это решение лучше с jQuery, но есть способы вычислить фактическую высоту элементов.

Во-первых, вы должны пометить каждый элемент в grid1, grid2, grid3 как принадлежащий их соответствующей сетке, например, используя класс или данные. Затем это своего рода "хронология", которая хранит "порядок" для каждого элемента.

Если вы хотите, чтобы все элементы в grid3 были добавлены к grid1 и grid2, вы можете применить следующий алгоритм:

  1. Получите элементы в grid3, отсортированные по полю. значения данных и т.д., которые вы указали ранее.
  2. Для каждого элемента:

    а. Вычислите ширину сетки 1 и сравните ее с сеткой grid2. б. Если grid2 выше, добавьте элемент в grid1. В противном случае добавьте его в grid2.

  3. Столбец grid3 будет скрыт.

Рекомендуемый подход - использование jQuery для оценки.height() grid1 и grid2 и перемещения элементов.

Чтобы вернуться к компоновке 3-col, просто возьмите элементы с маркером grid3 и поместите их обратно в grid3, упорядоченный по хронологии.

(черт побери, все еще возиться с уценкой, пожалуйста, если редактор может мне помочь...)

Попробуйте этот пример кода (не считая факта о критериях сортировки - не гарантируется безупречность - это просто для иллюстрации идеи):

var grid1 = $("#grid1");
var grid2 = $("#grid2");
var grid3 = $("#grid3");

//compressing - distributing grid3 between grid1 and grid2
function compress()
{
    grid3.hide();
    $(".item-in-grid3").each(function(i, e){
        //never assign "width:" to any grid (1, 2, 3) in css, so it can
        //be dynamic and compute height and compare them on each iteration.
        if (grid1.height() > grid2.height())
         {
            $(this).appendTo(grid2);
        }
        else
        {
            $(this).appendTo(grid1);
        }
    });
}
//return back the elements to grid3
function decompress()
{
    $(".item-in-grid3").each(function(i, e){
        $(this).appendTo(grid3);
    });
    grid3.show();
}
  • 0
    Любые идеи о том, как мы можем применить это на практике? не могли бы вы пнуть меня, пожалуйста?
  • 0
    редактировать мой ответ, чтобы включить код ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню