div с flex-элементами отображения парить не выше других элементов - PullRequest
0 голосов
/ 29 марта 2020

Я пытаюсь добавить div с flex-дисплеем с flex-wrap: wrap в качестве контейнера <div>, и он содержит элемент <div> увеличения при наведении. Моя проблема при наведении, пункт go новая строка. Я хочу, чтобы предмет оставался в том же положении и парил над другими предметами.

.item {
  width: 50%;
  background-color: lightblue;
  overflow: hidden;
  font-size: xx-large;
}

.item:hover {
  width: 70%;
  background-color: lightgreen;
}
<div style="display:flex; flex-wrap:wrap;">
  <div class="item">
    item 1
  </div>
  <div class="item">
    item 2
  </div>
  <div class="item">
    item 3
  </div>
  <div class="item">
    item 4
  </div>
</div>

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Если у вас есть flex-wrap, все, что превышает ширину контейнера (по умолчанию 100%), будет помещено в новую строку, где у вас есть 50% и попытка добавить 70%, это не будет держать его в той же строке

Для достижения желаемого результата вы можете поместить строки в свои собственные контейнеры, показанные ниже

<div class="item-container">
      <div class="item">
        item 1
      </div>
      <div class="item">
        item 2
      </div>
    </div>
    <div class="item-container">
      <div class="item">
        item 3
      </div>
      <div class="item">
        item 4
      </div>
    </div>
.item-container {
  display: flex;
}

.item {
  flex: 50%;
  background-color: lightblue;
  overflow: hidden;
  font-size: xx-large;
}

.item:hover {
  flex: 70%;
  background-color: lightgreen;
}
0 голосов
/ 29 марта 2020

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

использование позиции Относительно, мы можем извлечь sh их справа и снова использовать псевдоэлемент, чтобы имитировать c расширение ширины, потому что если мы увеличим ширину, элемент будет перенесен благодаря вашим flex-wrap:wrap;

Это означает, что это просто визуально, если есть длинный контент, он не будет работать так хорошо, и вам придется держать видимым переполнение.

.item {
  width: 50%;
  background-color: lightblue;
  /* overflow: hidden; */      /* Removed  */ 
  font-size: xx-large;
  position: relative;
}

.item:hover {
  background-color: lightgreen;
}

.item:before {
  height: 100%;
  background: lightgreen;
  position: absolute;
  width: 60%;
  top: 0;
  left: 100%;
  z-index: 1;
}

.item:hover:before {
  content: '';
}

/* select only the elements on right side */
.item:nth-child(2n):hover {
  right: 30%;
}
<div style="display:flex; flex-wrap:wrap;">
  <div class="item">item 1</div>
  <div class="item">item 2</div>
  <div class="item">item 3</div>
  <div class="item">item 4</div>
</div>

Я предлагаю вам переосмыслить свой макет, если вы хотите достичь желаемого конечного результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...