如何在页面滚动时始终保持页眉静止?

问题描述:

我该如何去保持我的header不会滚动页面的其余部分?我想过利用frame-setsiframes,只是想知道是否有一种更简单和更友好的方式,这样做的最佳做法是什么?如何在页面滚动时始终保持页眉静止?

+1

你说的'header'是什么意思?一个页面?桌子上? – BrunoLM 2010-08-29 05:28:21

+0

相关:http://*.com/q/33075195/435605 – 2015-10-12 08:13:08

使用position: fixed包含您的头,喜欢的东西

#header { 
    position: fixed; 
} 

#content { 
    margin-top: 100px; 
} 

在这个例子中div,当#content开始关闭100像素以下#header,但是当用户滚动,#header停留在地方。当然,不言而喻,您需要确保#header具有背景,以便在两个div重叠时其内容实际上可见。看一看在position物业位置:http://reference.sitepoint.com/css/position

+2

取决于你的'div's之间的关系,你可能需要在'#header'中添加'margin-top:-100px;'来获得它回到你想要的地方。 – rymo 2012-02-29 18:52:20

+0

你知道一种方式让它滚动,直到它达到顶部,然后“位置:固定;”?如果你的头部低于顶部? – 2013-04-18 19:21:16

+0

它不包含在我的DIV宽度内。 – SearchForKnowledge 2015-03-25 15:20:17

这里是一个用CSS + jQuery的(JavaScript)的解决方案。

这里是演示链接Demo

//html 

<div id="uberbar"> 
    <a href="#top">Top of Page</a> 
    <a href="#bottom">Bottom of Page</a> 

</div> 

//css 

#uberbar { 
    border-bottom:1px solid #eb7429; 
    background:#fc9453; 
    padding:10px 20px; 
    position:fixed; 
    top:0; 
    left:0; 
    z-index:2000; 
    width:100%; 
} 

//jquery 

$(document).ready(function() { 
    (function() { 
     //settings 
     var fadeSpeed = 200, fadeTo = 0.5, topDistance = 30; 
     var topbarME = function() { $('#uberbar').fadeTo(fadeSpeed,1); }, topbarML = function() { $('#uberbar').fadeTo(fadeSpeed,fadeTo); }; 
     var inside = false; 
     //do 
     $(window).scroll(function() { 
      position = $(window).scrollTop(); 
      if(position > topDistance && !inside) { 
       //add events 
       topbarML(); 
       $('#uberbar').bind('mouseenter',topbarME); 
       $('#uberbar').bind('mouseleave',topbarML); 
       inside = true; 
      } 
      else if (position < topDistance){ 
       topbarME(); 
       $('#uberbar').unbind('mouseenter',topbarME); 
       $('#uberbar').unbind('mouseleave',topbarML); 
       inside = false; 
      } 
     }); 
    })(); 
}); 

这里是DEMO

HTML:

<div class="header"> 
    <h1 class="header__content-text"> 
    Header content will come here 
    </h1> 
</div> 
<div class="page__content-container"> 
    <div> 
    <a href="http://imgur.com/k9hz3"> 
     <img src="http://i.imgur.com/k9hz3.jpg" title="Hosted by imgur.com" alt="" /> 
    </a> 
    </div> 
    <div> 
    <a href="http://imgur.com/TXuFQ"> 
     <img src="http://i.imgur.com/TXuFQ.jpg" title="Hosted by imgur.com" alt="" /> 
    </a> 
    </div> 
</div> 

CSS:

.header { 
    position: fixed; 
    top: 0; 
    left: 0; 
    width: 100%; 
    height: 48px; 
    z-index: 10; 
    background: #eeeeee; 
    -webkit-box-shadow: 0 7px 8px rgba(0, 0, 0, 0.12); 
    -moz-box-shadow: 0 7px 8px rgba(0, 0, 0, 0.12); 
    box-shadow: 0 7px 8px rgba(0, 0, 0, 0.12); 
} 

.header__content-text { 
    text-align: center; 
    padding: 15px 20px; 
} 

.page__content-container { 
    margin: 100px auto; 
    width: 975px; 
    padding: 30px; 
} 

