CSS 类取决于页面位置

Posted

技术标签:

【中文标题】CSS 类取决于页面位置【英文标题】:CSS class depending on page position 【发布时间】:2011-10-26 01:23:50 【问题描述】:

我在页面顶部有一个固定导航,其中包含通过 jQuery 平滑滚动到页面不同部分 (ID) 的链接。

是否有任何可能的方法可以根据您所在页面的哪个部分将 css 类(例如 .current)附加到导航链接?

例如,当我点击“关于”时,它会向下滚动到“关于”部分,并且只要您停留在该部分,导航文本也会变为橙色?

我不久前在某个地方看到过这种做法,但我不记得网站,甚至不记得如何描述这种行为来搜索它。

编辑:这是与我正在寻找的内容相似的链接: http://www.fat-man-collective.com/hello.php

图标会根据您在页面上的位置而变化。

脚本:

<script> 
  function goToByScroll(id)
  $('html,body').animate(scrollTop: $("#"+id).offset().top - 50,'500');
  
</script>

HTML:

<a href="javascript:void(0)" onClick="goToByScroll('about')">About</a>

[...]

<div id="about">
  [...]
</div>

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

这可以通过检查所需元素的offset()* 函数然后编码以做出相应的响应来实现。您可以跟踪元素的偏移量,并根据产生的偏移量,相应地应用或删除适当的类。

*查看offset()的文档

【讨论】:

谢谢...我可以看到这个工作,但我不是很了解 javascript。我在文档中没有看到如何根据偏移量应用类/删除类的示例;只得到偏移量。【参考方案2】:

当您单击导航中的某个部分时,只需修改类,使样式成为您想要的样式。

其次,您需要在scroll 事件上添加一个类似修改导航类的事件处理程序。

【讨论】:

【参考方案3】:

试试这个:

function goToByScroll(id)

    $('ul#nav li a').removeClass('active'); // elements in menu
    $(this).addClass('active');
    $('html,body').animate(scrollTop: $("#"+id).offset().top - 50,'500');


【讨论】:

【参考方案4】:

四年后...对于那些有同样问题的人,希望 OP 现在已经解决了他的问题。

查看 Bootstrap 的 ScrollSpy 插件,该插件“用于根据滚动位置自动更新导航目标”。有关使用 ScrollSpy 插件的示例,请参阅this detailed tutorial,了解如何制作浮动、更新的导航栏(就像 Bootstrap 网站使用的那样)。

【讨论】:

以上是关于CSS 类取决于页面位置的主要内容,如果未能解决你的问题,请参考以下文章

CSS中position 和float的使用说明(清晰)

点击页面出现富强民主这类文字动画效果

nginx 服务页面取决于协议

@page background-image 取决于类?

css 伪类实现弧形

如何在页面呈现时才开始CSS3动画