代码之家  ›  专栏  ›  技术社区  ›  prettyInPink

带溢出的相对滚动父级中的绝对定位div[重复]

  •  2
  • prettyInPink  · 技术社区  · 7 年前

    我想知道是否有人找到了解决办法?

    我正在寻找一个解决方案,将元素附加到滚动容器的顶部

    HTML:

    <div class="container">
      <div class="header">title</div>
      <div class="element">......</div>
      ... (about 10-20 elements) ...
      <div class="element">......</div> 
    </div>
    

    所有“元素”都有 position:relative ,

    容器具有以下CSS:

    .container {
      position:relative;
      width:200px;
      height:400px;
      overflow-y:scroll;
    }
    

    我希望标题保持在容器的顶部,独立于它的滚动位置和下面滚动的元素。

    迄今为止的css:

    .header {
      position:absolute; /* scrolling out of view :-( */
      z-index:2;
      background-color:#fff;
    }
    .element{
      position: relative;
    }
    

    所有元素都是块元素,我无法将标题移到容器外部。 jquery在这一点上是没有选择的。

    0 回复  |  直到 7 年前
        1
  •  21
  •   Arkana    12 年前

    我认为你的解决办法是 position:sticky . 好像是 position:fixed 但尊重与父母的相对地位。

    不幸的是,这是一个实验特性,并且只在铬中支持。您可以在中查看更多详细信息 this test page .

    我想到的纯css解决方案是稍微改变一下标记。只能为“元素”设置容器,如下所示:

    <div class="cont_elements">
          <div class="element">......</div>
          .....
    </div>
    

    把溢出来的水给这个内部容器。现在,你的头贴在上面。

    Here's a working demo .

        2
  •  5
  •   Robin Maben    11 年前

    jquery ui添加了 position() 实用方法就是为了这个目的,让你的生活更容易。

    $( "#someElement" ).position({
        of:  //Element to position against,
        my:  //which position on the element being positioned,
        at:  //which position on the target element eg: horizontal/vertical,
        offset:  // left-top values to the calculated position, eg. "50 50"
    });
    

    当然帮了我。

        3
  •  3
  •   Madara's Ghost    13 年前

    在这种情况下,解决方案是将标题弹出到滚动元素之外:

    <div class="header">title</div>
    <div class="container">
        <div class="element">......</div>
        <div class="element">......</div>
    </div>
    

    尽管如果可能的话,您可能应该有更好的语义元素(这里只是猜测):

    <h3>title</h3>
    <ul>
        <li>......</li>
        <li>......</li>
    </ul>
    
        4
  •  0
  •   Ocool Sanni    7 年前

    对于这样一个解决方案,最好的答案是从这个链接 How to fixed scroll div after certain height and stop after reach other div? 我希望这能节省一些搜索时间

        var navWrap = $('#navWrap'),
            nav = $('nav'),
            startPosition = navWrap.offset().top,
            stopPosition = $('#stopHere').offset().top - nav.outerHeight();
        
        $(document).scroll(function () {
            //stick nav to top of page
            var y = $(this).scrollTop()
            
            if (y > startPosition) {
                nav.addClass('sticky');
                if (y > stopPosition) {
                    nav.css('top', stopPosition - y);
                } else {
                    nav.css('top', 0);
                }
            } else {
                nav.removeClass('sticky');
            } 
        });
    body {
        height:1600px;
        margin:0;
    }
    #navWrap {
        height:70px
    }
    nav {
        height: 70px;
        background:gray;
    }
    .sticky {
        position: fixed;
        top:0;
    }
    
    h1 {
        margin: 0;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <p>Zombie ipsum reversus ab viral inferno, nam rick grimes malum cerebro. De carne lumbering animata corpora quaeritis. Summus brains sit morb​​,o vel maleficia? De apocalypsi gorger omero undead survivor dictum mauris. Hi mindless mortuis soulless creaturas, imo evil stalking monstra adventus resi dentevil vultus comedat cerebella viventium. Qui animated corpse, cricket bat max brucks terribilem incessu zomby. The voodoo sacerdos flesh eater, suscitat mortuos comedere carnem virus. Zonbi tattered for solum oculi eorum defunctis go lum cerebro. Nescio brains an Undead zombies. Sicut malus putrid voodoo horror. Nigh tofth eliv ingdead.</p>
    <div id="navWrap">
        <nav>
             <h1>I stick to the top when you scroll down and unstick when you scroll up to my original position</h1>
        </nav>
    </div>
    
    <p>Zombie ipsum reversus ab viral inferno, nam rick grimes malum cerebro. De carne lumbering animata corpora quaeritis. Summus brains sit​​, morbo vel maleficia? De apocalypsi gorger omero undead survivor dictum mauris. Hi mindless mortuis soulless creaturas, imo evil stalking monstra adventus resi dentevil vultus comedat cerebella viventium. Qui animated corpse, cricket bat max brucks terribilem incessu zomby. The voodoo sacerdos flesh eater, suscitat mortuos comedere carnem virus. Zonbi tattered for solum oculi eorum defunctis go lum cerebro. Nescio brains an Undead zombies. Sicut malus putrid voodoo horror. Nigh tofth eliv ingdead.</p>
    <p>Zombie ipsum reversus ab viral inferno, nam rick grimes malum cerebro. De carne lumbering animata corpora quaeritis. Summus brains sit morb​​,o vel maleficia? De apocalypsi gorger omero undead survivor dictum mauris. Hi mindless mortuis soulless creaturas, imo evil stalking monstra adventus resi dentevil vultus comedat cerebella viventium. Qui animated corpse, cricket bat max brucks terribilem incessu zomby. The voodoo sacerdos flesh eater, suscitat mortuos comedere carnem virus. Zonbi tattered for solum oculi eorum defunctis go lum cerebro. Nescio brains an Undead zombies. Sicut malus putrid voodoo horror. Nigh tofth eliv ingdead.</p>
    <br>
    <div id="stopHere">
    <h3 style="color:red">I want it stop fixed scrolling here. If I'm back to scrolling up, It will follow also to original position.</h3>
    </div>
    <br>
    <p>Zombie ipsum reversus ab viral inferno, nam rick grimes malum cerebro. De carne lumbering animata corpora quaeritis. Summus brains sit morb​​,o vel maleficia? De apocalypsi gorger omero undead survivor dictum mauris. Hi mindless mortuis soulless creaturas, imo evil stalking monstra adventus resi dentevil vultus comedat cerebella viventium. Qui animated corpse, cricket bat max brucks terribilem incessu zomby. The voodoo sacerdos flesh eater, suscitat mortuos comedere carnem virus. Zonbi tattered for solum oculi eorum defunctis go lum cerebro. Nescio brains an Undead zombies. Sicut malus putrid voodoo horror. Nigh tofth eliv ingdead.</p>
    <p>Zombie ipsum reversus ab viral inferno, nam rick grimes malum cerebro. De carne lumbering animata corpora quaeritis. Summus brains sit​​, morbo vel maleficia? De apocalypsi gorger omero undead survivor dictum mauris. Hi mindless mortuis soulless creaturas, imo evil stalking monstra adventus resi dentevil vultus comedat cerebella viventium. Qui animated corpse, cricket bat max brucks terribilem incessu zomby. The voodoo sacerdos flesh eater, suscitat mortuos comedere carnem virus. Zonbi tattered for solum oculi eorum defunctis go lum cerebro. Nescio brains an Undead zombies. Sicut malus putrid voodoo horror. Nigh tofth eliv ingdead.</p>
    <p>Zombie ipsum reversus ab viral inferno, nam rick grimes malum cerebro. De carne lumbering animata corpora quaeritis. Summus brains sit morb​​,o vel maleficia? De apocalypsi gorger omero undead survivor dictum mauris. Hi mindless mortuis soulless creaturas, imo evil stalking monstra adventus resi dentevil vultus comedat cerebella viventium. Qui animated corpse, cricket bat max brucks terribilem incessu zomby. The voodoo sacerdos flesh eater, suscitat mortuos comedere carnem virus. Zonbi tattered for solum oculi eorum defunctis go lum cerebro. Nescio brains an Undead zombies. Sicut malus putrid voodoo horror. Nigh tofth eliv ingdead.</p>
    <p>Zombie ipsum reversus ab viral inferno, nam rick grimes malum cerebro. De carne lumbering animata corpora quaeritis. Summus brains sit​​, morbo vel maleficia? De apocalypsi gorger omero undead survivor dictum mauris. Hi mindless mortuis soulless creaturas, imo evil stalking monstra adventus resi dentevil vultus comedat cerebella viventium. Qui animated corpse, cricket bat max brucks terribilem incessu zomby. The voodoo sacerdos flesh eater, suscitat mortuos comedere carnem virus. Zonbi tattered for solum oculi eorum defunctis go lum cerebro. Nescio brains an Undead zombies. Sicut malus putrid voodoo horror. Nigh tofth eliv ingdead.</p>
    <p>Zombie ipsum reversus ab viral inferno, nam rick grimes malum cerebro. De carne lumbering animata corpora quaeritis. Summus brains sit morb​​,o vel maleficia? De apocalypsi gorger omero undead survivor dictum mauris. Hi mindless mortuis soulless creaturas, imo evil stalking monstra adventus resi dentevil vultus comedat cerebella viventium. Qui animated corpse, cricket bat max brucks terribilem incessu zomby. The voodoo sacerdos flesh eater, suscitat mortuos comedere carnem virus. Zonbi tattered for solum oculi eorum defunctis go lum cerebro. Nescio brains an Undead zombies. Sicut malus putrid voodoo horror. Nigh tofth eliv ingdead.</p>