Dün benzer bir soru sordum ama kötü bir şekilde açıkladım ve saf-CSS çözümü için arzumu belirtmedim, ki bunun mümkün olması gerektiğini düşünüyorum, bu yüzden tekrar deniyorum.
Temelde, kaydırılabilir iletilerin bir div ve altında bir giriş alanı var bir sorun var. Bir düğmeyi tıklattığımda, giriş alanının mesajların da kaydırılmasını gerektirmeden giriş alanının 100 piksele çıkmasını istiyorum.
İşte sorunu bütünüyle gösteren bir keman
Gördüğünüz gibi, "kenar boşluğu ekle" düğmesini tıkladığınızda, mesaj div de yukarı kayar. Olduğu yerde kalmasını istiyorum. Benzer şekilde, yalnızca sondan ikinci mesaja görebilmeniz için hafifçe yukarı kaydırılırsanız, düğmeyi tıklatmak da tıklatıldığında aynı konumu korumalıdır.
İlginç olan, bu davranışın "bazen" korunmasıdır. Örneğin, bazı durumlarda (ki tam olarak çıkaramıyorum) kaydırma konumu korunur. Sadece sürekli böyle davranmasını istiyorum.
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
yukarı kaydırılan şey değil , azalan div'ın yüksekliği. Peki bu neden önemli? Bunun anlamı,scrollbar
konumunu ayarlamamasıdır. Kaydırma çubuğu yalnızca kabının üstünden göreli konumunu hatırlar . Div'in yüksekliği azaldığında, kaydırma çubuğu yukarı doğru kayıyor gibi görünüyor, ancak aslında değil.