我的页面有一个固定的顶部导航栏,页面上有几个id元素。如果我按下这些id元素中的一个链接,它会将此id滚动到顶部,但它隐藏在顶部导航栏下方。在野外,页面很长,并且有不同的“跳跃点”。
我有a simplified fiddle to show the problem以下html
<div id="fixedbar">This is the fixed top bar</div>
<div id="toplinks"><a href="#first">First</a> <a href="#second">Second</a></div>
<p id="first"><strong>First</strong>
Lorem ipsum dolor sit amet[...]
</p>
<p id="second"><strong>Second</strong>
Duis autem vel eum iriure dolor[...]
</p>
<div id="bottomlinks"><a href="#first">First</a> <a href="#second">Second</a></div>
和这个css
body{padding:0;margin:0}
#toplinks{padding-top:2em}
#fixedbar{
position:fixed;
background-color:#ccc;
height:2em;
width:100%
}
我想要点击一个链接滚动到右边的元素,但补充固定的导航栏。 一个可能的解决方案最多只能包含css,但可以包含javascript或jquery(使用1.9生产)。
感谢您的帮助!
答案 0 :(得分:7)
这是JavaScript解决此问题的方法。将点击事件绑定到顶部链接和底部链接中的<a>
,点击事件查找目标<p>
偏移量,然后使用javascript滚动到该链接。
$("#toplinks, #bottomlinks").on('click','a', function(event){
event.preventDefault();
var o = $( $(this).attr("href") ).offset();
var sT = o.top - $("#fixedbar").outerHeight(true); // get the fixedbar height
// compute the correct offset and scroll to it.
window.scrollTo(0,sT);
});
答案 1 :(得分:1)
修改JS:
$("#toplinks a").click(function() {
var id = $(this).attr('href');
$('html, body').animate({
scrollTop: $(id).offset().top-40
}, 1000);
});
修改后的CSS:
body{padding:0;margin:0}
#toplinks{padding-top:2em}
#fixedbar{
position:fixed;
background-color:#ccc;
height:40px;
width:100%
}
小提琴:http://jsfiddle.net/xSdKr/
40(px)是菜单高度,1000是执行动画的时间(以毫秒为单位)。
JS解决方案比纯CSS更优雅,主要是因为它保留了元素,没有任何可能会干扰您的网站样式的人工填充。它还包括动画 - 人们通常会发现平滑过渡比使用纯CSS / HTML的insta翻转更容易接受,因为它们可以更容易地跟踪页面内容和您的确切位置。缺点是,如果有人在网址中使用#first
,他会看到菜单与标题重叠。
答案 2 :(得分:0)
你可以作弊。
body{padding:0;margin:0}
#toplinks{padding-top:2em; margin-bottom: -40px;}
#fixedbar{
position:fixed;
background-color:#ccc;
height:2em;
width:100%;
}
#first, #second{
padding-top: 40px;
}