我在我的网站上使用Zurb Foundation 4框架。我想要一个位于标题下方的导航栏,当您滚动过去时,该标题会粘在页面顶部。这样可以正常工作,除了当顶栏粘在页面顶部时页面内容跳起~45像素。可以在此页面上看到效果,但这是一个不同的导航元素:http://foundation.zurb.com/docs/components/magellan.html
有没有办法解决这个问题,还是我必须更改我的网站设计才能容纳这个错误?
文档在这里:http://foundation.zurb.com/docs/components/top-bar.html
<div class="contain-to-grid sticky">
<nav class="top-bar">
<ul class="title-area">
<!-- Title Area -->
<li class="name">
<h1><a href="/">Top Bar</a></h1>
</li>
<!-- Remove the class "menu-icon" to get rid of menu icon. Take out "Menu" to just have icon alone -->
<li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li>
</ul>
<section class="top-bar-section">
<ul class="left">
<li class="divider"></li>
<li class="has-dropdown"><a href="/grid.php">Item 1</a>
<ul class="dropdown">
<li><label>Level One</label></li>
<li><a href="#">Sub-item 1</a></li>
<li><a href="#">Sub-item 2</a></li>
<li class="divider"></li>
<li><a href="#">Sub-item 3</a></li>
<li class="has-dropdown"><a href="#">Sub-item 4</a>
<ul class="dropdown">
<li><label>Level Two</label></li>
<li class="has-dropdown"><a href="#">Sub-item 1</a>
<ul class="dropdown">
<li><label>Level Three</label></li>
<li class="has-dropdown"><a href="#">Sub-item 1</a>
<ul class="dropdown">
<li><label>Level Four</label></li>
<li><a href="#">Sub-item 1</a></li>
</ul>
</li>
<li><a href="#">Sub-item 2</a></li>
<li><a href="#">Sub-item 3</a></li>
<li class="divider"></li>
<li><a href="#">Sub-item 4</a></li>
</ul>
</li>
<li><a href="#">Sub-item 2</a></li>
<li><a href="#">Sub-item 3</a></li>
<li><a href="#">Sub-item 4</a>
</ul>
</li>
<li><a href="#">Sub-item 5</a></li>
</ul>
</li>
<li class="divider"></li>
</ul>
<!-- Right Nav Section -->
<ul class="right">
<li class="divider hide-for-small"></li>
<li><a href="#">Item 2</a></li>
</ul>
</section>
</nav>
答案 0 :(得分:11)
这似乎是Foundation 4的Javascript中的硬编码“功能”。它不会仅仅阻止链接的默认行为,而是自动强制链接重定向到#
,这会导致浏览器跳转到页面顶部。这似乎是故意的(更多内容是在一秒内)。
现在唯一的选择是不使用Top Bar组件,并使用其他更可靠的Foundation组件创建自己的导航。例如,您可以使用.sticky
类轻松地构建自己的导航,只需定义一个新的<nav>
元素,其中包含所有必需的<ul>
菜单项。
顶栏有一个非常具体的设计用途...点击“菜单”将使用Javascript将导航显示为顶栏下的一列选项。为确保移动用户可以滚动大量选项,这会将窗口跳转到页面顶部并删除fixed
行为,直到您关闭菜单。当Top Bar从页面顶部开始时,这种方法效果很好,但如果没有,则会产生严重影响(例如,滚动到页面顶部可能会使菜单移出视图)。
现在,这纯粹是意见......但我 真的不是 粉丝的Top Bar实施的粉丝。可用性测试表明,将您的移动菜单放在页脚中并使用锚链接到它们更有效和用户友好。您可以使用.hide-for-small
隐藏桌面菜单项,.show-for-small
显示您自己的自定义固定“菜单”链接...该菜单链接将锚定到您页脚中的移动专用菜单(再次,你会透露.show-for-small
)。
长话短说:Top Bar从可用性角度看起来很邋and,而且(根据设计)打破了你的用例。我建议你建立自己的粘性菜单: - )
答案 1 :(得分:6)
此问题已修复:https://github.com/zurb/foundation/issues/1993
<强>答案:强>
如果您不希望它跳转到顶部指定数据选项:
<nav class="top-bar" data-options="scrolltop: false">
或初始化:
$(document).foundation('topbar', {scrolltop: false});
答案 2 :(得分:2)
如果您不需要,请删除“sticky”类。为我工作。
答案 3 :(得分:1)
在此页面上:https://github.com/jordanmerrick/foundation/commit/47391710c7b6d30ad54e50f3b2526cb8f6184be1
我在foundation.topbar.js中找到了代码,该代码根据top-bar是否粘滞来为body标签添加填充:
if ($('.sticky').length > 0) {
var distance = $('.sticky').length ? $('.sticky').offset().top: 0,
$window = $(window);
var offst = $('nav.top-bar').outerHeight()+20;
(".sticky").after("<div class='top-bar-sticky-padding'></div>");
$window.scroll(function() {
if ( $window.scrollTop() >= ( distance ) ) {
$(".sticky").addClass("fixed");
- $('body')。css('padding-top',offst); }
else if ( $window.scrollTop() < distance ) {
$(".sticky").removeClass("fixed");
- $('body')。css('padding-top','0'); } }); }
我不是一个javascript向导 - 但似乎不是设置为.top-bar的高度,而是直接将其设置为.top-bar-sticky-padding的值,你可以控制使用媒体查询的偏移量,而不是强制偏移顶部条的大小。
我错了吗?我对“破解核心”感到紧张,但这似乎解决了我的问题。