如果我在HTML页面中有一个非滚动头,固定在顶部,有一个定义的高度:
是否有一种方法可以使用URL锚(#fragment部分)让浏览器滚动到页面中的某一点,但仍然尊重固定元素的高度,而不需要JavaScript的帮助?
http://example.com/#bar
WRONG (but the common behavior): CORRECT:
+---------------------------------+ +---------------------------------+
| BAR///////////////////// header | | //////////////////////// header |
+---------------------------------+ +---------------------------------+
| Here is the rest of the Text | | BAR |
| ... | | |
| ... | | Here is the rest of the Text |
| ... | | ... |
+---------------------------------+ +---------------------------------+
我需要一些东西,适用于入站链接,页面上的链接,并可以通过JS的目标,以便页面可以响应头部高度的变化
HTML
<ul>
<li><a href="#ft_who">Who?</a></li>
<li><a href="#ft_what">What?</a></li>
<li><a href="#ft_when">When?</a></li>
</ul>
...
<h2 id="ft_who" class="fragment-target">Who?</h2>
...
<a href="#">Can I be clicked?</a>
<h2 id="ft_what" class="fragment-target">What?</h2>
...
<h2 id="ft_when" class="fragment-target">When?</h2>
CSS
.fragment-target {
display: block;
margin-top: -HEADER_HEIGHTpx;
padding-top: HEADER_HEIGHTpx;
z-index: -1;
}
z-index: -1允许片段目标上方“填充区域”中的链接仍然是可点击的,正如@MuttenXd在他的回答中所评论的那样
我还没有在IE 11、Edge 15+、Chrome 38+、FF 52+或Safari 9.1+中发现问题
我在这里和其他地方的许多答案都遇到了很多麻烦,因为我的书签锚是FAQ页面中的部分标题,所以抵消标题并没有帮助,因为其余的内容只是停留在原地。所以我想我应该发帖。
我最终做的是几个解决方案的组合:
CSS:
.bookmark {
margin-top: -120 px;
padding-bottom: 120 px;
显示:块;
}
其中“120px”是你的固定标题高度(可能加上一些边距)。
书签链接HTML:
<a href="#01">你的常见问题是什么来着?< / >
书签内容HTML:
<span class="bookmark" id="01"></span>
你的常见问题是什么来着?< / h3 >
<p>一些常见问题的文本,后面跟着
< p >…</p>
这个解决方案的优点是span元素不仅隐藏,而且本质上是折叠的,不会填充您的内容。
我不能对这个解决方案有太多的功劳,因为它来自不同的资源,但它最适合我的情况。
你可以在这里看到实际的结果。