我perso最后需要一张桌面,左边和顶部的标题始终可见。受到几篇文章的启发,我认为我有一个很好的解决方案,可能会对您有所帮助。 此版本没有其他soltion与浮动div或灵活/自动调整列和行大小的包装问题。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title></title> 
    <script language="javascript" type="text/javascript" src="/Scripts/jquery-1.7.2.min.js"></script> 
    <script language="javascript" type="text/javascript"> 
     // Handler for scrolling events 
     function scrollFixedHeaderTable() { 
      var outerPanel = $("#_outerPanel"); 
      var cloneLeft = $("#_cloneLeft"); 
      var cloneTop = $("#_cloneTop"); 
      cloneLeft.css({ 'margin-top': -outerPanel.scrollTop() }); 
      cloneTop.css({ 'margin-left': -outerPanel.scrollLeft() }); 
     } 

     function initFixedHeaderTable() { 
      var outerPanel = $("#_outerPanel"); 
      var innerPanel = $("#_innerPanel"); 
      var clonePanel = $("#_clonePanel"); 
      var table = $("#_table"); 
      // We will clone the table 2 times: For the top rowq and the left column. 
      var cloneLeft = $("#_cloneLeft"); 
      var cloneTop = $("#_cloneTop"); 
      var cloneTop = $("#_cloneTopLeft"); 
      // Time to create the table clones 
      cloneLeft = table.clone(); 
      cloneTop = table.clone(); 
      cloneTopLeft = table.clone(); 
      cloneLeft.attr('id', '_cloneLeft'); 
      cloneTop.attr('id', '_cloneTop'); 
      cloneTopLeft.attr('id', '_cloneTopLeft'); 
      cloneLeft.css({ 
       position: 'fixed', 
       'pointer-events': 'none', 
       top: outerPanel.offset().top, 
       'z-index': 1 // keep lower than top-left below 
      }); 
      cloneTop.css({ 
       position: 'fixed', 
       'pointer-events': 'none', 
       top: outerPanel.offset().top, 
       'z-index': 1 // keep lower than top-left below 
      }); 
      cloneTopLeft.css({ 
       position: 'fixed', 
       'pointer-events': 'none', 
       top: outerPanel.offset().top, 
       'z-index': 2 // higher z-index than the left and top to make the top-left header cell logical 
      }); 
      // Add the controls to the control-tree 
      clonePanel.append(cloneLeft); 
      clonePanel.append(cloneTop); 
      clonePanel.append(cloneTopLeft); 
      // Keep all hidden: We will make the individual header cells visible in a moment 
      cloneLeft.css({ visibility: 'hidden' }); 
      cloneTop.css({ visibility: 'hidden' }); 
      cloneTopLeft.css({ visibility: 'hidden' }); 
      // Make the lef column header cells visible in the left clone 
      $("#_cloneLeft td._hdr.__row").css({ 
       visibility: 'visible', 
      }); 
      // Make the top row header cells visible in the top clone 
      $("#_cloneTop td._hdr.__col").css({ 
       visibility: 'visible', 
      }); 
      // Make the top-left cell visible in the top-left clone 
      $("#_cloneTopLeft td._hdr.__col.__row").css({ 
       visibility: 'visible', 
      }); 
      // Clipping. First get the inner width/height by measuring it (normal innerWidth did not work for me) 
      var helperDiv = $('<div style="positions: absolute; top: 0; right: 0; bottom: 0; left: 0; height: 100%;"></div>'); 
      outerPanel.append(helperDiv); 
      var innerWidth = helperDiv.width(); 
      var innerHeight = helperDiv.height(); 
      helperDiv.remove(); // because we dont need it anymore, do we? 
      // Make sure all the panels are clipped, or the clones will extend beyond them 
      outerPanel.css({ clip: 'rect(0px,' + String(outerPanel.width()) + 'px,' + String(outerPanel.height()) + 'px,0px)' }); 
      // Clone panel clipping to prevent the clones from covering the outerPanel's scrollbars (this is why we use a separate div for this) 
      clonePanel.css({ clip: 'rect(0px,' + String(innerWidth) + 'px,' + String(innerHeight) + 'px,0px)' }); 
      // Subscribe the scrolling of the outer panel to our own handler function to move the clones as needed. 
      $("#_outerPanel").scroll(scrollFixedHeaderTable); 
     } 


     $(document).ready(function() { 
      initFixedHeaderTable(); 
     }); 

    </script> 
    <style type="text/css"> 
     * { 
      clip: rect font-family: Arial; 
      font-size: 16px; 
      margin: 0; 
      padding: 0; 
     } 

     #_outerPanel { 
      margin: 0px; 
      padding: 0px; 
      position: absolute; 
      left: 50px; 
      top: 50px; 
      right: 50px; 
      bottom: 50px; 
      overflow: auto; 
      z-index: 1000; 
     } 

     #_innerPanel { 
      overflow: visible; 
      position: absolute; 
     } 

     #_clonePanel { 
      overflow: visible; 
      position: fixed; 
     } 

     table { 
     } 

     td { 
      white-space: nowrap; 
      border-right: 1px solid #000; 
      border-bottom: 1px solid #000; 
      padding: 2px 2px 2px 2px; 
     } 

     td._hdr { 
      color: Blue; 
      font-weight: bold; 
     } 
     td._hdr.__row { 
      background-color: #eee; 
      border-left: 1px solid #000; 
     } 
     td._hdr.__col { 
      background-color: #ddd; 
      border-top: 1px solid #000; 
     } 
    </style> 
