Я задал похожий вопрос вчера, но плохо объяснил, и не указал мое желание чисто CSS-решения, которое, я думаю, должно быть возможным, поэтому я пытаюсь снова.
По сути, у меня есть проблема, где у меня есть div прокручиваемых сообщений и поле ввода под ним. Когда я нажимаю кнопку, я бы хотел, чтобы поле ввода увеличилось на 100 пикселей, без прокрутки div сообщений.
Вот скрипка, которая демонстрирует проблему в полном объеме
Как вы можете видеть, когда вы нажимаете кнопку «Добавить поле», div сообщений также прокручивается вверх. Я бы хотел, чтобы он остался там, где был. Точно так же, если вы слегка прокручиваетесь, чтобы видеть только второе-последнее сообщение, нажатие кнопки должно аналогичным образом сохранить эту позицию при нажатии.
Интересно то, что это поведение «иногда» сохраняется. Например, в некоторых обстоятельствах (которые я не могу точно вывести) позиция прокрутки сохраняется. Я просто хотел бы, чтобы он постоянно вел себя как таковой.
window.onload = function(e) {
document.querySelector(".messages").scrollTop = 10000;
};
function test() {
document.querySelector(".send-message").classList.toggle("some-margin");
}
.container {
width: 400px;
height: 300px;
border: 1px solid #333;
display: flex;
flex-direction: column;
}
.messages {
overflow-y: auto;
height: 100%;
}
.send-message {
width: 100%;
display: flex;
flex-direction: column;
}
.some-margin {
margin-bottom: 100px;
}
<div class="container">
<div class="messages">
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
<div class="message">hello</div>
</div>
<div class="send-message">
<input />
</div>
</div>
<button onclick="test()">add margin</button>
div
прокручивается вверх, а уменьшается высота div. Так почему это важно? Ну, это означает, что онscrollbar
не корректирует свою позицию. Полоса прокрутки запоминает только свое положение относительно верхней части контейнера. Когда высота div уменьшается, кажется, что полоса прокрутки прокручивается вверх, но на самом деле это не так.