Проблема с использованием flex-wrap, чтобы перейти к следующему ряду после 5-го элемента. - PullRequest
0 голосов
/ 09 декабря 2018

Я работал над галереей изображений, используя flexbox с переходом на основе flex, чтобы увеличивать и уменьшать элементы при наведении.У меня проблема с адаптацией галереи для использования flex-wrap, чтобы перейти к следующему ряду после 5-го элемента.

Я надеюсь, что он заработает, чтобы в каждой строке было по 5 элементов, которые растут и уменьшаются в одной строке.После того, как шестой элемент помещен в контейнер, я хочу перейти к следующей строке, чтобы элементы продолжали функционировать, как и ожидалось (с переходами).

  • Элементы растягиваются, чтобы заполнить доступное пространство (ширина 20% для каждого из 5 элементов)
  • -> При наведении курсора другие элементы сжимаются на 5% в общей сложности на 20%
  • Рост элемента с навесом увеличивается до 40%
  • Шестойэлемент, который перемещается в следующую строку, наследует размер доступного пространства
  • Седьмой элемент занимает 50% строки, восьмой 33,3% ... и т. д.

Это то, что у меня сейчас есть: https://codepen.io/TommyBoyLab/pen/YdzGjB

(адаптировано из: https://codepen.io/joliveras/pen/GpLVKv)

HTML элемента:

<div class="container">
  <div class="item" style="background:url() center/cover">

CSS:

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.container {
  display: flex;
  flex-flow: row wrap;
  width: 100%;
}
.container .item {
  display: grid;
  position: relative;
  flex: 1;
  transition: 500ms;
  min-width: 15%;
  max-width: 20%;
  height: 50vh;
}
.container .item:hover {
  transition: 500ms;
  max-width: 40%;
  flex-grow: 1;
}
.container .content {
  margin: auto;
  font-size: 1.5em;
}

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Дополнение к CSS:

.item:first-child:nth-last-child(n + 5),
.item:first-child:nth-last-child(n + 5) ~ *{
    min-width: 17%;

}
0 голосов
/ 09 декабря 2018

Похоже, вам нужно только увеличить значение flex-grow при наведении:

* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

.container {
  display: flex;
  flex-flow: row wrap;
  width: 100%;
}
.container .item {
  display: grid;
  position: relative;
  flex: 1;
  transition: 500ms;
  min-width: 15%;
  max-width: 20%;
  height: 50vh;
  
}
.container .item:hover {
  transition: 500ms;
  max-width: 40%;
  flex-grow: 5;
}
.container .content {
  margin: auto;
  font-size: 1.5em;
}
<div class="container">
  <div class="item" style="background:url(https://images.unsplash.com/photo-1544227966-c89fe5bc0904?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1644&q=80) center/cover">
    <div class="content">
      <h3>Title</h3>
      <p>Lorem ipsum amet</p>
    </div>
  </div>
  <div class="item" style="background:url(https://images.unsplash.com/photo-1544090372-c1fe7f8dee5a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1050&q=80) center/cover">
    <div class="content">
      <h3>Title</h3>
      <p>Lorem ipsum amet</p>
    </div>
  </div>
  <div class="item" style="background:url(https://images.unsplash.com/photo-1544200502-6652e105f865?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1500&q=80) center/cover">
    <div class="content">
      <h3>Title</h3>
      <p>Lorem ipsum amet</p>
    </div>
  </div>
  <div class="item" style="background:url(https://images.unsplash.com/photo-1544227966-c89fe5bc0904?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1644&q=80) center/cover">
    <div class="content">
      <h3>Title</h3>
      <p>Lorem ipsum amet</p>
    </div>
  </div>
  <div class="item" style="background:url(https://images.unsplash.com/photo-1544090372-c1fe7f8dee5a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1050&q=80) center/cover">
    <div class="content">
      <h3>Title</h3>
      <p>Lorem ipsum amet</p>
    </div>
  </div>
  <div class="item" style="background:url(https://images.unsplash.com/photo-1544200502-6652e105f865?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1500&q=80) center/cover">
    <div class="content">
      <h3>Title</h3>
      <p>Lorem ipsum amet</p>
    </div>
  </div>
  <div class="item" style="background:url(https://images.unsplash.com/photo-1544200502-6652e105f865?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1500&q=80) center/cover">
    <div class="content">
      <h3>Title</h3>
      <p>Lorem ipsum amet</p>
    </div>
  </div>
  <div class="item" style="background:url(https://images.unsplash.com/photo-1544227966-c89fe5bc0904?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1644&q=80) center/cover">
    <div class="content">
      <h3>Title</h3>
      <p>Lorem ipsum amet</p>
    </div>
  </div>
  <div class="item" style="background:url(https://images.unsplash.com/photo-1544090372-c1fe7f8dee5a?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1050&q=80) center/cover">
    <div class="content">
      <h3>Title</h3>
      <p>Lorem ipsum amet</p>
    </div>
  </div>
  <div class="item" style="background:url(https://images.unsplash.com/photo-1544200502-6652e105f865?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1500&q=80) center/cover">
    <div class="content">
      <h3>Title</h3>
      <p>Lorem ipsum amet</p>
    </div>
  </div>

</div>
...