最近,许多人都在思考“菜单”的通用符号。(“Navicon”,明白了吗?!)。Jordan Moore 为 Smashing Magazine 撰写了一篇关于此的大文章。Jeremy Keith 撰写了关于此的文章。Stuart Robson 撰写了关于此的文章。Tim Kadlec 撰写了关于此的文章。 如果您想阅读更多关于此类内容背后的思考并查看示例,请阅读这些文章。
在这篇文章中,我将重点关注“三线”符号(而不是向下箭头或其他可能的 navicon)。我非常喜欢三线符号作为表示菜单的符号。如果我们必须选择一个,我完全支持这个。
我们将探讨如何通过多种不同的方式创建此符号。

使用图像
我们如何将符号放到网站上……从什么时候开始?图像。这没什么问题。这个图像非常简单,非常适合使用 SVG。SVG 表示它 1) 文件大小极小,以及 2) 可以清晰地缩放至任何大小。HTML 可能如下所示
<a href="#menu">
<img src="menu.svg" alt="">
Menu
</a>
如果您要使用不带文本的符号,请务必包含alt
文本。您也可以使用 PNG 或其他格式,但 SVG 非常适合此类简单的绘图。
使用伪元素
使用元素没什么问题,但是如果我们使用伪元素和一些技巧,就可以在无需图像所需的额外 HTTP 请求的情况下创建此符号。(是的,它可以放在您的精灵图中,但您知道我的意思)。
伪盒阴影
仅使用语义标记
<a href="#menu" class="box-shadow-menu">
Menu
</a>
在 CSS 中,使用一些padding-left
在链接左侧留出一些空间。使用相对定位设置定位上下文。然后,将一条黑色线条绝对定位到左上角的空间。然后,使用box-shadow
在它下方创建两条线。
.box-shadow-menu {
position: relative;
padding-left: 1.25em;
}
.box-shadow-menu:before {
content: "";
position: absolute;
left: 0;
top: 0.25em;
width: 1em;
height: 0.15em;
background: black;
box-shadow:
0 0.25em 0 0 black,
0 0.5em 0 0 black;
}
伪渐变
与上面的标记相同。创建用于伪元素的空间的相同想法。只是这次,使用渐变来创建三条线。请记住,如果您使用“硬停止”在同一颜色停止处立即将颜色更改为另一种颜色,则渐变实际上不需要从一种颜色淡入到另一种颜色。
.gradient-menu {
padding-left: 1.25em;
position: relative;
}
.gradient-menu:before {
content: "";
position: absolute;
left: 0;
top: 0.21em;
bottom: 0.21em;
width: 1em;
background: linear-gradient(
to bottom,
black, black 20%,
white 20%, white 40%,
black 40%, black 60%,
white 60%, white 80%,
black 80%, black 100%
);
}
伪边框
感谢 Robson 先生 的贡献。他通过将双实线和单实线边框应用于伪元素来创建它。他还在演示中使用了像素值。Tim Kadlec 将它们转换为 em,以便它们随着文本缩放,这很好。
.border-menu {
position: relative;
padding-left: 1.25em;
}
.border-menu:before {
content: "";
position: absolute;
top: 0.25em;
left: 0;
width: 1em;
height: 0.125em;
border-top: 0.375em double #000;
border-bottom: 0.125em solid #000;
}
使用字体
有一个包含三条线的 Unicode 符号。
<a href="#menu">
☰ Menu
</a>
您可能会认为这很完美,但实际上,它最终会变得非常模糊。在我的视网膜显示屏上看起来还可以,但在非视网膜显示屏上看起来很糟糕。这种东西应该在任何地方都尽可能清晰。
您也可以始终使用图标字体。Entypo 在其免费集中包含此符号。线条是圆形的,在我看来,这看起来很好。Pictos 有一个点线点线点线的符号,这也很好。
我使用图标字体时,并没有遇到像那个 Unicode 图标那样模糊的问题。我不知道为什么会出现这种情况,但这就是生活。
更新:读者 G S 写道
关于文章 https://css-tricks.org.cn/three-line-menu-navicon/,一部较旧的诺基亚手机使用 Opera 12 能够显示 “与……相同”(U+2261) 的 Unicode 字符,但不能显示 “乾卦”(U+2630)。
似乎数学运算符比易经符号更有可能在字体中实现。
哪种方式最好?
我可能会避免使用 Unicode 符号,因为它没有正确的语义含义。我可能会避免仅仅为了这个符号而发出 HTTP 请求来获取图像。渐变方法很好,但它是一大块需要维护的代码。
我可能会选择内联 SVG。
“我非常喜欢三线符号”
“您可能会认为这很完美”
小错误
谢谢!已修复。我打算购买,因为它现在已经无关紧要了。
“模糊”;)
胡言乱语!
El unicode es genial!
我通过 Google 翻译,结果是
我通常同意,但如上所示:模糊一片。
我没有看到 Unicode 版本有任何模糊的地方(Win7 上最新的稳定版 Chrome 和 FF)。Chris,当您说它模糊时,能否截取您看到的屏幕截图?
关于 Unicode 版本,我唯一注意到的就是它在 FF 上(行间距更大)与 Chrome 上的显示效果差异很大,而其他版本在这两个浏览器上的显示效果几乎相同。
@Louis –
小号:http://cl.ly/K461
大号:http://cl.ly/K3ty
对我来说,两者都很模糊。
我同意 Louis 的观点,在 Windows 7 上,Unicode 版本看起来不错。
Chris,我在 Opera、Firefox、Chrome 和 Safari 中查看了这两个版本(所有版本都是最新的,并且在 Mac 上 - Snow Leopard),Unicode 版本确实看起来很模糊。也许 Windows 拥有更“清晰”的 Unicode 集或渲染方式与 Mac 不同(在此插入笑话)。
好的……在我看来,这像是抗锯齿的效果,因为它不仅仅是线条,而是一个文本字符。在我的屏幕上也看到了同样的情况,但我并不在意。但是,是的,其他版本确实更清晰。你说“模糊”的时候,我脑子里想象的是一大片雾。:)
如果 HTML/CSS 有办法说“不要对这个进行抗锯齿”(或者说是 ClearType?)或者其他什么方法,那就很有意思了。
顺便说一句,我在用 Mac,Unicode 版本看起来非常清晰。
一定是多种因素共同作用的结果。
有点晚了,但仍然值得注意。可以通过在 Unicode 元素上使用
text-rendering: geometricPrecision;
来修复模糊问题。只是好奇,使用 CSS 样式化的块级元素构建它是否会有什么问题。标记可能会有点繁琐,但最终结果将是响应式的,并且可以以有趣的方式在其上使用过渡效果。
……让我们再试一次
<a href=”#” class=”menu”>
<span class=”horizLine”></span>
<span class=”horizLine”></span>
<span class=”horizLine”></span>
<span class=”hide”>打开菜单</span>
</a>
Christopher,
你刚刚创建了三个不必要的元素,而你可以用一个元素实现同样的效果。
我意识到这一点,Aaron,但在这种情况下,结果是否能证明手段的合理性呢?结果将像 SVG 一样灵活,而无需依赖浏览器支持或其他资源(如 Modernizr 或符号字体)。它只需要几个 CSS 规则,并且加载速度与页面上的任何其他块级元素一样快。
完美。我一直在寻找如何实现这个图标!
还有这个 Unicode 字符“全等”≡,有点小。
我想我会尝试伪元素,因为我现在在我的当前项目中没有使用图标字体。
无论如何,像往常一样:感谢 Chris!
正如 Jordan Moore 在他的 SmashingMag 文章中指出的那样,☰ Unicode 字符在 Android 设备上无法正确渲染。他提到 ≡ 作为一种更好的设备支持的替代选择,但看起来不太合适。另一个 meh。
我发现 Bootstrap 的解决方案很有趣。它使用了三次精灵图;每行一次!
糟糕。< pre > 标签在预览中有效 :(
访问http://twitter.github.com/bootstrap/examples/hero.html 并将浏览器缩小到 760px 以下,如果要查看它。
Chrome 的最新版本用这三个线条图标替换了扳手。就我个人而言,我更喜欢扳手,因为这三条线让我想起了通风口盖。
没错;通风孔。它们使浏览器更快。
此外,我非常确定该图标的最初意图是用于“排序”,但我可能编造了这一点。
尽管作为菜单图标它确实有效,但实际上它与熟悉度和普及度有关——我认为这个图标已经存在了。
嗯,在 Firefox 上,你的 .svg 是模糊的,而 Unicode 是清晰的。这只针对我……
我对 Unicode 做了一些实验,很多移动浏览器很难处理它——特别是 Android (2.2–3.0) 和 Blackberry (5–7),如果我的记忆没错的话。它们要么显示空白,要么显示“损坏”的字符,比如矩形或类似的东西。
我喜欢通用菜单项的想法。不过,我一直想到的一件事是这种类型的图标在重新排序列表项方面的用途。你知道,拖放以重新排序内容。你们怎么看。我们应该为重新排序功能使用其他东西,还是应该重新考虑菜单图标?
我老实说也想到了同样的事情。我喜欢这个图标,用户正在习惯它表示菜单,那么我们现在如何处理重新排序呢?我们是否应该给他们类似于可移动光标图标的东西来表示它可以重新排序?
我认为有时看到的点状正方形(我现在脑海中没有例子)可以作为重新排序图标。
如果你使用 SVG,为什么不节省带宽并直接包含标记呢。
菜单
你只需要为老旧浏览器加载一个 PNG。
我的想法也一样!这比另一个对相同数据的 HTTP 请求容易得多。
除了显式定义宽度和高度之外,从理论上讲,它似乎是一个有价值的替代方案。
@Chris 我同意你的观点,在 Mac 10.8.2 和 FF 15.0.1 上查看时,Unicode 版本看起来比伪元素版本模糊。
我想大概 97% 的人仍然不了解图标的含义,并且需要相当长的时间才能流行起来。
在这个阶段,最好将其与“菜单”一词一起使用,单独使用它只会让人困惑。
97% 来自哪里?是否有研究或只是编造的?
请记住:Facebook 和 Google Chrome 在没有文本的情况下使用它。那里有非常大的参与者,冒着用户不了解如何导航应用的风险。
为编造的统计数据欢呼!
我不确定为什么图标会让人困惑?对我来说,没有文本的图标的概念很简单——我宁愿第一次按下它时不确定图标代表什么,然后,在立即发现它的用途后,很高兴在剩下的十亿次按下该图标时那里没有文本。缺少标签几乎无意中暗示人们可以“弄清楚”,而不是“我们将无限期地为这个图标添加标签,因为你学不会”。
请记住,图标是为有视力的人设计的……不要忘记 12% 的工作年龄段的残疾人……(视力不好、颜色感知障碍、腕管综合征等身体疾病、认知障碍等)。注意:这是来自实际研究的结果,如果您需要来源,请告诉我……
但即使不考虑残疾人,我们也需要出于其他原因使用文本,这些原因您可能没有考虑过:例如,有人可能会在开车时使用汽车中的屏幕阅读器来朗读导航路线或航班行程,以便他们可以将注意力放在路上。
我认为随着技术的进步和融合,我们越多地开发可访问性,我们在不久的将来就越具有竞争优势。请记住,可访问性意味着任何人和任何事物都可以访问信息……这意味着任何操作系统、任何浏览器、任何技术以及任何能力的人。
这是一个非常有趣的讨论,我认为每种方法在特定情况下都可以成为一个好的解决方案。
例如,前一段时间,我为我的响应式 CSS3 下拉菜单使用了 base64 字符串这里。假设我的三线菜单导航图标仅对某些媒体查询可见,则较旧的浏览器将被排除在外(因为它们不支持媒体查询),因此我认为使用此方法是合适的。
现在,考虑到视网膜显示屏,我的解决方案听起来不太好了 :)
XP 上的最新版 Chrome 在 Unicode 上显示了一个方框——上面提到的 Mat 提到的损坏字符。在其他浏览器中运行良好。
我不明白。在无法重建渐变方法后,我从 CodePen 复制了代码,但没有得到黑色线条。还有其他人遇到同样的问题吗?
-已解决。最好检查一下 Prefixr -.-‘ 再次感谢 Chris
这很棒,但你只是做了一个“列表视图”图标。
有趣的是,很多大型应用和网站都在使用这个图标来表示菜单,所以大家对这个图标的含义已经越来越熟悉了。对于开发者或者那些对这个三横线图标有既定印象的人来说,它到底代表什么意义并不那么重要,重要的是用户看到它后会理解成什么。
我也遇到过这种情况,在我的案例中,它只会让我感到困惑,并隐藏了控件的实际用途。我认为齿轮、扳手等图标 *稍微* 更有可能暗示菜单,但即使它们也远非理想,因为它们需要一个相当大的隐喻跳跃。无论谷歌有多么庞大,我仍然认为这是一个有点愚蠢的选择——但是,也许他们进行过一项研究,表明人们比菜单的功能更容易记住菜单的视觉概念(文本项列表)。
我认为在这种情况下,很容易看出列表视图图标和菜单图标之间的区别。
列表视图通常伴随其他图标来表示不同的状态,例如:网格视图。
此外,列表图标通常在每条线前面都有一个额外的点或块,以显示它像一个项目符号列表。
三件事。
优秀的文章。
在 Win 7 的所有浏览器中,Unicode 对我来说都很模糊……
争论它不被识别为“菜单”按钮是荒谬的。事实信息和逻辑推演清楚地表明,它几乎是菜单图标的标准……
虽然事实上存在可以为此工作的 Unicode;但你绝对不应该使用 Unicode 来表示此符号。
这是黑客的定义。CSS 或 SVG/IMG 是更好的方法。强烈建议不要使用中国三爻☰(天)。
盒阴影和渐变是袋子里最脆的薯片。它们在各种尺寸下也能完美工作。我对此决定 110% 确定。
三条线将继续存在。很快我们就能将神奇的三条线刻在石头上,以便其他人能够理解我们神秘的界面图标。
有趣的阅读,即使,正如你所说,很多人已经谈论过它了。拥有你的观点总是很有趣的!:-)
我也认为我们需要一个导航菜单的标准图标,而这个看起来很合适。使用 Facebook(移动版)的用户已经习惯了它,而且由于它可能是使用最广泛的移动应用程序之一,因此可以合理地假设它已成为标准。对于不了解它的人,第一次看到它时,只需简单地点击一下好奇心就可以解决问题。
我对使用图像并不感到震惊。我不太喜欢使用“技巧”来获得像这样的简单图像可以实现的结果。
如果这是你网站上 **唯一** 的图像,可能值得寻找其他选项。如果不是,它是一个小的图标,你可以很容易地将其添加到你的精灵图中。
我个人很喜欢微软在其主页上使用的图标
我试着玩了一下,并使用 CSS 伪元素得到了 一个近似值。
啊,它吃了我的图片。这里有一个 指向它的链接。
两者看起来几乎一样。我在我的 Windows 8 电脑上使用 Chrome 没有看到任何模糊,但 IE10 没用。它使所有东西都模糊,甚至文本也模糊,垃圾 IE。如果 OSX 可用于普通电脑,Windows 早就死了,(盖茨在 G4 安全的门口)。
有人提到这个“菜单图标”看起来很像通常用于“列表视图”图标的东西。那么我们是否应该继续对“列表视图”使用相同的图标呢?
如果你打算在你的网站上使用很多较小的图标,那么我会考虑使用“Font Awesome”,它包含了这个以及许多其他非常方便的符号,并且免费提供。
我认为 SVG 版本是最灵活的。当移动开发人员认为另一个图标比这三条线更合适时,你可以将图像/矢量更改为任何其他图标。
这也是一种将矢量而不是静态图像引入网站的好方法。我认为未来我们会看到很多这样的情况,因为我们会拥有更新的显示器和更高的分辨率。
我之前用 CSS 创建过这个图标,但作为移动拖动句柄,我使用了 background-size;)
http://codepen.io/seanjacob/pen/pBDmK
div:before { content:''; position:absolute; top:0.25em; left:0; width:1em; height:0.75em; background-image:-webkit-linear-gradient(top, black 30%, transparent 30%); background-size:100% 0.3em; }
即使三线导航图标看起来像是可排序列表(如 iOS 等)的抓取句柄,我仍然认为它也是一个很棒的菜单小图标。
Google 似乎在所有地方都使用它,后退按钮、菜单按钮、更多信息按钮,任何导航到包含列表数据的页面的按钮。
请记住,图像在皮肤方面可能非常受限制。如果这对你网站很重要,请务必考虑这一点,并使用 Chris 提到的其他技术之一 *或*(如果你的 技术要求允许),直接在你的 CSS 中使用 SVG。
另一个使用单边框、填充和内容框背景裁剪的版本
适用于现代和传统浏览器的三线菜单导航图标
http://codepen.io/anon/full/Lxecv
喜欢它
这篇文章很棒,但是当我尝试伪盒阴影和伪渐变方法时,只有三条线中的最上面一条变成了活动链接。Justin,你的方法更简洁,并且使所有三条线都成为活动链接。谢谢!
我将尝试在 Bootstrap 中实现它。:)
为了更进一步地将它们联系起来,我在三线导航图标和我对其用法的思考方面写了一篇文章,请访问这里
http://alwaystwisted.com/post.php?s=2012-10-12-these-3-lines
啊,Google 赶上了潮流。Google 移动版获得了类似 Facebook 应用程序的侧边菜单!
我在此使用视网膜屏幕。Unicode 在大尺寸下看起来不错,但在小尺寸下中间线模糊。我的假设是它在某些东西上使用了 0.5 像素,这使得 1 像素的不透明度为 50%,因此你会得到一个半模糊的图像。不确定,但这就是我的大脑告诉我的。
还有一个 html 代码等价物,而不是使用 unicode 骑兵。
道教宇宙学中使用的八卦图中,天/天空(乾)的符号怎么样?
它具有不同的 Unicode 值。对我来说效果很好。
这对你正在示例中使用的☰ (☰) 会有影响吗?
简单的解决方案总是最好的!我会在我的博客上尝试一下。
这是最简单且可能是最好的解决方案。谢谢
天/天空字符根据浏览器显示不同,有些线条比其他线条粗。
等价字符看起来很棒,直到我尝试 Opera Mobile/Mini。
我正在使用粗体管道字符 ||| 和
-webkit-transform:rotate(-90deg);-moz-transform:rotate(-90deg);-ms-transform:rotate(-90deg);-o-transform:rotate(-90deg);
对于不同的线条长度/粗细,尝试使用小写 L **lll** 或大写 I **III** 以及不同的无衬线字体
我在1998年创造了“navicon”这个词,但没有人关注。现在看到它流行起来真是太好了。
这可能是最好的解决方案,演示图也很有帮助。谢谢
Unicode平滑问题可以通过 -webkit-font-smoothing:none 解决 - 然而,这仅适用于相对较新的 WebKit 浏览器版本。
您是灵感和超级有用技巧的源泉!再次感谢 :)
您还可以使用 Unicode 数学运算符
≡
。这两个 Unicode 字符的主要区别在于高度/宽度比。除非您另行指示,否则文本将进行抗锯齿处理。
考虑到默认情况下其余 99.99999% 的 UI 都启用了抗锯齿,我不太担心单个 Unicode 字符的“模糊”。那是在胡说。
顺便说一句,Unicode 是 8801
你好,
这在(Mac)Safari 上不起作用。
必须将 -webkit- 添加到样式中
background: -webkit-linear-gradient(top, ….
现在可以了 :-)
像往常一样,很棒的文章,Chris!
您还可以将伪元素和组合应用于导航元素,从而避免额外的标记和请求。
我整理了以下笔来进行说明
http://codepen.io/nickspiel/pen/ohCKF
嗯嗯
有趣的话题,但我觉得奇怪的是,关于菜单通用符号的讨论正在进行,据我所知,我们还没有表示语言选择的国际符号。
由于某种原因没有每个语言的 URL 的网站只能使用国旗或冒着注意力持续时间不足的用户不会搜索 EN FR DE 等的风险 - 大多数精明的网站设计师意识到只有国旗才能及时引起注意 - 我认为需要一个醒目的符号,类似于国旗后跟 ISO 语言代码,但符号是必要的,代码本身在现实世界中不起作用。
我认为在某种程度上,美国的语言盲目性与此有关。
这里有另一种解决方案,这是一个页面,但如果您删除边框,则这是一个 4 行菜单
http://cssdeck.com/labs/css3-monochrome-icon-set
它在您所有的设备上都正常吗?
另一种方法
http://www.sitekickr.com/blog/creating-navicon-icon/
专业提示:如果您要使用它,请使用 ≡ 而不是 &9776; 或
ࣕ 在浏览器中具有更广泛的支持。
http://unicode.johnholtripley.co.uk/2261/
但是,很少有用户熟悉这种模式,并且按钮上的“菜单”标签测试效果更好。
http://exisweb.net/menu-eats-hamburger
糟糕。表单呈现了它。它是 U+2261。不是 9776 或 2630。
带有 SVG 的按钮
最初我难以处理按钮/超链接,因为 SVG 不允许任何点击事件,意识到我在 SVG 图标的 CSS 中缺少了这个:{pointer-events: none;}。
现在运行完美!
text-rendering: optimizeLegibility;
修复了 Unicode 问题。我只是想到在按钮中使用 3 个老式的
<hr>
标签。如果你问我,还不错。我想到的另一个有趣的替代方案(并用于动画效果)
糟糕 - 看起来 Funkyscript 也想到了!https://css-tricks.org.cn/three-line-menu-navicon/#comment-196713
http://uxfindings.blogspot.com:关于这个三线移动菜单概念有如此多的炒作。然而,有一些研究表明汉堡图标的设计可能导致用户认为它实际上是一个拖动条。我想提交一个想法,也许我们在这里需要一些纳米交互设计。也许是时候使用新的菜单图标了……
一个新的菜单图标
http://uxfindings.blogspot.com/2014/06/a-new-menu-icon.html
为什么要寻找新的设计?第一行上的减号和第二、三行上的 2 个“大减号”(em 破折号)看起来像一个菜单,它可以用所有操作系统上的字符非常轻松地制作出来。也许可以添加第四行,必须查看“要求”