关于这个主题的bootstrap文档让我有点困惑。我想实现类似的行为,就像在文档中使用后缀navbar:导航条位于段落/页面标题下方,向下滚动时,它应该沿着直到到达页面顶部,然后固定在那里以进行进一步的滚动。
由于jsFiddle不支持navbar概念,我设置了一个单独的页面作为最小示例:http://i08fs1.ira.uka.de/~s_drr/navbar.html
我用这个作为我的导航栏:
<div class="navbar affix-top" data-spy="affix" data-offset-top="50">
<div class="navbar-inner">
<div class="container">
<div class="span12">
<a class="brand" href="#">My Brand</a>
This is my navbar.
</div>
</div> <!-- container -->
</div> <!-- navbar-inner -->
</div> <!-- navbar -->
我想我会希望data-offset-top
的值为0(因为酒吧应该“坚持”到最顶端“,但与50至少有一些效果观看。
如果还将JavaScript代码放在适当的位置:
<script>
$(document).ready (function (){
$(".navbar").affix ();
});
</script>
任何帮助感激不尽。
9条答案
按热度按时间1qczuiv01#
我遇到了类似的问题,我相信我找到了一个改进的解决方案。
不要在HTML中指定
data-offset-top
。相反,在调用.affix()
时指定它:这样做的好处是,您可以更改站点的布局,而无需更新
data-offset-top
属性。由于这使用了元素的实际计算位置,因此还可以防止浏览器在稍微不同的位置呈现元素时出现不一致。您仍然需要使用CSS将元素夹在顶部。此外,我必须在nav元素上设置
width: 100%
,因为.nav
元素与position: fixed
由于某种原因而行为不当:最后一件事当一个附加的元素被固定后,它的元素不再占用页面上的空间,导致它下面的元素“跳跃”。为了防止这种丑陋,我将导航栏 Package 在
div
中,我将其高度设置为等于运行时的导航栏:.
Here's the obligatory jsFiddle to see it in action。
nbysray52#
这是我第一次实现它,这是我发现的。
data-offset-top
值是为了产生粘贴效果而必须滚动的像素量。在本例中,一旦滚动50px
,项目上的类将从.affix-top
更改为.affix
。在您的用例中,您可能希望将data-offset-top
设置为大约130px
。一旦这个类发生了变化,你就必须在css中通过为
.affix
类的定位设置样式来定位你的元素。Bootstrap 2.1已经将.affix
定义为position: fixed;
,所以您需要做的就是添加自己的位置值。示例:
rhfm7lfc3#
为了解决这个问题,我修改了affix插件,当一个对象被附加或取消附加时,它会发出一个jQuery事件。
下面是pull request:https://github.com/twitter/bootstrap/pull/4712
代码:https://github.com/corbinu/bootstrap/blob/master/js/bootstrap-affix.js
然后执行以下操作以附加导航栏:
wz1wpwve4#
您需要从脚本中删除
.affix()
。Bootstrap在大多数情况下提供了通过
data-attributes
或直接使用JavaScript完成任务的选项。doinxwow5#
我从twitterbootstrap的源代码中得到了这个,它运行得很好:
HTML:
CSS:
JS:
juzqafwq6#
你只需要删除脚本。下面是我的例子:
y53ybaqx7#
感谢namuol和Dave Kiss提供的解决方案。在我的例子中,当我一起使用afflix和collapse插件时,我在导航栏的高度和宽度上遇到了一个小问题。宽度的问题可以很容易地解决,从父元素(在我的例子中是容器)继承它。我还可以用一点javascript(实际上是coffeescript)使它平滑地崩溃。诀窍是在折叠切换发生之前将 Package 器高度设置为
auto
,并在折叠切换发生之后将其修复回来。标记(haml):
CSS:
Coffeescript:
uz75evzq8#
我的附加导航栏的解决方案:
j0pj023g9#
类似于接受的答案,你也可以做一些像下面这样的事情来一次性完成所有事情:
这不仅调用了
affix
插件,而且还将附加元素 Package 在div中,这将保持导航栏的原始高度。