滚动到该 div 后如何使 div 固定?

IT技术 javascript html css scroll css-position
2021-01-18 13:07:58

div滚动到那个后如何保持固定divdiv在页面后面有一个,您需要滚动才能找到该div

如果我使用:

.divname {
  position: fixed;
}

div出现之前就应该正常显示。也许我需要的一个很好的例子是9gag上的第二个广告如果您的屏幕分辨率足够低,加载首页后您将看不到该广告,但向下滚动后,您会看到第二个广告,并且在向下滚动时它会保持固定。

6个回答

这现在仅适用于 CSS,请参阅https://stackoverflow.com/a/53832799/1482443


如果有人需要 jQuery 方法,以下是 8 年前发布的原始答案:

我知道这仅被标记为 html/css,但您不能仅使用 css 来做到这一点。最简单的方法是使用一些 jQuery。

var fixmeTop = $('.fixme').offset().top;       // get initial position of the element

$(window).scroll(function() {                  // assign scroll event listener

    var currentScroll = $(window).scrollTop(); // get current position

    if (currentScroll >= fixmeTop) {           // apply position: fixed if you
        $('.fixme').css({                      // scroll to that element or below it
            position: 'fixed',
            top: '0',
            left: '0'
        });
    } else {                                   // apply position: static
        $('.fixme').css({                      // if you scroll above it
            position: 'static'
        });
    }

});

http://jsfiddle.net/5n5MA/2/

通常需要用 $(window).load(function () { ... }) 包裹这段代码;所以 fixmeTop 在加载 css 文件后会有正确的值
2021-04-05 13:07:58

这可以通过 CSS3 实现。只要使用position: sticky,因为看到这里

position: -webkit-sticky; /* Safari & IE */
position: sticky;
top: 0;
这显然应该改为最佳答案。
2021-03-18 13:07:58
这不是你最好的答案!这就是答案......其他只是解决方法。:D
2021-03-21 13:07:58
我希望有一种方法可以在保持绝对位置的同时保持粘性?
2021-04-11 13:07:58

jquery函数最重要

<script>
$(function(){
    var stickyHeaderTop = $('#stickytypeheader').offset().top;

    $(window).scroll(function(){
            if( $(window).scrollTop() > stickyHeaderTop ) {
                    $('#stickytypeheader').css({position: 'fixed', top: '0px'});
                    $('#sticky').css('display', 'block');
            } else {
                    $('#stickytypeheader').css({position: 'static', top: '0px'});
                    $('#sticky').css('display', 'none');
            }
    });
});
</script>

然后使用JQuery Lib...

<script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>

现在使用 HTML

<div id="header">
    <p>This text is non sticky</p>
    <p>This text is non sticky</p>
    <p>This text is non sticky</p>
    <p>This text is non sticky</p>
 </div>

<div id="stickytypeheader">
 <table width="100%">
  <tr>
    <td><a href="http://growthpages.com/">Growth pages</a></td>

    <td><a href="http://google.com/">Google</a></td>

    <td><a href="http://yahoo.com/">Yahoo</a></td>

    <td><a href="http://www.bing.com/">Bing</a></td>

    <td><a href="#">Visitor</a></td>
  </tr>
 </table>
</div>

<div id="content">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat
cupidatat non proident, sunt in culpa qui officia deserunt
mollit anim id est laborum.</p>
</div>

此处查看演示

添加 to@Alexandre Aimbiré的答案 - 有时您可能需要指定z-index:1在滚动时使元素始终位于顶部。像这样:

position: -webkit-sticky; /* Safari & IE */
position: sticky;
top: 0;
z-index: 1;
<script>
if($(window).width() >= 1200){
    (function($) {
        var element = $('.to_move_content'),
            originalY = element.offset().top;

        // Space between element and top of screen (when scrolling)
        var topMargin = 10;

        // Should probably be set in CSS; but here just for emphasis
        element.css('position', 'relative');

        $(window).on('scroll', function(event) {
            var scrollTop = $(window).scrollTop();

            element.stop(false, false).animate({
                top: scrollTop < originalY
                    ? 0
                    : scrollTop - originalY + topMargin
            }, 0);
        });
    })(jQuery);
}

试试这个 !只需将类 .to_move_content 添加到您的 div

就像魅力一样!如果有人需要z-index: 9999在 CSS 中将 <div> 元素放在其他内容的前面
2021-04-10 13:07:58