[英]How to use flex grow with an overflow:scroll; item?
I have an input area with variable height (up to a max-height of 120px).我有一个高度可变的输入区域(最大高度为 120 像素)。 Above it will be a list of chat messages.
其上方将是聊天消息列表。 With my example below, the input area expands in height but overlaps the list of messages as it grows.
在我下面的示例中,输入区域在高度上扩展,但随着它的增长与消息列表重叠。
I would like the container .messages
to shrink in height as this happens, and ideally preserve its scroll position at the bottom of the container to see the last message posted.我希望容器
.messages
在发生这种情况时缩小高度,并且理想情况下保留其在容器底部的滚动位置以查看发布的最后一条消息。
ul, li { list-style: none; margin: 0; padding: 0; } .container { display: flex; flex-direction: column; height: 100vh; flex: 1; } .messages { overflow: scroll; flex-grow: 1; } .input { overflow: scroll; max-height: 120px; height: auto; padding: 5px; background: #efefef; }
<div class='container'> <ul class='messages'> <li>Message 1</li> <li>Message 2</li> <li>Message 3</li> <li>Message 4</li> <li>Message 5</li> <li>Message 6</li> <li>Message 7</li> <li>Message 8</li> <li>Message 9</li> <li>Message 10</li> <li>Message 11</li> <li>Message 12</li> <li>Message 13</li> <li>Message 14</li> <li>Message 15</li> <li>Message 16</li> <li>Message 17</li> <li>Message 18</li> <li>Message 19</li> <li>Message 20</li> <li>Message 22</li> <li>Message 23</li> <li>Message 24</li> </ul> <div class='input' contenteditable> </div> </div>
You will need to add some JavaScript to your application.您需要向应用程序添加一些 JavaScript。 I have changed your class
messages
for an id instead (same should apply to your input window), since you only have one window for each.我已经将您的类
messages
更改为 id(同样应该适用于您的输入窗口),因为每个窗口只有一个窗口。
<div id="input" oninput="ScrollToBottom();"> </div>
function ScrollToBottom() {
var objDiv = document.getElementById("messages");
objDiv.scrollTop = objDiv.scrollHeight;
}
/* You might want to call the function once your page loads as well
simply by adding this */
ScrollToBottom();
See code snippet below for an example:有关示例,请参见下面的代码片段:
function test() { var objDiv = document.getElementById("messages"); objDiv.scrollTop = objDiv.scrollHeight; } /* call the function one time as well for when the window loads */ test();
ul, li { list-style: none; margin: 0; padding: 0; } .container { display: flex; flex-direction: column; height: 100vh; flex: 1; } #messages { overflow: scroll; flex-grow: 1; } .input { overflow-y: scroll; overflow-x: hidden; max-height: 120px; padding: 5px; background: #efefef; }
<div class='container'> <ul id='messages'> <li>Message 1</li> <li>Message 2</li> <li>Message 3</li> <li>Message 4</li> <li>Message 5</li> <li>Message 6</li> <li>Message 7</li> <li>Message 8</li> <li>Message 9</li> <li>Message 10</li> <li>Message 11</li> <li>Message 12</li> <li>Message 13</li> <li>Message 14</li> <li>Message 15</li> <li>Message 16</li> <li>Message 17</li> <li>Message 18</li> <li>Message 19</li> <li>Message 20</li> <li>Message 22</li> <li>Message 23</li> <li>Message 24</li> <li>Message 25</li> <li>Message 26</li> <li>Message 27</li> <li>Message 28</li> <li>Message 29</li> <li>Message 30</li> </ul> <div class='input' oninput='test();' contenteditable> User currently writing... </div> </div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.