<main>
  <div class="wrapper">
    <article class="flow">
      <div class="cluster">
        <div class="controls">
          <nav>
            Scroll to chat:
            <a href="#1">#1</a>
            <a href="#2">#2</a>
            <a href="#3">#3</a>
          </nav>
          <div class="control">
            <label for="scroll">scroll-behavior: smooth ?</label>
            <input id="scroll" type="checkbox" checked/>
          </div>
        </div>
        <div class="chat-ui">
  <div class="chat-titlebar">
    <h5 id="chat-label">Chat UI</h5>
    <div class="chat-avatar">
      <img src="https://cdn.dribbble.com/users/37530/screenshots/2937858/drib_blink_bot.gif" alt="">
    </div>
  </div>
  
  <div class="chat-scrollview" tabindex="0" role="region" aria-labelled-by="chat-label">
    <div class="chat-messagelist">
            <div class="chat-cluster">
        <div class="chat-avatar">
          <img src="https://cdn.dribbble.com/users/37530/screenshots/2937858/drib_blink_bot.gif" alt="">
        </div>
        <section>
          <h3>Learn CSS Bot</h3>
          <div class="chat-message" id="1">Hi!</div>
        </section>
      </div>
      
      <div mine class="chat-cluster">
        <section>
          <div class="chat-message">Hi!</div>
        </section>
      </div>
      
                  <div class="chat-cluster">
        <div class="chat-avatar">
          <img src="https://cdn.dribbble.com/users/37530/screenshots/2937858/drib_blink_bot.gif" alt="">
        </div>
        <section>
          <h3>Learn CSS Bot</h3>
          <div class="chat-message">Hi!</div>
        </section>
      </div>
      
      <div mine class="chat-cluster">
        <section>
          <div class="chat-message">Hi!</div>
        </section>
      </div>
      
                  <div class="chat-cluster">
        <div class="chat-avatar">
          <img src="https://cdn.dribbble.com/users/37530/screenshots/2937858/drib_blink_bot.gif" alt="">
        </div>
        <section>
          <h3>Learn CSS Bot</h3>
          <div class="chat-message">Hi!</div>
        </section>
      </div>
      
      <div mine class="chat-cluster">
        <section>
          <div class="chat-message">Hi!</div>
        </section>
      </div>
      
                  <div class="chat-cluster">
        <div class="chat-avatar">
          <img src="https://cdn.dribbble.com/users/37530/screenshots/2937858/drib_blink_bot.gif" alt="">
        </div>
        <section>
          <h3>Learn CSS Bot</h3>
          <div class="chat-message">Hi!</div>
        </section>
      </div>
      
      <div mine class="chat-cluster">
        <section>
          <div class="chat-message">Hi!</div>
        </section>
      </div>
      
                  <div class="chat-cluster">
        <div class="chat-avatar">
          <img src="https://cdn.dribbble.com/users/37530/screenshots/2937858/drib_blink_bot.gif" alt="">
        </div>
        <section>
          <h3>Learn CSS Bot</h3>
          <div class="chat-message">Hi!</div>
        </section>
      </div>
      
      <div mine class="chat-cluster">
        <section>
          <div class="chat-message">Hi!</div>
        </section>
      </div>
      
                  <div class="chat-cluster">
        <div class="chat-avatar">
          <img src="https://cdn.dribbble.com/users/37530/screenshots/2937858/drib_blink_bot.gif" alt="">
        </div>
        <section>
          <h3>Learn CSS Bot</h3>
          <div class="chat-message">Hi!</div>
        </section>
      </div>
      
      <div mine class="chat-cluster">
        <section>
          <div class="chat-message">Hi!</div>
        </section>
      </div>
      
                  <div class="chat-cluster">
        <div class="chat-avatar">
          <img src="https://cdn.dribbble.com/users/37530/screenshots/2937858/drib_blink_bot.gif" alt="">
        </div>
        <section>
          <h3>Learn CSS Bot</h3>
          <div class="chat-message">Hi!</div>
        </section>
      </div>
      
      <div mine class="chat-cluster">
        <section>
          <div class="chat-message">Hi!</div>
        </section>
      </div>
      
      <div class="chat-cluster">
        <div class="chat-avatar">
          <img src="https://cdn.dribbble.com/users/37530/screenshots/2937858/drib_blink_bot.gif" alt="">
        </div>
        <section>
          <h3>Learn CSS Bot</h3>
          <div class="chat-message" id="2">Hi!</div>
          <div class="chat-message">I'm a bot</div>        
        </section>
      </div>
      
      <div mine class="chat-cluster">
        <section>
          <div class="chat-message">Hi!</div>
          <div class="chat-message">I'm not a bot</div>
          <div class="chat-message">But I am static text that was put here by a human. The only dynamic stuff you'll find here is whatever someone types in the "say something" text area hehe.</div>
        </section>
      </div>
      
      <div class="chat-cluster">
        <div class="chat-avatar">
          <img src="https://cdn.dribbble.com/users/37530/screenshots/2937858/drib_blink_bot.gif" alt="">
        </div>
        <section>
          <h3>Learn CSS Bot</h3>
          <div class="chat-message">I see this chat implementation is using the `scroll-behavior` property...</div>
          <div class="chat-message">Can you tell me more about that?</div>
        </section>
      </div>
      
      <div mine class="chat-cluster">
        <section>
          <div class="chat-message">sure!</div>
          <div class="chat-message" id="3">`scroll-behavior` allows you to opt into browser controlled scrolling to elements. This allows you to specify how in-page navigation like `.scrollTo()` or links are handled.
</div>
          <div class="chat-message">Learn CSS can teach you more about overflow!</div>
        </section>
      </div>
      
    </div>
  </div>
  
  <div class="chat-authoring" contenteditable></div>
</div>
      </div>
    </article>
  </div>
</main>
:root {
  --var-scroll-behavior: 'smooth';
}

.chat-scrollview {
  scroll-behavior: var(--var-scroll-behavior);
}

@media (prefers-reduced-motion) {
  .chat-scrollview {
    scroll-behavior: auto;
  }
}
let root = document.documentElement;
const scroll = document.querySelector('#scroll');

const render = () => {
  root.style.setProperty('--var-scroll-behavior', scroll.checked ? "smooth" : "auto");
};

scroll.addEventListener('change', render);

render();

External CSS

  1. https://codepen.io/web-dot-dev/pen/abpoXGZ.css
  2. https://codepen.io/argyleink/pen/RwPWqKe.css
  3. https://codepen.io/web-dot-dev/pen/XWaKEzX.css

External JavaScript

  1. https://codepen.io/argyleink/pen/RwPWqKe.js