DIY 优先级+导航

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费积分!

我们之前在这里写了一些关于优先级+模式的内容。这里有一些现实世界的例子。 我最近需要使用它。我发现了 Gijs Rogé 的 priority-navigation。它非常好:没有依赖项,代码简洁,相当可配置和可设计。不过它不是特别小,而且有相当一部分定义了辅助函数。我当时在一个拥有所有这些东西的环境中,所以我想尝试一个版本。

技巧:测试元素是否换行

查看 CodePen 上 Chris Coyier (@chriscoyier) 的笔 通过换行/jQuery 实现优先级导航

此版本依赖于 jQuery(用于 DOM 易用性)和 Lodash(用于去抖动)。这些远非微不足道,您可能不会仅仅为了导航而添加它们,但我的项目可以使用它们。

我也采用了与我在其他版本中看到的略有不同的方法。我没有测量可用宽度和每个菜单项的宽度以查看它们是否适合,而是让菜单项换行。当窗口大小调整时,我检查元素的位置,如果可以通过它们的位置判断它们是否已换行,则将其放入溢出中。因此,您实际上永远不会看到任何换行。(如果您的菜单项可以换行,您可能不需要优先级+。)

当然,还需要做一些工作。有了关于哪些项目应该在溢出中的信息,我需要将它们克隆到那里。并且准备好当窗口大小调整时重复执行所有操作,但不要太快(因此 去抖动)。

技巧:测量宽度

我更常见到的技巧是测量宽度并根据这些宽度做出选择。Johan van Tongeren 有一个这样的版本

查看 CodePen 上 Johan van Tongeren (@Dreamdealer) 的笔 响应式水平菜单

代码非常简洁。测量可用空间和元素所需的面积。如果没有足够的空间,则将一个元素提取到溢出中并重试。这似乎有很多计算,特别是递归,而且没有去抖动,但它运行起来还不错。

Luke Jacksonn 以类似的方式编写了一个版本

查看 CodePen 上 lukejacksonn (@lukejacksonn) 的笔 贪婪导航

技巧:提前选择溢出项

Michael Scharnagl 有一个演示,根本不需要 JavaScript。

它使用 :target 选择器 来隐藏/显示一组链接。他使用链接上的 alpha/beta/gamma 类结合媒体查询,在不同的屏幕宽度下显示更多/更少的链接。

重点

嗯。我想你可以随时获取别人的代码来完成某些事情。很多时候这是一个好主意。但有时自己深入研究并尝试自己编写并探索其他可能性也很有趣。我不确定我的版本是否更好(不是),但我了解了问题和不同的可能方法。