मैंने कल भी इसी तरह का सवाल पूछा था, लेकिन इसे खराब तरीके से समझाया, और शुद्ध-सीएसएस समाधान के लिए मेरी इच्छा निर्दिष्ट नहीं की, जो मुझे लगता है कि यह संभव होना चाहिए, इसलिए मैं फिर से कोशिश कर रहा हूं।
असल में, मेरे पास एक मुद्दा है जहां मेरे पास स्क्रॉल करने योग्य संदेशों का एक div है और इसके नीचे एक इनपुट फ़ील्ड है। जब मैं एक बटन पर क्लिक करता हूं, तो मैं चाहूंगा कि इनपुट क्षेत्र 100 पिक्सेल तक टकरा जाए, बिना संदेशों के विभाजन के भी स्क्रॉल हो जाए।
यहां एक ऐसा बेड़ा है जो समस्या को उसकी संपूर्णता में प्रदर्शित करता है
जैसा कि आप देख सकते हैं, जब आप "मार्जिन जोड़ें" बटन पर क्लिक करते हैं, तो संदेश 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
जो स्क्रॉल कर रहा है, यह उस डिव की ऊंचाई है जो कम हो रहा है। तो यह बात क्यों है? खैर, इसका क्या मतलब है कि यहscrollbar
अपनी स्थिति को समायोजित नहीं कर रहा है। स्क्रॉलबार केवल अपने कंटेनर के ऊपर से अपनी स्थिति को याद रखता है । जब div की ऊंचाई घट जाती है, तो ऐसा लगता है कि स्क्रॉलबार ऊपर स्क्रॉल कर रहा है, लेकिन यह वास्तव में नहीं है।