Ad

How To Change A Scrolling Element Behavior On Resize? (HTML, CSS, JavaScript)

- 1 answer

Currently, if a scrolling div on my web page is made vertically smaller, the content stays fixed at the top top of the div, and content that was previously at the bottom of the div becomes hidden.

I want this to work in the opposite direction: when the div resizes, the content stays fixed to the bottom border and content previously at the top collapses.

Think of it like a typical messenger app on your phone. When you enter text and the input box increases in size, it causes the area displaying previous messages to get smaller, but when that happens, the content stays fixed to the bottom border.

How can I achieve this in HTML/CSS/JavaScript?

Ad

Answer

This can be done using CSS, as I showed in this answer.

And here is the code part which make it happen.

html, body { height:100%; margin:0; padding:0; }

.chat-window{
  display:flex;
  flex-direction:column;
  height:100%;
}
.chat-messages{
  flex: 1;
  height:100%;
  overflow: auto;
  display: flex;
  flex-direction: column-reverse;
}

/* begin - fix for hidden scrollbar in IE/Edge/Firefox */
.chat-messages-text{ overflow: auto; }
@media screen and (-webkit-min-device-pixel-ratio:0) {
  .chat-messages-text{ overflow: visible; }
  /*  reset Edge as it identifies itself as webkit  */
  @supports (-ms-accelerator:true) { .chat-messages-text{ overflow: auto; } }
}
<div class="chat-window">
  <div class="chat-messages">
    <div class="chat-messages-text" id="messages">
      Long long content 1!<br/>
      Long long content 2!<br/>
      Long long content 3!<br/>
      Long long content 4!<br/>
      Long long content 5!<br/>
      Long long content 1!<br/>
      Long long content 2!<br/>
      Long long content 3!<br/>
      Long long content 4!<br/>
      Long long content 5!<br/>
      Long long content 1!<br/>
      Long long content 2!<br/>
      Long long content 3!<br/>
      Long long content 4!<br/>
      Long long content 5!<br/>
      Long long content 1!<br/>
      Long long content 2!<br/>
      Long long content 3!<br/>
      Long long content 4!<br/>
      Long long content 5!<br/>
      Long long content 1!<br/>
      Long long content 2!<br/>
      Long long content 3!<br/>
      Long long content 4!<br/>
      Long long content 5!<br/>
    </div>
  </div>
</div>

Ad
source: stackoverflow.com
Ad