Your question:
What is the solution to this problem?
I suggest you set .container to relative :
.container{ margin-top:100px; background:yellow; height:600px; width:300px; overflow-y:auto; overflow-x:hidden; position:relative; }
and in your script use .position().top , this will simplify your life:
$('.container li:nth-child(7)').css("background", "red"); $('.container').animate({ scrollTop: $('.container li:nth-child(7)').position().top });
.offset().top :
Description Get the current coordinates of the first element in the set of matched elements relative to the document.
.position().top :
From the docs:
Description: Get the current coordinates of the first element in the set of matched elements relative to the offset parent.
.position().top calculated from the top to the parent if the parent is relatively positioned.
$(function() { $('.container li:nth-child(7)').css("background", "red"); $('.container').animate({ scrollTop: $('.container li:nth-child(7)').position().top }); });
html, body { margin: 0; padding: 0; } .container { margin-top: 100px; background: yellow; height: 600px; width: 300px; overflow-y: auto; overflow-x: hidden; position: relative; } .container ul { margin: 0; padding: 0; list-style: none outside none; } .container li { background: blue; display: block; height: 150px; width: 100%; padding: 10px; margin-bottom: 5px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="container"> <ul> <li>asdasd</li> <li>asdasd</li> <li>asdasd</li> <li>asdasd</li> <li>asdasd</li> <li>asdasd</li> <li>asdasd77</li> <li>asdasd</li> <li>asdasd</li> <li>asdasd</li> <li>asdasd</li> </ul> </div>
Jai
source share