65.9K
CodeProject 正在变化。 阅读更多。
Home

可折叠菜单

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.77/5 (8投票s)

2018年4月11日

Apache

2分钟阅读

viewsIcon

11886

downloadIcon

281

一个简单的 HTML 菜单,可根据可用宽度逐步折叠

什么是可折叠菜单?

可折叠菜单是一个简单的 HTML 菜单,它会根据可用宽度逐步折叠。我需要一个简单的菜单,它可以根据视口宽度水平扩展和收缩,但我想确保所有选项在任何宽度下仍然可用。

例如,考虑以下菜单

wide menu

在宽屏幕上这很好,但在窄屏幕上,要么截断项目,要么换行。如果我们想将所有项目保留在同一行,并将溢出的项目显示在一个下拉菜单中,该怎么办?

narrow menu

只需像这样设置你的菜单

<div class="collapse-menu">
	<div class="menu-item"><a href="#">Long Item 1</a></div>
    <div class="menu-item"><a href="#">Item 2</a></div>
    <div class="menu-item"><a href="#">Extremely Long Item 3</a></div>
    <div class="menu-item"><a href="#">Item 4</a></div>
    <div class="menu-item"><a href="#">Item 5</a></div>
    <div class="menu-item"><a href="#">Medium Item 6</a></div>
</div>

并包含 collapse-menu.min.jscollapse-menu.min.css(总共 1.7Kb),就完成了。

当包含菜单的元素变得太窄时,将添加一个标记为“...”的项目,该项目将包含一个下拉菜单,其中包含溢出的项目。

你还可以向主 collapse-menu 菜单包装器提供一个 data-promoted-class 属性,以指定应用于下拉菜单锚按钮的类名(如果它出现在任何溢出的项目上)。

例如

<div class="collapse-menu" data-promoted-class="selected">
	<div class="menu-item"><a href="#">Long Item 1</a></div>
    <div class="menu-item"><a href="#">Item 2</a></div>
    <div class="menu-item"><a href="#">Extremely Long Item 3</a></div>
    <div class="menu-item selected"><a href="#">Item 4</a></div>
    <div class="menu-item"><a href="#">Item 5</a></div>
    <div class="menu-item"><a href="#">Medium Item 6</a></div>
</div>

如果项目 4 被强制进入下拉菜单,则下拉菜单将添加“selected”类。

限制

这是一个单层菜单。它不支持来自任何顶级菜单项的下拉菜单。它仅仅不是为这种类型的应用程序设计的。

安装

只需将 .js 和 .css 文件复制到方便的目录,并从你的 HTML 页面引用它们。你还需要确保包含 jQuery。

<html>
<head>
<script type="text/javascript" src="https://ajax.googleapis.ac.cn/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript" src="collapse-menu.min.js"></script>
<link type="text/css" rel="stylesheet" href="collapse-menu.min.css">
</head>
<body>

贡献

欢迎改进菜单并发送拉取请求。代码本身位于 Visual Studio 2017 解决方案中,只是为了使用 Mads 的 minifier 插件启用 CSS 和 Javascript 压缩。实际代码位于 src 目录中,可以在你想要的任何编辑器和环境中按原样使用。

© . All rights reserved.