ホームページ >ウェブフロントエンド >CSSチュートリアル >外側の Div のサイズが変更されたときに、CSS を使用してスクロール可能な Div を一番下に固定するにはどうすればよいですか?

外側の Div のサイズが変更されたときに、CSS を使用してスクロール可能な Div を一番下に固定するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-30 13:52:11517ブラウズ

How Can I Make a Scrollable Div Stick to the Bottom Using CSS When the Outer Div Resizes?

外側の div のサイズが変更された場合、スクロール可能な div が一番下に固定されます

多くのチャット アプリケーションは、たとえ入力のサイズが変更されるため、ユーザーは引き続き最新のメッセージを表示できます。

React でこれを実装する従来の方法では、次のようになります。変更されるたびに入力の高さを再計算し、それに応じてメッセージ コンテナを更新するには、componentDidUpdate を使用する必要があります。

ただし、これはパフォーマンスの問題を引き起こす可能性があり、このようにメッセージを渡さなければならないのは理想的ではありません。

CSS を使用してこれを実装するより良い方法はありますか?

この第 2 改訂版答え

フレックス方向: 列反転; Skype や他の多くのチャット アプリと同じように、メッセージはメッセージ コンテナの下部に配置されます。

.chat-window {
  display: flex;
  flex-direction: column;
  height: 100%;
}

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

.chat-input {
  border-top: 1px solid #999;
  padding: 20px 5px;
}

.chat-input-text {
  width: 60%;
  min-height: 40px;
  max-width: 60%;
}

flex-direction を使用する場合の欠点の 1 つは、column-reverse; です。これは IE/Edge/Firefox のバグで、スクロールバーが表示されません。

これを修正するには、次の関数を使用できます:

// scroll to bottom
function updateScroll(el) {
  el.scrollTop = el.scrollHeight;
}

// only shift-up if at bottom
function scrollAtBottom(el) {
  return el.scrollTop + 5 >= el.scrollHeight - el.offsetHeight;
}

そして、それらを次のようなコード:

/* fix for IE/Edge/Firefox */
var isWebkit = ('WebkitAppearance' in document.documentElement.style);
var isEdge = ('-ms-accelerator' in document.documentElement.style);
var tempCounter = 6;

function updateScroll(el) {
  el.scrollTop = el.scrollHeight;
}

function scrollAtBottom(el) {
  return el.scrollTop + 5 >= el.scrollHeight - el.offsetHeight;
}
/* temp. buttons for demo */
button {
  width: 12%;
  height: 44px;
  margin-left: 5%;
  vertical-align: top;
}

/* 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;
    }
  }
}

/* hide resize FF */
@-moz-document url-prefix() {
  .chat-input-text {
    resize: none;
  }
}

/* end - fix for hidden scrollbar in IE/Edge/Firefox */

以上が外側の Div のサイズが変更されたときに、CSS を使用してスクロール可能な Div を一番下に固定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。