Остановить рост контейнера flexbox на основе детей без абсолютных размеров? - PullRequest
0 голосов
/ 01 февраля 2020

Вот кодекс моей проблемы: https://codepen.io/maximilian118/pen/VwYomJv

У меня есть боковая панель для этого компонента React, которая содержит раздел комментариев.

enter image description here

Высота боковой панели определяется изображением. Div "creator" в верхней части боковой панели и поле ввода в нижней части имеют абсолютную высоту, и я хочу использовать flex-grow в разделе комментариев, чтобы заполнить оставшееся пространство между ними.

Проблема в том, что, когда я добавляю больше детей в раздел комментариев, он оборачивает их все и увеличивается в высоту:

enter image description here

Я бы хотел высоту раздела комментариев остаться без изменения абсолютной высоты и просто использовать overflow-y: scroll. Как это можно сделать?

Реагировать JS:

<div className={`photo-card-wrapper ${imgClicked}`}>
  <div className="img-wrapper" onClick={() => imgClickedHandler()}>
    {img}
  </div>
  <div className="sidebar">
    <div className="creator">
      {profileImg}
      <div className="creator-info">
        <h5>{name}</h5>
        <p>{username}</p>
      </div>
    </div>
    <div className="comments">
      {comments.map(comment => (
        <div className="comment">
          <img alt="Profile Image" src={require(`../../static/defaults/${comment.profileImg}`)}/>
          <p>{comment.comment}</p>
        </div>
      ))}
    </div>
    <input type="text" name="comment" id="comment" placeholder="Write a comment" />
  </div>
</div>

S CSS:

.photo-card-wrapper {
  width: 100%;
  display: flex;
  border-radius: 5px;
  overflow: hidden;
  margin-bottom: 15px;
  border: 1px solid $color-1;

  h5 {
    font-weight: 400;
    letter-spacing: 1px;
    cursor: pointer;
  }

  p {
    font-size: 0.7em;
    cursor: pointer;
    color: $color-2;
  }

  .img-wrapper {
    display: flex;
    width: 75%;

    img {
      width: 100%
    }
  }

  .sidebar {
    width: 25%;
    background: $white;
    display: flex;
    flex-flow: column nowrap;
    justify-content: space-between;

    .creator {
      width: 100%;
      padding: 10px;
      display: flex;
      align-items: center;
      border-bottom: 1px solid $color-1;
      box-sizing: border-box;
      cursor: pointer;

      img {
        width: 40px;
        height: 40px;
        border-radius: 40px;
        background-image: url('../../static/defaults/placeholder.png');
        background-size: contain;
        margin-right: 10px;
        flex-shrink: 0;
      }

      .creator-info {
        height: 100%;
        display: flex;
        flex-flow: column nowrap;
        justify-content: space-evenly;
      }
    }

    .comments {
      width: 100%;
      padding: 10px;
      flex-grow: 1;
      box-sizing: border-box;
      overflow-y: scroll;

      .comment {
        margin-bottom: 10px;
        display: flex;
        cursor: pointer;

        p {
          background-color: $color-1;
          border-radius: 5px;
          padding: 2px 5px;
        }

        img {
          width: 20px;
          height: 20px;
          border-radius: 20px;
          background-image: url('../../static/defaults/placeholder.png');
          background-size: contain;
          margin-right: 5px;
          flex-shrink: 0;
        }
      }
    }

    input {
      height: 35px;
      border: none;
      font-size: 0.9em;
      padding: 5px 10px;
      box-sizing: border-box;
      border-bottom-right-radius: 5px;
      border-top: 1px solid $color-1;
    }
  }
}

.img-clicked {
  .img-wrapper {
    width: 100vw;
    height: 100vh;
    background: $black;
    position: fixed;
    flex-flow: column nowrap;
    justify-content: center;
    border-radius: 0px;
    border: none;
    top: 0;
    left: 0;

    img {
      border-radius: 0px !important;
      max-width: 100vw;
      max-height: 100vh;
      object-fit: contain;
    }
  }

  .sidebar {
    display: none;
  }
}

1 Ответ

0 голосов
/ 02 февраля 2020

Добавление align-items: flex-start на .photo-card-wrapper должно помочь вам. Поведение по умолчанию состоит в том, чтобы растянуть все элементы и установить значение flex-start, чтобы все они придерживались вершины.

Подробнее о свойстве align-items .

...