ฉันถามคำถามที่คล้ายกันเมื่อวานนี้ แต่อธิบายได้ไม่ดีและไม่ได้ระบุความต้องการของฉันสำหรับโซลูชัน 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 ลดลงดูเหมือนว่าแถบเลื่อนกำลังเลื่อนขึ้น แต่จริงๆแล้วไม่ใช่