我有一个指向 HTML 页面上锚点的链接。当点击该链接时,页面会滚动到锚点位置,使其位于页面可见部分的顶部。如何让页面滚动,以使锚点位于页面中间?
<span class="anchor" id="section1"></span>
<div class="section"></div>
然后放置以下CSS代码
.anchor{
display: block;
height: 115px; /*same height as header*/
margin-top: -115px; /*same height as header*/
visibility: hidden;
}
谢谢,菲利普!
添加一个 <span class="anchor" id="X">
,然后将 anchor
类样式设置为:
.anchor {
position: absolute;
transform: translateY(-50vh);
}
使用-50vh
将使锚点在屏幕中央滚动。
HTML:
<a id="anchor">NEWS</a>
css:
#anchor{
position: relative;
padding-top: 100px; //(whatever distance from the top of the page you want)
}
对我来说运行良好
在纯html\css中没有直接的方法来实现这个功能。不过通过使用js,可以获取元素的顶部位置并将页面的顶部位置设置为该元素的位置减去页面高度的一半来实现。
<h2 id="jump_tag" style="padding-top: 500pt; margin-top: -500pt;"></h2>
但是,您仍然需要通过JavaScript来调整高度。在 charles.cc.hsu的答案 的基础上,我们可以使用相对于视口高度的 vh
CSS 单位来扩展任意高度的元素。
HTML:
<span class="anchor" id="section1"></span>
<div class="section"></div>
CSS:
.anchor{
display: block;
height: 50vh; /* 50% viewport height */
margin-top: -50vh;
visibility: hidden;
}
vh
即视口高度,自IE9版本开始已经支持,因此可以放心使用。
由于“页面中间”是相对于用户屏幕和窗口在任何给定时间的大小而言的,因此您需要使用Javascript来实现这一点,因为在纯HTML/CSS中没有办法获取垂直屏幕宽度。
$(window).on("load", function () {
var urlHash = window.location.href.split("#")[1];
if (urlHash && $('#' + urlHash).length )
$('html,body').animate({
scrollTop: $('#' + urlHash).offset().top-100
}, 1000);
});
Firefox支持在命名锚点上设置padding-top属性。从那里,您可以通过JavaScript设置包含浏览器尺寸的cookie,并相应地在服务器端调整您的padding-top。对于最终用户来说,它看起来像是纯html/css,但Noam是正确的,需要一点JS来获取浏览器的尺寸,因为它不会在没有一点强制的情况下提供这些信息。