如何使用Foundaton 6更改小屏幕上顶级链接的功能
How to change the function of top level links on small screens with Foundaton 6?
我在项目中使用Foundation v6.2.0。我遇到了一些困难,无法让顶部栏在小屏幕上按要求工作。在小屏幕上,我希望导航的顶层充当直接链接(而不是显示子菜单的触发器),并将该功能移动到顶层项目右侧的插入符号(小向下箭头),因此它现在触发子导航的显示。
$(document).foundation();
<link href="https://cdn.jsdelivr.net/foundation/6.2.0/foundation.min.css" rel="stylesheet"/>
<script src="https://cdn.jsdelivr.net/foundation/6.2.0/foundation.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<nav class="title-bar" data-responsive-toggle="top-bar-menu" data-hide-for="medium">
<div class="title-bar-left">
<a href="#" class="toggle-topbar menu-icon" data-toggle><span class="hamb-icon"></span></a>
</div>
<div class="title-bar-right hide-for-small">
</div>
</nav>
<nav class="top-bar main-nav" id="top-bar-menu">
<div class="row main-nav">
<div class="top-bar-left">
<ul class="vertical medium-horizontal menu menu-items" data-closing-time="0" data-responsive-menu="accordion medium-dropdown">
<li><a href="http://foundation.zurb.com/">Item 1</a></li>
<li><a href="http://foundation.zurb.com/">Item 2</a>
<ul class="menu vertical">
<li><a href="http://foundation.zurb.com/">Item 2A</a></li>
<li><a href="http://foundation.zurb.com/">Item 2B</a></li>
</ul>
</li>
<li><a href="http://foundation.zurb.com/">Item 3</a></li>
<li><a href="http://foundation.zurb.com/">Item 4</a></li>
<li><a href="http://foundation.zurb.com/">Item 5</a></li>
<li><a href="http://foundation.zurb.com/">Item 6</a></li
</ul>
</div>
<div class="top-bar-right search-bar">
</div>
</div>
</nav>
如果您希望(例如)Item 2
在单击时充当<a href="go_here">
链接(而不是显示Item 2A
和Item 2B
的触发器);我不认为在基金会有一个标准的方法来做到这一点。然而,你可以通过隐藏在更大屏幕或JavaScript/jQuery+CSS+HTML更改中的附加链接来绕过它:
附加链接
这个选项不需要添加破解或额外的CSS来隐藏不需要的菜单家具或覆盖基础菜单的工作方式。这样做的目的是添加一个只在小屏幕上可见的新链接,同时保持原始链接不变,以继续充当触发器。
<li><a href="http://foundation.zurb.com/">Item 2</a>
<ul>
<li class="show-for-small-only">
<a href="http://foundation.zurb.com/">Item 2 "home"</a>
</li>
<li><a href="http://foundation.zurb.com/">Item 2A</a></li>
<li><a href="http://foundation.zurb.com/">Item 2B</a></li>
</ul>
</li>
JSfiddle:https://jsfiddle.net/sons9wzr/2/
这更有用,但需要额外单击才能显示子菜单。也可以使用JavaScript/jQuery动态地执行此操作。
JavaScript/jQuery+CSS+HTML
如果目标是只为移动设备提供相关链接,并为桌面提供扩展菜单,则可以使用与上面第一个示例中类似的添加类来隐藏子导航,添加JavaScript,然后使用CSS隐藏多余的插入符号。
所以你的HTML变成了这样:
<li><a class="forced" href="http://foundation.zurb.com/">Item 2</a>
<ul class="show-for-large-only">
<li><a href="http://foundation.zurb.com/">Item 2A</a></li>
<li><a href="http://foundation.zurb.com/">Item 2B</a></li>
</ul>
</li>
然后使用JavaScript(jQuery是Foundation所必需的)强制点击某些导航项(通过将class="forced"
添加到每个<a>
中,您希望强制转到上面HTML中的新位置)。
仅适用于小屏幕的JavaScript示例:
//check for screen size = small
if(Foundation.utils.is_small_only()) {
$('nav').on('click','a.forced', function (e) {
e.preventDefault;
window.location.href = $(this).attr('href');
});
}
(有关媒体查询JS实用程序的更多信息)
这仍然会在菜单项上留下插入符号,尽管这可能会让用户感到困惑,所以你可以用这个删除它(从所有子导航项中):
.is-accordion-submenu-parent > a::after {
display: none;
}
这应该会给您带来所需的效果,尽管在更新Foundation时可能需要额外的维护。
Codepen中的示例(不带代码,仅适用于小屏幕):http://codepen.io/tymothytym/pen/eZGEER
编辑:好的,基于这个评论:
我希望能够通过单击父元素右侧的图标来展开移动视图中的菜单,也希望能够单击父元素本身。
我创建了一个新的解决方案。这在很大程度上是一个破解,而不是一个很好的解决方案。我建议要么找到一个替代导航设置,要么在Foundation提供的框架内工作。
新建HTML(forced
类移动到<li>
并添加<span>
)
<li class="forced">
<span data-item="Item 2" class="show-for-small-only"></span>
<a href="http://foundation.zurb.com/">Item 2</a>
<ul class="menu vertical">
<li><a href="http://foundation.zurb.com/">Item 2A</a></li>
<li><a href="http://foundation.zurb.com/">Item 2B</a></li>
</ul>
</li>
新建CSS这将分割<li>
的内容并定位新的子元素
.is-accordion-submenu-parent > a::after {
display: none;
}
@media only screen and (max-width: 40em) {
li.forced span {
content: 'Item 2';
display: inline-block;
padding: .7rem 1rem;
line-height: 1;
width: 70%;
color: #2199e8;
cursor: pointer;
}
.menu > li.forced > a {
padding: .7rem 1rem;
line-height: 1;
float: right;
}
}
新JavaScript
这会更改链接的文本(您只需要在上面显示的小屏幕上这样做…),使新的<span>
成为链接,通过数据属性插入文本&将原始链接文本更改为插入符号(以保留尽可能多的原始功能)。
$(document).foundation();
$('nav').on('click','.forced span', function () {
window.location.href = $(this).siblings('a').attr('href');
});
$('.forced > a').html("▼");
$('.forced > span').text($('.forced > span').data("item"));
此处的示例:http://codepen.io/tymothytym/pen/GZOqvO
我认为这可能有可用性和维护问题,所以要谨慎使用。
- 如何绑定多个具有相同敲除功能、传递不同ID的链接
- 功能点击使打开新链接,不转到原始链接
- 修复Javascript代码以将文本中的所有Youtube链接转换为Youtube ID功能
- 如何在用户提交链接时添加提取推文并将其发布到站点的功能
- 具有双重功能的按钮:在_blank窗口中打开一个链接,再加上_self中的另一个链接
- 通过模糊功能传递链接,而不是单击另一个链接
- AngularJS:在指令's链接功能
- DOM在指令中未就绪's链接功能.hacky Timeout是唯一的解决方案吗
- 链接功能中的角度单元测试$attrs
- jQuery:使用 var 快捷方式分配数据以及如何链接功能以在加载和单击时运行
- 角度链接功能:$Scope与范围
- angularjs链接功能的用途
- 谷歌硬盘的网络主机链接功能有被淘汰的危险吗
- 为什么我们需要Angular指令's链接功能
- Angular.js单元/集成测试-触发链接功能
- 可以混合使用模板和链接功能
- 锚链接功能-onclick和href
- 链接功能作为承诺
- 执行指令的参数's的链接功能依赖于DI
- 如何重画图表:d3.js链接功能和交叉过滤过滤