</head> 
<body> 
    <div id="_outerPanel"> 
     <div id="_innerPanel"> 
      <div id="_clonePanel"></div> 
      <table id="_table" border="0" cellpadding="0" cellspacing="0"> 
       <thead id="_topHeader" style="background-color: White;"> 
        <tr class="row"> 
         <td class="_hdr __col __row"> 
          &nbsp; 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
         <td class="_hdr __col"> 
          TOP HEADER 
         </td> 
        </tr> 
       </thead> 
       <tbody> 
        <tr class="row"> 
         <td class="_hdr __row"> 
          MY HEADER COLUMN: 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
        </tr> 
        <tr class="row"> 
         <td class="_hdr __row"> 
          MY HEADER COLUMN: 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
         <td class="col"> 
          The quick brown fox jumps over the lazy dog. 
         </td> 
        </tr> 
       </tbody> 
      </table> 
     </div> 
     <div id="_bottomAnchor"> 
     </div> 
    </div> 
</body> 
</html> 

如果你可以使用bootstrap3那么你可以使用CSS“导航栏固定顶” 还需要添加下面的CSS把你的网页内容下推

body{ 

    margin-top:100px; 
} 

而是与定位工作和填充/边距,而不知道标题的大小,有一种方法可以通过播放滚动来保持标题的固定。

this plunker具有固定头:

<html lang="en" style="height: 100%"> 
<body style="height: 100%"> 
<div style="height: 100%; overflow: hidden"> 
    <div>Header</div> 
    <div style="height: 100%; overflow: scroll">Content - very long Content... 

这里的关键是height: 100%overflow组合。

看到关于从标题here删除滚动的具体问题和答案here

+0

一个有问题的解决方案。看起来内容的底部被推到了窗口的下方。如果您将标题设置得更高,您可以更清楚地看到它。任何想法如何解决这个问题? – 2015-10-12 13:49:43

+0

这似乎工作正常,但滚动在我的iPhone5上变得非常慢。 – 2017-08-09 14:11:21

+0

@AlainZelink - 你在iPhone5上使用什么浏览器应用程序? – 2017-08-13 08:17:05

通过所有的答案寻找后,我发现用最小的CSS,没有JS的方式略有不同,需要在#content正确设置,在这种情况下60px

CSS只有标题的高度:

#header { 
    position: fixed; 
    width: 100%; 
    top: 0; 
    z-index: 10; 
} 
#content { 
    margin-top: 60px; 
    z-index:1; 
} 

HTML:

<body> 
    <div id="header" style="background-color:GRAY; text-align:center; border-bottom:1px SOLID BLACK; color:WHITE; line-height:50px; font-size:40px"> 
    My Large Static Header 
    </div> 
    <div id="content"> 
    <!-- All page content here --> 
    </div> 
</body>