Как корректно сверстать страницу чата на мобильной версии?

Не могу понять как правильно сверстать страницу чата для мобильной версии Где сверху хедер, посередине сама переписка и снизу закрепленный инпут Оно как бы вроде просто звучит, но на деле инпут снизу может увеличиваться если ввести много текста, до определенной высоты И соответственно уже отправленные сообщения выше при увеличении инпута также должны подниматься (то есть просто position: fixed не покатит) И само собой при нажатии на инпут с телефона у нас вылезает клавиатура, то есть инпут должен быть в зоне видимости (над клавиатурой)

То что имеется: https://codesandbox.io/s/silly-pine-gtuwf На телефоне футер не показывается:

PS Из рабочих примеров того что мне нужно нашел только vk. В мобильной версии vk сделано именно так как мне нужно, но не ясно как.


Ответы (2 шт):

Автор решения: Ruslan Mart
<div class="container">
  <div class="header"></div>
  <div class="content">
    <div class="scroll">
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
      <p>text</p>
    </div>
  </div>
  <div class="footer"></div>
</div>
.container {
  bottom: 0;
  display: flex;
  flex-direction: column;
  left: 0;
  position: fixed;
  right: 0;
  top: 0;
}

.header {
  background-color: blue;
  min-height: 30px;
}

.content {
  flex-grow: 1;
  position: relative;
}

.scroll {
  bottom: 0;
  left: 0;
  overflow: auto;
  position: absolute;
  right: 0;
  top: 0;
}

.footer {
  background-color: red;
  min-height: 30px;
}
→ Ссылка
Автор решения: Bear Vorkuta

Попробуйте так. Чтобы на грид не переделывать, на флексе кое что добавить можно. В .chat добавил justify-content: space-between; В .chat__content добавил flex: 1 1 auto; Вместо textarea сделал div c атрибутом contenteditable. https://jsfiddle.net/sqxgphLj/

→ Ссылка