2011-10-10 61 views
14

我已經使用CSS來製作一個「粘性標題」,它始終在頁面頂部可見,其他內容在它下面。 在標題中我有一些內部鏈接。問題是當單擊一個鏈接時,頁面會滾動,以便目標位於頁面的頂部 - 被粘滯標題隱藏 - 而不是在其下方。粘性標題和內部鏈接

有關如何解決此問題的任何建議?

CSS:

#header { 
    position: fixed; 
    top: 0; 
    left: 0; 
    width: 100%; 
    height: 3.5em; 
    padding:0; 
    margin: 0; 
} 

#container { 
    width: 100%; 
    margin: 3.5em 0 0 0; 
    padding: 0; 
    overflow:auto; 
} 

#content { 
    padding: 0 4em; 
    margin: 0; 
} 

HTML:

<body> 

    <div id="header"> 
     <div id="content"> 
      <p> 
       <a href="#xyz">XYZ</a> 
      </p> 
     </div> <!--end content--> 
    </div> <!--end header--> 

    <div id="container"> 
     <div id="content"> 
      <p>A lot of text.</p> 
      <a name="xyz"></a> 
      <p>A lot of text</p> 
     </div><!--end content--> 
    </div><!--end container--> 

</body> 

回答

0

一件簡單的事情做的是把<a name="xyz"></a>小幅上漲的文本。

這將需要一些試驗和錯誤,但它可能是最快/最容易做的事情。


你可以做的另一件事是動態地添加marginpadding鏈接被點擊的時候。

0

你也可以在你的CSS文件中設置一個與你的xyz-fragment的粘性頭一樣高的頂邊。這可能會導致您的結果HTML頁面中的空白空缺...

0

開始爲頭部和容器內的內容部分獲取唯一的ID。 也許你可以把ul放在內部鏈接的標題中。 設置包裝內的內容的位置絕對,等瞧!

有什麼地方可以看看你的問題嗎?

1

的JavaScript點點(jQuery的使用這裏)可以做到這一點:

$('#header a').click(function (e) { 
    e.preventDefault(); 

    var offset = $('a[name=' + $(this).attr('href').substr(1) + ']').offset(); 

    $('html, body').animate({ scrollTop: offset.top - $('#header').outerHeight() }, 'fast'); 
}); 

這個發現與匹配鏈接的href屬性點擊的name屬性的元素,然後動畫滾動到元素的位置減去標題的高度。

http://jsfiddle.net/blineberry/bTa8b/

21

首先,它是更好地使用塊與id而不是name - 這是更標準的方式。

然後,將類添加到錨點,然後使其具有絕對位置+將其移動到與頂部高度相等的負頂部margin

看看這個小提琴:http://jsfiddle.net/kizu/gfXJJ/

,或者,對於支持僞元素的瀏覽器,你可以添加一個具有所需的高度和補償是通過負邊距的高度,所以就相當於爲開端您要建立鏈接的區塊。這樣做可以將id添加到已有的元素中,而不是創建額外的元素。

這裏是僞元素的一個版本:http://jsfiddle.net/kizu/gfXJJ/2/

或者你也可以添加頂部padding和負margin的元素與id本身:http://jsfiddle.net/kizu/gfXJJ/2/ - 但在這種情況下,有可能出現問題與它的背景,「導致該塊在頂部物理擴展。

+0

完美的作品,謝謝! – user635817

+4

@ user635817請正式接受kizu的回答。 – Brent

1

我相信這個問題重疊在這個鏈接:offsetting an html anchor to adjust for fixed header它提供了更多的可能的解決方案。我相信這些問題可以合併,但我沒有這些特權。 (這也是我作爲答案輸入的一個原因,雖然我知道它應該是一個評論,但我不允許發表評論。)

0

僞元素似乎不適用於所有場景。我有幸運用了負頂部邊距和正頂部填充來抵消負邊距。

例如。 <a id="xyz" style="margin-top:-50px; padding-top:50px">Title</a>