Как создать чат-клиент с вводом, прикрепленным к нижней части страницы, навигационной панелью вверху и прокручиваемой внутренней областью содержимого? - PullRequest
0 голосов
/ 21 февраля 2020

Я поигрался с jsfiddle, после того, как не смог заставить дизайн работать в моем проекте, и я все еще терплю неудачу. Я использую Tailwind, но это не имеет значения, я могу стилизовать все, что мне нужно, любым способом, который мне нужен.

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

В псевдокоде я хочу, чтобы страница выглядела следующим образом:

<header> #static/attached to top. No scroll bar to the side.
<body> #scrollable. Scroll bar always present.
<text input> #static/attached to bottom. No scroll bar to the side.

Здесь указана JS скрипка (https://jsfiddle.net/o6yjnmtp/2/), а CSS ниже. Элементы более или менее должны оставаться там из-за шаблонов. У меня есть полный контроль над стилем всех элементов. Если вы посмотрите на JSFiddle, обратите внимание, что у меня также есть тег body со стилем.

<body class="min-w-full min-h-full h-screen flex flex-col">
  <div name="window" class="min-w-full overflow-hidden flex flex-col">
    <div class="overflow-hidden flex flex-col">
      <div id="story" class="min-w-full flex flex-col flex-1 justify-end overflow-y-scroll" phx-window-keyup="hotkey">
          # CONTENT GOES HERE
      </div>
    </div>

    <input id="prompt" type="textarea" class="min-w-full rounded-lg resize-y flex-shrink" placeholder="Enter Commands Here...">

  </div>
</body>

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

1 Ответ

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

HTML

  <div class="flex-container">
      <div class="sticky-header">
        this is a sticky header
      </div>
      <div class="content">
        <span id="41e83ff8-2fba-49b5-a77b-bde56e2bf6f1"><span class="text-gray-700">&gt; east</span></span>
        <span id="5a7e216a-5e92-4caf-9966-6b97ff91ccff"><span class="text-gray-700">&gt; north</span></span>
        <span id="1999626e-c3df-4425-8e6b-840437402a96"><span class="text-gray-700">&gt; west</span></span>
        <span id="f219795f-78d7-43fa-a9f0-73aec6fc4913"><span class="text-gray-700">&gt; out</span></span>
        <span id="52fc761b-f09b-4091-99ce-1e43f6d6f9d2"><span class="text-gray-700">&gt; west</span></span>
        <span id="242903c4-fe4c-4f68-ba30-66bd3b8b113e"><span class="text-gray-700">&gt; north</span></span>
        <span id="cd06e6ca-eec7-4fe5-aac3-437704f8f4c6"><span class="text-gray-700">&gt; west</span></span>
        <span id="c8621689-1fe4-44e2-a032-8926905784ab"><span class="text-gray-700">&gt; east</span></span>
        <span id="cbd163a3-bc42-462e-b6b4-85939d521447"><span class="text-gray-700">&gt; west</span></span>
        <span id="a9679d11-c537-4d27-a1ec-f9411a39a1cf"><span class="text-gray-700">&gt; east</span></span>
        <span id="cc455404-66d7-45ad-a3d3-23d674ac2f95"><span class="text-gray-700">&gt; out</span></span>
        <span id="77a031f5-d963-474c-bb03-e28db208344a"><span class="text-gray-700">&gt; west</span></span>
        <span id="cb8cfe80-1fcb-4eeb-bed7-c3e7ec3996b2"><span class="text-gray-700">&gt; east</span></span>
        <span id="d5d9608b-f79e-4d47-8d20-5eae897ed6e4"><span class="text-gray-700">&gt; out</span></span>
        <span id="49825903-2a13-449b-82b3-878bd91b3628"><span class="text-gray-700">&gt; west</span></span>
        <span id="01030630-7755-4ea5-be8a-9a27e13dce49"><span class="text-gray-700">&gt; east</span></span>
        <span id="08ea7509-49dd-4478-9167-eb084ff674f4"><span class="text-gray-700">&gt; out</span></span>
        <span id="85db6407-efa5-4b9b-bad6-05fe0c154bb7"><span class="text-gray-700">&gt; west</span></span>
        <span id="404c4436-701f-4bb1-86d0-bcbfca3a33af"><span class="text-gray-700">&gt; east</span></span>
        <span id="eb184568-b8f0-414e-8e29-a8262ddf6acb"><span class="text-gray-700">&gt; out</span></span>
        <span id="a38db761-b609-4c95-9250-1f86c2dbc29b"><span class="text-gray-700">&gt; west</span></span>
        <span id="e1929b54-d924-4689-8ffd-2278171f5ff5"><span class="text-gray-700">&gt; east</span></span>
        <span id="058f3c4d-d3b4-4072-a7f1-74fe4f48870d"><span class="text-gray-700">&gt; out</span></span>
        <span id="a82032da-5a25-4028-892b-acd6afce379d"><span class="text-gray-700">&gt; west</span></span>
        <span id="179af250-b26f-4144-a385-23e3a97890c8"><span class="text-gray-700">&gt; east</span></span>
        <span id="be6daa48-08b9-45b8-89cb-c06fd78d6950"><span class="text-gray-700">&gt; out</span></span>
        <span id="540a6d9f-06e2-4532-9ce3-f52d24c722de"><span class="text-gray-700">&gt; west</span></span>
        <span id="b6ad2827-f72a-46bd-9499-6f16f934d886"><span class="text-gray-700">&gt; east</span></span>
        <span id="4009ea00-fb0c-4a97-b5df-b6ec5a89eb6e"><span class="text-gray-700">&gt; out</span></span>
        <span id="57e9c0fc-2d75-49a8-9165-4fa5258e433b"><span class="text-gray-700">&gt; west</span></span>
        <span id="16881986-3ba0-4198-b2db-f3e55cd94f13"><span class="text-gray-700">&gt; east</span></span>
        <span id="94363d68-681d-4115-afbf-6e0a2dfae828"><span class="text-gray-700">&gt; out</span></span>
        <span id="aceff966-6566-4e66-8025-78a6dd58f5ce"><span class="text-gray-700">&gt; west</span></span>
        <span id="e4acb594-8e42-4e4d-aae5-816014e585ad"><span class="text-gray-700">&gt; east</span></span>
        <span id="65b38138-cf80-49e7-b378-4d2833d3230e"><span class="text-gray-700">&gt; out</span></span>
        <span id="ce74ebe3-6743-4063-9655-af7ba7778dab"><span class="text-gray-700">&gt; west</span></span>
        <span id="af254fcb-8157-46ad-bea1-b16e531b3c78"><span class="text-gray-700">&gt; east</span></span>
        <span id="7cfba486-d961-4524-9ec4-589e9eb10d39"><span class="text-gray-700">&gt; out</span></span>
        <span id="c318e0dd-b0ea-4cc8-990e-194319d603a4"><span class="text-gray-700">&gt; west</span></span>
        <span id="c6445e53-0c5f-418c-aa4b-714f71746129"><span class="text-gray-700">&gt; east</span></span>
        <span id="f3247237-151b-45e7-8bef-6ae15695aa40"><span class="text-gray-700">&gt; out</span></span>
        <span id="ecf59372-8ae5-4a2f-80d8-82e48a984f92"><span class="text-gray-700">&gt; west</span></span>
      </div>
      <div class="sticky-footer">
        this is a sticky footer
      </div>
    </div>

CSS

.flex-container {
  display: flex;
  flex-direction: column;
  overflow: hidden;
  height: 100vh;
  width: 100vw;
  max-height: 100vh;
}


.sticky-header {
  height: 4rem;
}

.content {
  display: flex;
  flex-direction: column;
  flex: 1;
  overflow-y: auto;
}

.sticky-footer {
  height: 4rem;
}

Чтобы предотвратить прокрутку, кроме как внутри нашего контейнера содержимого, где мы хотим, чтобы содержимое переполнялось, мы применяем свойство overflow: hidden в родительский контейнер. Объявляя высоту нашего нижнего колонтитула и компонента заголовка и применяя свойство flex: 1 к контейнеру контента, он всегда будет занимать всю доступную ширину.

https://jsfiddle.net/3f58ga16/2/

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